更改方向时无法清除间隔或超时

时间:2014-01-27 17:56:51

标签: javascript jquery jquery-mobile settimeout setinterval

我有一个用SwipeJS构建的图像轮播,当我从肖像改变方向时,我会销毁然后重建 - >风景或风景 - >的画像。

我有一个问题,我似乎无法使用下面的代码清除间隔/超时。正如我所看到的那样console.log(now)开始于每隔5秒被调用一次(如预期的那样)每2.5秒被调用一次。大概这是因为初始setInterval功能仍然有效。

如何清除/杀死它,以便一次只能有一个间隔工作?

我正在使用jQuery Mobile 1.3.1。

if ($.event.special.orientationchange.orientation() === 'portrait') {
    // Portrait mode

    clearTimeout(slideshowHandle);

    // ...trash the old slider, then build a new one...
} else {
    // Landscape mode

    clearTimeout(slideshowHandle);

    // ...trash the old slider, then build a new one...
}

// call the SwipeJS next method every 5 seconds to move to the next slide in the carousel
var slideshowHandle = setInterval(function() {

  // just some code for debugging purposes
  var now = new Date(),
  now = now.getHours()+':'+now.getMinutes()+':'+now.getSeconds();
  console.log(now);

  // trigger a swipe 'next'
  container.Swipe('next');

}, 5000);

2 个答案:

答案 0 :(得分:2)

您应该使用clearInterval(slideshowHandle)代替clearTimout

选中此项以获取参考https://developer.mozilla.org/en-US/docs/Web/API/Window.clearInterval

答案 1 :(得分:1)

我必须遇到一个范围问题,因为将其附加到window完成了诀窍(并且还要更改回clearInterval):

// clear the interval on the slideshow 'next' (if we have it) when changing orientation
if (window.slideshowHandle) {
   window.clearInterval(window.slideshowHandle);
}

// call the SwipeJS next method every 5 seconds to move to the next slide in the carousel
window.slideshowHandle = window.setInterval(function() {
   swipeContainer.Swipe('next');
}, 5000);