loader pour image...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : loader pour image...

par nicolasb » 16 oct. 2008, 23:14

Voila comment le script fonctionne :
Les images sont chargées dans un div via ajax, dans ce mê^me div, j'appel ma fonction avec la valeur 'hide', ce qui à pour effet de masquer les photos, et d'afficher l'image d'attente (ça sa fonctionne partout).
Dans ce premier passage, le img.onload doit (théoriquement) dire d'appeler la fonction pour vérifier si les photos sont chargées img.complete, si après la boucle, toutes les photos sont chargés, on appel la fonction une dernière fois pour passer les photos en visible et cacher l'image d'attente. La séquence tourne comme une horloge sous FF, y'a-t'il éventuellement un problème de délai avec IE ?

par AB » 16 oct. 2008, 22:20

J'sais pas, je vois pas comment ton code fonctionne :-k
Disons que je m'y serait pris autrement. Un topic qui devrait peut-être t'aider
http://www.phpfrance.com/forums/voir_re ... php#249573
On vérifie le chargement des images avant de déclencher un évènement...

par nicolasb » 16 oct. 2008, 21:40

hum, en effet selon SelfHTML, c'est pas bon...
Quelle alternative alors ?

par AB » 16 oct. 2008, 21:23

Ton petit doigt n'a pas tort : l'évènement onload est réservé à l'élément body et quelques autres mais pas sur l'élément img.

Voir ceci
Oui j'aurais eu la même réflexion surtout que je n'utilise pas la même source de référence
http://fr.selfhtml.org/javascript/langa ... htm#onload

par Cyrano » 16 oct. 2008, 19:36

Es-tu bien certain d'avoir activé l'affichage des erreurs de scripts dans IE ???

par nicolasb » 16 oct. 2008, 19:32

merci beaucoup pour tes efforts. Alors non, même sous IE, cette partie est bien exécutée et et les images trouvées. ça ne vient donc pas de là.
C'est désespérant !

par Cyrano » 16 oct. 2008, 18:32

En général si une erreur est rencontrée, le reste du script n'est pas exécuté du tout. Ça peut te servir comme élément de référence pour isoler le point qui bloque.

[Edit] J'ai peut-être trouvé un truc : match() attend en paramètre une expression régulière. Or ton code y affecte une chaine brute.

À tester :

Code : Tout sélectionner

listImg = function(action) { var imgs = document.getElementsByTagName('img'); var loaded = true; if (!action) { action = 'appear'; } var il = imgs.length; for (var i = 0; i < il; i++) { var img = imgs[i]; var relAttribute = String(img.getAttribute('rel')); var reg1 = new RegExp("(slide_img)","gi"); if (relAttribute.match(reg1)) { if (action == 'hide') { if (!img.complete) { img.style.visibility = 'hidden'; $('loader').style.display = 'block'; } img.onload = function() { listImg('test'); }; } else { if (action == 'test') { if (!img.complete) { loaded = false; } } else { img.style.visibility = 'visible'; $('loader').style.display = 'none'; } } } } if (loaded && action == 'test') { listImg('appear'); } };

par nicolasb » 16 oct. 2008, 18:27

Non, aucune erreur apparente, en mettant de alert un peu de partout, IE ne traite pas les éléments dans le même ordre que FF, est-ce que IE n'arreterait pas la fonction en cours dés qu'une image est chargée...
je dis ça au pif, je réfléchi tout haut...

Je met le lien vers la galerie : http://portfolio.nicolasb.net

par Cyrano » 16 oct. 2008, 17:00

Ha effectivement, je l'avais lu en diagonale... ben là, je n,ai aps l'explication.

Est-ce que IE t'indique une erreur JavaScript quelque part ? (Pour autant que tu aies activé cette option dans IE bien sur)

par nicolasb » 16 oct. 2008, 16:56

La balise <img> est pourtant bien dans la liste !

par Cyrano » 16 oct. 2008, 16:29

Ton petit doigt n'a pas tort : l'évènement onload est réservé à l'élément body et quelques autres mais pas sur l'élément img.

Voir ceci

loader pour image...

par nicolasb » 16 oct. 2008, 16:16

Bonjour à tous !

je viens chercher un peu d'aide ou d'explications sur un système que je veut mettre en place pour une galerie photo, le but étant d'afficher une image d'attente tant que toutes les photos ne sont pas chargées.
J'arrive tout à fait à faire ce que je veut sous Firefox, mais sous IE par exemple, ou encore Safari, les photos ne s'affichent jamais...

Code : Tout sélectionner

listImg = function(action){ var imgs = document.getElementsByTagName('img'); var loaded = true; if(!action) action = 'appear'; for (var i = 0; i < imgs.length; i++) { var img = imgs[i]; var relAttribute = String(img.getAttribute('rel')); if (relAttribute.toLowerCase().match('slide_img')) { if (action == 'hide') { if (!img.complete) { img.style.visibility = 'hidden'; $('loader').style.display = 'block'; } img.onload = function() { listImg('test') }; } else if(action == 'test') { if (!img.complete) { loaded = false; } } else { img.style.visibility = 'visible'; $('loader').style.display = 'none'; } } } if(loaded && action == 'test') { listImg('appear'); } }
Mon code n'est surement pas une référence, j'ai écris ça à l'instinct, mais il n'y a que FF qui l'aime...
Mon petit doigt me dit que le pb pourrais venir du img.onload, qui serait traité différent au niveau délai par IE (ou FF)...

Je précise que cette fonction est appelée à la suite des photos, en fin de page...

A votre avis ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]