Salut!
Voici ce que je développe:
J'ai une page php qui fait un listing des images se trouvant dans un dossier, génère les miniatures et les affichent dans un tpl (smarty) avec une propriété CSS opacity à 50% on va dire, donc chaque miniature est opaque. (IE comme FF)
Comme j'affiche les miniatures avec une boucle, chaque "<img src=...>" dispose de son propre id (que j'incrémente pour qu'ils soient différents biensur) et de ses fonctions dont ces deux-là:
onMouseOver="javascript:visible(this.id)"; onMouseOver="javascript:invisible(this.id")";
Donc le but étant qu'à chaque passage de souris sur une miniature, celle-ci passe "en claire" progressivement suivant une vitesse spécifiée dans les deux fonctions. Pour que la miniature s'affiche progressivement j'utilise un setTimeOut dans visible() qui pointe vers visible() elle même en lui passant l'id de l'image en cours.
De même qu'à chaque sortie de souris, l'image revient à son état initial, opaque par un setTimeOut() dans invisible().
Ce qui marche: affichage progressif des images sur onMouseOver. Effet design huhu!
Ce qui ne marche pas:
retour à la normale sur onMouseOut pendant l'execution (encore en cours) du timer de visible().
Pourquoi :
Un timer est lancé sur le onMouseOver pour faire apparaitre l'image progressivement, mais si j'exécute le onMouseOut avant que ce timer ne soit terminé, l'image se met à clignoter, elle se bloque quoi. Par contre si j'attends que l'image soit complètement claire (donc que le timer soit terminé) et que j'exécute le onMouseOut, cela marche parfaitement, l'image revient bien a la normale sans erreur.
Question : Comment tuer le timer appartenant à une fonction appelée par un événement (onMouseOver ici) depuis un autre événement (onMouseOut)? En principe les variables locales ne sont pas accessibles depuis une autre fonction? Vous avez une solution?
Merci
L'id
Partager