使用setInterval,变量不适用于iOS

时间:2014-08-15 08:42:08

标签: javascript jquery ios7

我使用setIntervalmousedown事件来连续动画像滑块一样的div。

我还将变量设置为setInterval,以便我可以停止mouseup上的动画。

除了在iOS上,如果我在setInterval函数中移除mousedown前面的变量(int00)和运算符,它只会为div设置动画,这样可以正常工作:

var int00;

$('#scroll_diseases_left').mousedown(function(){
    int00 = setInterval(function() { scroll_diseases_left(); }, 250);
});

$('#scroll_diseases_left').mouseup(function(){
    clearInterval(int00);
});

function scroll_diseases_left() {
    $('#scroll_diseases_right').fadeIn();
    $('#disease_wrapper').animate({marginLeft: '-=50px'}, {duration: 500, queue: false, easing: 'linear'});
    $('#arthritis_content').animate({marginLeft: '-=50px'}, {duration: 500, queue: false, easing: 'linear'});
    $('#bleeding_content').animate({marginLeft: '-=50px'}, {duration: 500, queue: false, easing: 'linear'});
    $('#blood_vessel_content').animate({marginLeft: '-=50px'}, {duration: 500, queue: false, easing: 'linear'});
    $('#brain_content').animate({marginLeft: '-=50px'}, {duration: 500, queue: false, easing: 'linear'});
    $('#cancer_content').animate({marginLeft: '-=50px'}, {duration: 500, queue: false, easing: 'linear'});
}

有什么想法吗?

更新

在mousedown函数中将int00声明为局部变量可以在iOS上运行,但是我无法停止动画...

$('#scroll_diseases_left').mousedown(function(){
    var int00 = setInterval(function() { scroll_diseases_left(); }, 250);
});

$('#scroll_diseases_left').mouseup(function(){
    clearInterval(int00);
});

3 个答案:

答案 0 :(得分:3)

问题是iOS上的触摸事件没有被提取。这有效:

  $('#scroll_diseases_left').bind('touchstart mousedown', function(){
   int00 = int00 || setInterval(function() { scroll_diseases_left(); }, 250);
  });

  $('#scroll_diseases_left').bind('touchend mouseup', function(){
      clearInterval(int00);
      int00 = undefined;
  });

答案 1 :(得分:1)

问题是你需要一些逻辑来测试在重置之前是否设置了int00。

  var int00;

  $('#scroll_diseases_left').mousedown(function(){

   // if int00 is set, keep it, if it is not start a new interval.

   int00 = int00 || setInterval(function() { scroll_diseases_left(); }, 250);
  });

  $('#scroll_diseases_left').mouseup(function(){
      clearInterval(int00);
      int00 = undefined;
  });

答案 2 :(得分:0)

这里只是一个猜测,但也许iOS不喜欢自动全局。

尝试在其他代码之前放置var int00;来声明变量。无论如何,这是很好的做法。