0

我有两个按钮播放和停止。当我单击播放时,我希望图像像幻灯片一样运行。我正在使用setTimeout()并让它在运行前等待 5 秒钟。

单击播放时,代码运行良好,等待 5 秒,然后显示下一张图像,但是当我单击停止,然后再次单击播放时,它停止等待正确的间隔。而不是等待 5 秒再运行,它等待前两个图像一秒钟,然后等待下一个图像 5 秒,再等待下两个图像一秒钟,依此类推..

为什么它第一次运行正确,然后重试时中断?

代码:

var stop = false;
playClickfunction() {
    showImages();
}
showImages() {
    //code to display image for all no of images
    //and user can stop on any no of image..
    if(!stop)
       setTimeout(showImages, 5000);
}

stopClickfunction() {
   stop = true;
}
4

4 回答 4

1

您需要清除停止时的超时。

也许尝试这样的事情:

var timer = false;

playClickfunction()
{
    showImages();
}

showImages()
{

    //code to display image for all no of images
    //and user can stop on any no of image..
    if(!stop)
       timer = setTimeout(showImages, 5000);
}

stopClickfunction()
{

   clearTimeout( timer )
}
于 2012-07-30T06:48:27.973 回答
1

尝试使用正确的方法而不是使用标志变量

var timer = setTimeout(showImages, 5000);
clearTimeout(timer);
于 2012-07-30T06:49:10.560 回答
0

您应该为此使用方法 clearTimeOut()

于 2012-07-30T06:50:17.430 回答
0

如果您单击停止,然后在 5 秒过去之前再次单击开始,则第一个超时将继续运行。您需要做的是清除超时,不仅仅是停止图像,而是每次单击开始时,例如:

var timeout;

function start() {
    stop();
    showImages();
  }
}

function stop() {

  if (timeout) {
    clearTimeout(timeout);
    timeout = null;
  }
}

function showImages() {
  // do stuff, then
  timeout = setTimeout(showImages, 5000);
}

或者,如果单击开始并设置了超时,则忽略单击,因为计时器已经在运行。在这种情况下,你会这样做:

function start() {
  if (!timeout) {
    showImages();
  }
}
于 2012-07-30T06:55:45.550 回答