2010-11-17 12 views
7

Sto lavorando su un preloader dell'immagine che precaricherà tutte le immagini su una pagina. Il mio approccio è la seguente:jQuery - come ottenere/leggere proprietà css su: hover pseudo class

onDomReady, scorrere $("*") // passare attraverso tutti gli elementi quando il DOM è pronto

  • se $(this).tagName.toLowerCase() == 'img', leggere attributo src, e precarico quell'immagine
  • altrimenti se $(this).css("background-image") != "none", leggi il puntello background-image e precarica quell'immagine

Il mio problema è che questo approccio non riprende la classe: hover, che normalmente è l'immagine che avrebbe bisogno di t o essere precaricato in ogni caso.

Quello che mi piacerebbe fare è essere in grado, durante il looping di tutti gli elementi, di verificare l'esistenza della pseudo classe: hover e quindi controllare l'esistenza della proprietà "background-image" su quella classe.

Mi piacerebbe molto attenermi a questo approccio, poiché a) mi consente di non specificare esplicitamente ogni immagine che desidero precaricare, e b) si occupa dei percorsi relativi all'interno del CSS, come la lettura del la proprietà "background-image" mi dà il percorso relativo alla pagina.

Quindi, la mia domanda è:

È possibile, utilizzando jQuery, per leggere le proprietà CSS sul: hover classe di pseudo per un elemento? Se no, qualche suggerimento?

Grazie!

+0

Sei mai stato in grado di determinare: hover immagine di sfondo tramite JS, o sei finito di dover utilizzare qualche altra soluzione? – JGarrido

risposta

3

Questo sarà molto intenso quando si carica la pagina per cercare tra tutte le immagini DOM/CSS ... probabilmente non è una buona idea su un sito pubblico. Una buona alternativa è utilizzare gli sprite di immagini (http://www.google.com/images/nav_logo26.png) e posizionarli con CSS

+0

+1 Gli sprite sono un eccellente suggerimento per questo problema. – lonesomeday

+0

In questo caso, non sono in grado di utilizzare gli sprite, poiché il sito su cui sto lavorando è per un portfolio di artisti e ha un'interfaccia utente molto alta w/r/t le immagini visualizzate. Sono d'accordo che rallenterà il tempo di caricamento, ma il cliente insiste sul fatto che tutte le immagini devono essere precaricate prima che l'utente sia in grado di interagire con esso. Grazie per il suggerimento, ma non funzionerà in questo caso :-( –

0

Sembra proprio che gli sprite siano la soluzione giusta a questo problema. Ma se per qualche motivo non possono essere implementati, quello che vuoi fare è accedere alla collezione document.styleSheets per cercare regole con: passa il mouse sopra di loro. This page ti aiuterà a iniziare.

+0

Questo è il percorso che ho tentato di prendere, tuttavia, essendo un nerd, mi piacerebbe costruire qualcosa che sarebbe riutilizzabile in futuro. problema con l'analisi del file CSS è che abbiamo più file CSS che risiedono in diverse directory per ragioni che non riesco a spiegare in 500 caratteri. Pertanto, dovrei fare qualche logica relativa al percorso mentale per rendere i percorsi relativi alla pagina Questo problema è stato risolto utilizzando l'approccio $ (this) .css ("background-image"), in quanto questo restituiva l'URL dell'immagine relativo alla pagina. Quindi grazie, ma i miei? Resti - posso leggere i puntatori hover? –