Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript iOS 6 safari,setInterval不';不要被解雇_Javascript_Ios_Mobile Safari_Setinterval_Dom Events - Fatal编程技术网

Javascript iOS 6 safari,setInterval不';不要被解雇

Javascript iOS 6 safari,setInterval不';不要被解雇,javascript,ios,mobile-safari,setinterval,dom-events,Javascript,Ios,Mobile Safari,Setinterval,Dom Events,如果我滚动窗口,则在滚动发生时或之后,窗口.setInterval不会被附加/触发还有其他人看到过同样的问题吗? 我是说… 这是什么原因造成的 我能做些什么来解决这个问题 iOS几乎停止了所有响应用户触摸的操作,以确保其感觉灵敏。setInterval问题是已知的,似乎没有解决方法 编辑 在“冻结”期间,一旦用户释放屏幕,计时器将无法跟上。错过的事件不会延迟,但会完全丢失(一个错误)。我不完全确定,但您可以使用setTimeout而不是setInterval?无论如何,使用setInterv

如果我滚动
窗口
,则在滚动发生时或之后,
窗口.setInterval
不会被附加/触发还有其他人看到过同样的问题吗?

我是说…

  • 这是什么原因造成的
  • 我能做些什么来解决这个问题

iOS几乎停止了所有响应用户触摸的操作,以确保其感觉灵敏。setInterval问题是已知的,似乎没有解决方法

编辑


在“冻结”期间,一旦用户释放屏幕,计时器将无法跟上。错过的事件不会延迟,但会完全丢失(一个错误)。

我不完全确定,但您可以使用
setTimeout
而不是
setInterval
?无论如何,使用setInterval通常是不好的做法

var delay = 100;
(function callee() {
    setTimeout(callee, delay);
})();
找到了这个(可怕但令人惊奇的)解决方法,它在iOS 6.0中对我有效:


iOS6 Safari存在一个bug,该bug会杀死在页面滚动时创建的计时器

kTmnh通过在滚动结束后重新创建计时器,解决了此问题


也许它会在滚动时停止所有脚本,以节省内存并使动画运行得更快。只是猜测而已。@Derek,不,其他一切似乎都执行得很好,直到setInterval之前的那一行。它不仅暂停,甚至在滚动之后也不会触发。暂停问题不同,如果在页面滚动之前附加了setInterval,则会发生暂停问题。在我的例子中,它是在页面滚动期间附加的。右。在“冻结”期间,一旦用户释放屏幕,计时器将无法跟上。但是,如果JS引擎在滚动期间暂停,您的事件如何在滚动期间附加?你确定它不仅仅是在滚动过程中触发并被丢弃吗?我也有同样的问题。如果用户滚动、放开然后再次触摸,我将获得触摸事件。但是我的设置超时被丢弃了。我丑陋的黑客解决方案是在每次滚动事件后进行清理。(超级难看!)这个答案不正确。超时永远不会被触发;它被悄悄地丢弃了。“这是一个可怕的、邪恶的虫子。”格伦梅纳德为什么我的回答不正确?OP询问其行为是否已知(是),是否有解决方案(不是,至少不是来自苹果)。无论是bug还是Apple都不在乎,我不知道为什么它值得投反对票。我不确定我是否同意使用
setInterval
通常是一种不好的做法(但它肯定会被过度使用,尤其是对于更适合requestAnimationFrame的重绘)。但是,可以为
参数设置参数。被调用方
是一种不好的做法(这就是为什么会这样)。setTimeout仍然存在此问题