2010-11-17 12 views
7

Estoy trabajando en un precargador de imágenes que precargará todas las imágenes en una página. Mi enfoque es el siguiente:jQuery - cómo obtener/leer la propiedad css en: hover pseudo class

onDomReady, bucle a través de $("*") // ir a través de todos los elementos cuando el DOM está listo

  • si $(this).tagName.toLowerCase() == 'img', leer src atributo y precarga de esa imagen
  • más si $(this).css("background-image") != "none", lea la imagen de fondo prop y precargue esa imagen

Mi problema es que este enfoque no retoma la clase: hover, que normalmente es la imagen que necesitaría t o ser precargado de todos modos.

Lo que me gustaría hacer es, mientras reviso todos los elementos, verificar la existencia de la: pseudoclave de desplazamiento, y luego verificar la existencia de la propiedad "background-image" en esa clase.

Realmente me gustaría seguir con este enfoque, ya que a) me permite no tener que especificar explícitamente todas y cada una de las imágenes que deseo precargar, yb) se ocupa de las rutas relativas dentro del CSS, como leer el La propiedad "background-image" me da la ruta relativa a la página.

Por lo tanto, mi pregunta es:

Es posible, usando jQuery, para leer las propiedades CSS en el: hover pseudo clase de un elemento? Si no, ¿alguna sugerencia?

Gracias!

+0

¿Alguna vez pudo determinar la: imagen de fondo desplazándose a través de JS, o acabó teniendo que usar alguna otra solución alternativa? – JGarrido

Respuesta

3

Esto va a ser muy intenso al cargar la página para buscar a través de todas las imágenes DOM/CSS ... probablemente no sea una buena idea en un sitio público. Una buena alternativa es utilizar sprites de imagen (http://www.google.com/images/nav_logo26.png) y colocarlos con CSS

+0

+1 Sprites son una excelente sugerencia para este problema. – lonesomeday

+0

En este caso, no puedo usar sprites, ya que el sitio en el que estoy trabajando es para una cartera de artistas y es muy intensivo en UI sin las imágenes que se muestran. Estoy de acuerdo en que disminuirá el tiempo de carga, pero el cliente insiste en que todas las imágenes se carguen antes de que el usuario pueda interactuar con ella. Gracias por la sugerencia, pero no funcionará en este caso :-( –

0

Parece que los sprites son la solución adecuada para este problema. Pero si no pueden implementarse por algún motivo, lo que desea hacer es acceder a la colección document.styleSheets para buscar reglas con: hover en ellas. This page lo ayudará a comenzar.

+0

Este es el camino que traté de tomar, sin embargo, como soy un nerd, me gustaría construir algo que sea reutilizable en el futuro. El problema al analizar el archivo CSS es que tenemos varios archivos CSS que residen en directorios diferentes por razones que no puedo explicar en 500 caracteres. Por lo tanto, tendría que hacer una lógica de ruta relativa que adormezca la mente para que las rutas sean relativas a la página. Este problema se resolvió usando el enfoque $ (this) .css ("background-image"), ya que esto devolvía la URL de la imagen relativa a la página. Así que gracias, pero mi? Permanece - ¿puedo leer lo siguiente: flotar? –