Maison > Questions et réponses > le corps du texte
Je ne sais pas pourquoi les n fois n'augmentent pas et comment effacer l'exécution après l'avoir exécutée trois fois.
var firstShow = 1000;
var secondShow = 5000;
var threeShow = 10000;
setTimeout(openMpM, firstShow);
function openMpM() {
$("#swtCenter2").fadeIn(1000);
}
var n = 0;
function closeM(n) {
$("#swtCenter2").fadeOut(1000);
setTimeout(openMpM, 50000);
n = n++;
if (n == 1) {
setTimeout(openMpM, secondShow);
}
if (n == 2) {
setTimeout(openMpM, threeShow);
}
if (n == 3) {
clearTimeout();
}
}
代言2017-06-12 09:34:09
Dans l'événement de liaison, n++ d'abord, puis exécutez closeM(n). Le n=n++ dans closeM(n) doit être supprimé.
$("#swtCenter2").on('click',function(){
n=n+1
closeM(n)
});
Pour la troisième fois, juste si (n==3) {$("#swtCenter2").fadeOut(1000);} fera l'affaire
ou ceci
var n=0;
function closeM() {
$("#swtCenter2").fadeOut(1000);
n=n+1;
return function (n){
console.log(n)
if(n==1){setTimeout(openMpM,secondShow);
}
if(n==2){setTimeout(openMpM,threeShow);
}
if(n==3){$("#swtCenter2").fadeOut(1000);}}
}
$("#swtCenter2").on('click',function(){
closeM()(n);
});
高洛峰2017-06-12 09:34:09
En fait, votre idée est fondamentalement très claire, mais les détails sont encore un peu flous. Par exemple, la valeur de setTimeout(openMpM, 50000);
这句话会在每次 closeM()
的时候执行,与 n
n’a pas d’importance.
En plus de la valeur n = n++
不会改变 n
, cela équivaut à
var t = n;
n++;
n = t;
Ce qui suit est mon code modifié. Cette question est la même que celle que vous avez posée, je n'y répondrai donc pas ici.
var firstShow = 1000;
var secondShow = 5000;
var threeShow = 10000;
// 定义成数组,便于按序号取用
var showTimes = [firstShow, secondShow, threeShow];
setTimeout(openMpM, firstShow);
function openMpM() {
$("#swtCenter2").fadeIn(1000);
}
var n = 0;
function closeM(n) {
$("#swtCenter2").fadeOut(1000);
// 取出需要等待的时间,并 n + 1
// 你用的 n = n++ 实际并不会改变 n 值
var time = showTimes[n++];
if (!time) {
// 未取到 time 值,说明 3 个时间已用完
// 重置 n 并且不再延时打开
n = 0;
} else {
setTimeout(openMpM, time);
}
}
大家讲道理2017-06-12 09:34:09
n = n++;
En raison de la priorité de l'opérateur n, n n'a pas changé
il devrait donc être directement ++n;