2010-11-17 14 views
7

Je travaille sur un préchargeur d'image qui va précharger toutes les images sur une page. Mon approche est la suivante:jQuery - comment obtenir/lire la propriété css sur: hover pseudo class

onDomReady, boucle à travers $("*") // passer par tous les éléments lorsque le DOM est prêt

  • si $(this).tagName.toLowerCase() == 'img', lisez attribut src et précharger cette image
  • else if $(this).css("background-image") != "none", lire le prop de l'image d'arrière-plan et précharger cette image

Mon problème est que cette approche ne reprend pas sur la classe: hover, qui est normalement l'image qui aurait besoin de t o être préchargé de toute façon. Ce que je voudrais faire, c'est pouvoir, en parcourant tous les éléments, vérifier l'existence de la pseudo-classe: hover, puis vérifier l'existence de la propriété "background-image" sur cette classe. Je voudrais vraiment m'en tenir à cette approche, car elle a) me permet de ne pas avoir à spécifier explicitement chaque image que je veux précharger, et b) prend soin des chemins relatifs dans le CSS, comme la lecture de la La propriété "background-image" me donne le chemin relatif à la page.

Alors, ma question est la suivante:

Est-il possible, en utilisant jQuery, pour lire les propriétés CSS sur la classe: hover pseudo pour un élément? Je n'ai aucune suggestion?

Merci!

+0

Avez-vous déjà été capable de déterminer l'image de fond: planer via JS, ou avez-vous dû utiliser une autre solution de contournement? – JGarrido

Répondre

3

Cela va être très intensif lors du chargement de la page pour rechercher dans toutes les images DOM/CSS ... ce n'est probablement pas une bonne idée sur un site public. Une bonne alternative est d'utiliser des images-images (http://www.google.com/images/nav_logo26.png) et de les positionner avec CSS

+0

+1 Sprites sont une excellente suggestion pour ce problème. – lonesomeday

+0

Dans ce cas, je ne peux pas utiliser les sprites, car le site sur lequel je travaille est destiné à un portfolio d'artistes et est très sensible à l'interface utilisateur avec les images affichées. Je suis d'accord que cela va ralentir le temps de chargement, mais le client insiste pour que toutes les images soient préchargées avant que l'utilisateur puisse interagir avec lui. Merci pour la suggestion, mais cela ne marchera pas dans ce cas :-( –

0

Il semble que les sprites soient la bonne solution à ce problème. Mais si elles ne peuvent pas être implémentées pour une raison quelconque, ce que vous voulez faire est d'accéder à la collection document.styleSheets pour rechercher des règles avec: hover dedans. This page vous aidera à démarrer.

+0

C'est le chemin que j'ai essayé de prendre, cependant, étant un nerd, je voudrais construire quelque chose qui serait réutilisable à l'avenir. le problème avec l'analyse du fichier CSS est que nous avons plusieurs fichiers CSS résidant dans des répertoires différents pour des raisons que je ne peux pas expliquer en 500 caractères, donc je devrais faire une logique de chemin relatif pour obtenir les chemins par rapport à la page Ce problème a été résolu à l'aide de l'approche $ (this) .css ("background-image"), car cela renvoyait l'URL de l'image par rapport à la page.Merci, mais mes? Restes - puis-je lire les: hover? –