Tengo un formulario de contacto oculto que se despliega haciendo clic en un botón. Sus campos se establecen como imágenes de fondo CSS, y siempre aparecen un poco más tarde que el div que se ha cambiado.
Estaba usando este fragmento en la <head>
sección, pero sin suerte (después de borrar el caché):
<script>
$(document).ready(function() {
pic = new Image();
pic2 = new Image();
pic3 = new Image();
pic.src="<?php bloginfo('template_directory'); ?>/images/inputs/input1.png";
pic2.src="<?php bloginfo('template_directory'); ?>/images/inputs/input2.png";
pic3.src="<?php bloginfo('template_directory'); ?>/images/inputs/input3.png";
});
</script>
Estoy usando jQuery como mi biblioteca, y sería genial si pudiera usarlo también para arreglar este problema.
Gracias por tus pensamientos.
Respuestas:
Precargar imágenes usando solo CSS
En el siguiente código, elijo el
body
elemento al azar , ya que es uno de los únicos elementos que se garantiza que existe en la página.Para que el "truco" funcione, usaremos la
content
propiedad que permite cómodamente configurar múltiples URL para cargar, pero como se muestra, el::after
pseudo elemento se mantiene oculto para que las imágenes no se rendericen:Manifestación
es mejor usar una imagen de sprite para reducir las solicitudes http ... (si hay muchas imágenes de tamaño relativamente pequeño) y asegurarse de que las imágenes estén alojadas donde se usa HTTP2 .
fuente
body
, ya que estas imágenes se cargarán en cada página que haga referencia a la hoja de estilo. En su lugar, debe usar.contact_form:after {...}
o alguna otra clase que sea menos global. A menos, por supuesto, que su formulario de contacto esté en cada página;)Puedo confirmar que mi código original parece funcionar. Me estaba apegando casualmente a una imagen con un camino equivocado.
Aquí hay una prueba: http://paragraphe.org/slidetoggletest/test.html
fuente
Carga previa de imágenes con etiqueta HTML <link>
Creo que la mayoría de los visitantes de esta pregunta buscan la respuesta de "¿Cómo puedo precargar una imagen antes de que comience el procesamiento de la página?" y la mejor solución para este problema es usar la
<link>
etiqueta porque la<link>
etiqueta es capaz de bloquear el procesamiento posterior de la página. Ver preventivoEstas dos opciones de valor del atributo
rel
( relación entre el documento actual y el documento vinculado ) son las más relevantes con el problema:Entonces, si desea cargar un recurso ( en este caso es una imagen ) antes de que comience el proceso de representación de la
<body>
etiqueta, use:y si desea cargar un recurso mientras se
<body>
está procesando, pero planea usarlo más adelante de forma dinámica y no quiere molestar al usuario con el tiempo de carga, use:fuente
prefetch
cuando el navegador esté inactivo, lo cual está determinado por lansIWebProgressListener
API. Vea esto para más información.<link rel="preload">
no no bloquear la representación, creo que el autor entiende mal la definición. Desde MDN Preloading content with rel = "preload" , "... que desea comenzar a cargar temprano en el ciclo de vida de la página, antes de que la maquinaria de renderización principal de los navegadores entre en funcionamiento". La idea es que los recursos se recuperen lo antes posible, por lo que es más probable que el recurso esté disponible cuando se necesite, por ejemplo, cuando se<img>
está renderizando un elemento.http://css-tricks.com/snippets/css/css-only-image-preloading/
Técnica # 1
Cargue la imagen en el estado regular del elemento, solo cámbiela con la posición de fondo. Luego, mueva la posición de fondo para mostrarlo al pasar el mouse.
Técnica # 2
Si el elemento en cuestión ya tiene una imagen de fondo aplicada y necesita cambiar esa imagen, lo anterior no funcionará. Por lo general, elegiría un objeto aquí (una imagen de fondo combinada) y simplemente cambiaría la posición del fondo. Pero si eso no es posible, intente esto. Aplique la imagen de fondo a otro elemento de la página que ya esté en uso, pero que no tenga una imagen de fondo.
fuente
prueba con esto:
Con este código, precargas la imagen de fondo y renderizas el formulario cuando está cargado
fuente
Para precargar imágenes de fondo configuradas con CSS, la respuesta más eficiente que se me ocurrió fue una versión modificada de un código que encontré que no funcionaba:
El gran beneficio de esto es que no necesita actualizarlo cuando traiga nuevas imágenes de fondo en el futuro, ¡encontrará las nuevas y las precargará!
fuente
Si está reutilizando estas imágenes bg en cualquier otro lugar de su sitio para entradas de formulario, probablemente desee utilizar un objeto de imagen. De esa manera, puede administrar sus imágenes de forma centralizada (en lugar de tener pic1, pic2, pic3, etc ...).
Los sprites son generalmente más rápidos para el cliente, ya que solo solicitan un archivo (aunque un poco más grande) del servidor en lugar de varios archivos. Consulte el artículo SO para obtener más beneficios:
Sprites de imagen CSS
Por otra parte, esto podría no ser útil en absoluto si solo los está usando para un formulario y realmente solo desea cargarlos si el usuario solicita el formulario de contacto ... sin embargo, podría tener sentido.
http://www.alistapart.com/articles/sprites
fuente
¿Qué tal cargar esa imagen de fondo en algún lugar oculto? De esa manera, se cargará cuando se abra la página y no tomará ningún tiempo una vez que se cree el formulario usando ajax:
fuente
Puede usar este complemento de jQuery waitForImage o puede poner sus imágenes en un div oculto o (ancho: 0 y alto: 0) y usar el evento onload en las imágenes.
Si solo tiene como 2-3 imágenes, puede vincular eventos y activarlos en una cadena para que después de cada imagen pueda hacer algo de código.
fuente
La única forma es codificar la imagen en Base64 y colocarla dentro del código HTML para que no necesite ponerse en contacto con el servidor para descargar la imagen.
Esto codificará una imagen de la URL para que pueda copiar el código del archivo de imagen e insertarlo en su página así ...
fuente
Cuando no hay forma de modificar el código CSS y precargar imágenes con reglas CSS
:before
o:after
pseudo elementos, se puede usar otro enfoque con código JavaScript que atraviesa las reglas CSS de las hojas de estilo cargadas. Para que funcione, los scripts deben incluirse después de las hojas de estilo en HTML, por ejemplo, antes de cerrar labody
etiqueta o justo después de las hojas de estilo.fuente
Si los elementos de la página y sus imágenes de fondo ya están en el DOM (es decir, no los está creando / cambiando dinámicamente), entonces sus imágenes de fondo ya estarán cargadas. En ese punto, es posible que desee ver los métodos de compresión :)
fuente