J'ai mis au point ma propre méthode de base qui semble fonctionner correctement (jusqu'à présent). Il y a probablement une douzaine de choses que certains des scripts populaires abordent et auxquelles je n'ai pas pensé.
Note - Cette solution est rapide et facile à mettre en œuvre mais, bien sûr, elle n'est pas très performante. Il faut absolument se pencher sur la nouvelle Observateur d'intersections comme indiqué par Apoorv et expliqué par développeurs.google si la performance est un problème.
L'application JQuery
$(window).scroll(function() {
$.each($('img'), function() {
if ( $(this).attr('data-src') && $(this).offset().top < ($(window).scrollTop() + $(window).height() + 100) ) {
var source = $(this).data('src');
$(this).attr('src', source);
$(this).removeAttr('data-src');
}
})
})
Exemple de code html
<div>
<img src="" data-src="pathtoyour/image1.jpg">
<img src="" data-src="pathtoyour/image2.jpg">
<img src="" data-src="pathtoyour/image3.jpg">
</div>
Expliqué
Lorsque la page est déroulée, chaque image de la page est vérifiée
$(this).attr('data-src')
- si l'image a l'attribut data-src
et à quelle distance ces images sont du bas de la fenêtre
$(this).offset().top < ($(window).scrollTop() + $(window).height() + 100)
Ajustez le + 100 à ce que vous voulez (- 100 par exemple).
var source = $(this).data('src');
- obtient la valeur de data-src=
alias l'url de l'image
$(this).attr('src', source);
- met cette valeur dans le src=
$(this).removeAttr('data-src');
- supprime l'attribut data-src (pour que votre navigateur ne gaspille pas de ressources à s'occuper des images déjà chargées).
Ajout au code existant
Pour convertir votre html, dans un éditeur il suffit de chercher et remplacer src="
avec src="" data-src="
0 votes
Avez-vous besoin d'un chargement paresseux des images uniquement ? Si vous avez besoin d'un chargement paresseux du contenu, le plugin infinite scroll est la bonne réponse.
0 votes
@rsp @jwegner @Nicholas Je suis désolé, mais ce n'est pas ce que Salman demande.
0 votes
@soju : Je ne suis intéressé que par le chargement paresseux des images ; mais je pourrais envisager d'autres possibilités dans un avenir (assez lointain).
21 votes
On se demande pourquoi le comportement par défaut d'un navigateur ne consiste pas à ne charger que les images visibles. Imaginez la quantité de bande passante qui aurait pu être économisée au cours des 18 dernières années si cela avait été le cas !
0 votes
Question similaire : stackoverflow.com/questions/1736215/
2 votes
Bien que je comprenne la raison derrière le chargement paresseux... je ne peux honnêtement pas supporter de visiter un site qui utilise cette méthode. Le clignotement des images me rend dingue :)
0 votes
@MatthewLock Parce que cela obligerait tous les développeurs web à coder leur site avec cette idée en tête - s'ils ne le faisaient pas, la mise en page sauterait et changerait au fur et à mesure que l'utilisateur ferait défiler la page. Ce serait génial si c'était le cas, mais je ne vois pas comment cela pourrait devenir la norme de sitôt.