gpt4 book ai didi

javascript - jQuery + setTimeout() + clearTimeout() 在 IE7 和 8 中不起作用

转载 作者:行者123 更新时间:2023-11-30 13:36:32 25 4
gpt4 key购买 nike

这适用于 Firefox 和 Chrome,但不适用于 IE。

在 Internet Explorer 中,计时器不会被清除,每次调用 update_slideshow() 时都会创建一个新计时器。

// slideshow params 
var currentSlide = 1;
var numSlides = 4;
var pause = false;

function pause_show(bool){
pause = bool;
}

// transitions the slides
function update_slideshow(slide){
if(slide > numSlides) slide = 1;

//is user tyring to pause/play this slide
if(currentSlide == slide){
switch(pause){
case false:
$("#ssbut" + slide.toString()).removeClass('pause').addClass('play');
pause = true;
break;

case true:
$("#ssbut" + slide.toString()).removeClass('play').addClass('pause');
pause = false;
break;
}
}else{ //user clicked on a button other than the current slide's
clearTimeout(slideTimer);
function complete() {
$("#slide" + slide.toString()).fadeIn(500, "linear");
if(!pause)
$("#ssbut" + slide.toString()).removeClass('inactive').addClass('pause');
else
$("#ssbut" + slide.toString()).removeClass('inactive').addClass('play');
}
$("#ssbut" + currentSlide.toString()).removeClass('play').addClass('inactive');
$("#slide" + currentSlide.toString()).fadeOut(300, "linear", complete);

currentSlide = slide;
if (typeof(slideTimer) != 'undefined') clearTimeout(slideTimer);
slideTimer = setTimeout("slideshow()",4000);
}
}

function slideshow(){
if (typeof(slideTimer) != 'undefined') clearTimeout(slideTimer);
if(!pause){
update_slideshow(currentSlide + 1);
}
slideTimer = setTimeout("slideshow()",4000);
}
var slideTimer = setTimeout("slideshow()",4000);

最佳答案

您可以尝试将 setTimeout 与函数引用而不是字符串一起使用。改变这个:

setTimeout("slideshow()",4000);

对此:

setTimeout( slideshow, 4000 );

作为旁注,您可以考虑简化一些代码。 pause 只有两种状态,因此:

switch(pause){
case false:
$("#ssbut" + slide.toString()).removeClass('pause').addClass('play');
pause = true;
break;
case true:
$("#ssbut" + slide.toString()).removeClass('play').addClass('pause');
pause = false;
break;
}

...可以这样重写:

$('#ssbut' + slide.toString()).toggleClass('pause play', pause);
pause = !pause;


更新:注意到 OP 无意中在 slideShow 函数中递归:

function slideshow(){
// stuff
slideTimer = setTimeout("slideshow()",4000); // -> now there's your problem
}

删除该行即可解决问题。

关于javascript - jQuery + setTimeout() + clearTimeout() 在 IE7 和 8 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com