定时功能和用户启动功能之间的冲突

Conflict between timed function and user initiated function

本文关键字:功能 冲突 之间 用户 定时 启动      更新时间:2023-09-26

我一直在摆弄这一点,这是我从头开始写的javascript,除了最近遇到的一个小问题外,它运行得很好。该代码的目的是创建一个相当简单的幻灯片,自动循环播放照片(每5秒)。

当我添加了允许用户通过单击链接选择系列中的照片的功能时,问题就出现了。现在,当用户继续点击照片时,5秒的持续时间急剧减少,我不知道是什么原因造成的

如果有人愿意看一看并提出一些建设性的批评,我已经将重新创建和测试代码所需的所有代码复制到了JSFiddle中。

http://jsfiddle.net/h8Act/1/

每次用户单击这些链接时,他们都会启动另一轮sireTimer(),从而启动另一个setTimeout,因此看起来旋转之间的时间缩短了,而实际上,有多个函数实例启动了旋转功能。

尝试添加一个标志,以避免启动附加的setTimeout s

我不会在单个var中记住超时,而是在数组中

durations = [];
/* ... */
// in sireTimer
    // cancel all timeouts
for (var i=0; i< durations.length; i++) {
   clearTimeout(durations[i])
}
    // clear timeout array
durations = [];
durations.push(setTimeout ...)

更改窗口和选项卡也可能会导致一些超时。所以只需清除所有超时