J'essaye d'installer une fonction dans JavaScript pour fondre ou fondu dehors quelques éléments sur ma page. Le fondu fonctionne bien, mais mon problème se produit quand l'un d'eux essaie d'annuler les actions de l'autre.Annuler une boucle temporisée en JavaScript?
//I know this is ugly, I'm just learning JavaScript again and plan to recode it after I learn some more...
var fadeOut = false
//set out to true to fade out, false to fade in
function fade(out) {
var steps = 1
var outSpeed = 100
var inSpeed = 10
var timer = 0
if (out) {
//fade out
fadeOut = true
for (var i=100; i>=0; i-=steps) {
if (fadeOut) {
setTimeout("set_el_opacity(" + (i/100) + ")",
timer+=steps
} else {
break;
}
}
} else {
//fade in
fadeOut = false
for (var i=0; i<=100; i+=steps) {
if(!fadeOut) {
setTimeout("set_el_opacity(" + (i/100) + ")",
timer+=steps
} else {
break;
}
}
}
}
Maintenant, le fondu est configuré pour fonctionner plus lentement que le fondu. Je veux que l'utilisateur de voir se faner lentement afin qu'ils sachent qu'il est sur le but, puis disparaître de nouveau dans rapidement si les éléments sont nécessaires (enlever un peu d'encombrement de l'écran quand ce n'est pas nécessaire).
fondu (vrai) fonctionne bien, fondu (faux) fonctionne bien et est plus rapide. Mon problème se produit lorsque j'appelle fade (true) suivi par fade (false). Les fondus se battent entre eux puis, puisque l'appel de fondu (vrai) s'exécute plus vite, il finit en premier et l'appel de fondu (faux) continue à disparaître complètement.
Ma question est: que puis-je faire pour que l'appel fade (false) annule la boucle de l'appel fade (true)?
** Astuce **: Ne jamais passer une chaîne comme argument à 'setTimeout' /' setInterval'. Si vous l'utilisez en production, votre site peut être vulnérable à [XSS] (http://en.wikipedia.org/wiki/Cross-site_scripting "Cross-site scripting"). Utilisez une * fonction anonyme * à la place: 'setTimeout (fonction() {set_el_opacity (i/100);}, 1000);' – nyuszika7h