【发布时间】:2015-11-11 13:55:31
【问题描述】:
在移动设备(Android 和 iOS、手机和平板电脑)上清除标准 JavaScript 计时器时遇到问题。
我的页面包含 2 个按钮,一个播放/暂停切换和一个停止按钮(都是 FontAwesome 图标),其简单的 HTML 是:
<span class="fa fa-pause control-button" id="pause-button"></span>
<span class="fa fa-stop control-button" id="stop-button"></span>
间隔由以下函数启动:
var interval = function() {
$('.control-button').fadeIn(300);
//initiate the interval
infiniteInterval = window.setInterval(Tiles.infiniteTick, speed);
};
速度在较早的函数中定义(默认为 300)。 infiniteTick 是一个非常简单的函数,运行良好。我没有在这里解释它,因为它需要对整个程序的解释,但如果需要我可以提供代码。
播放和暂停切换如下:
$('body').on('click touchstart', '#pause-button', function() {
if ($(this).hasClass('fa-pause')) {
window.clearInterval(infiniteInterval);
$(this).removeClass('fa-pause');
$(this).addClass('fa-play');
} else {
infiniteInterval = window.setInterval(Tiles.infiniteTick, speed);
$(this).removeClass('fa-play');
$(this).addClass('fa-pause');
}
});
最后,间隔以此结束(为简单起见,删除了一些纯粹的美学附加内容)
$('body').on('click touchstart', '#stop-button', function() {
window.clearInterval(infiniteInterval);
$('.control-button').fadeOut(300);
});
我最初通过研究认为这是由于点击事件未正确注册,但如您所见,我已将 touchstart 添加到所有点击事件中,这没有任何区别。它在所有桌面浏览器上都运行良好。
非常感谢任何帮助,我很乐意回答任何其他问题。
谢谢,
本
【问题讨论】:
-
我相信同一个按钮有 2 个处理程序。我不确定它是否会起作用,但如果一个类是你想要决定的唯一方法,试试`$(element).hasClass()`。
-
值得一提的是,在所有设备上,函数中的其他代码都可以正常执行。
-
如果你可以使用 Mac,你可以尝试安装苹果的开发者工具,从那里你可以使用 iPhone/iPad 模拟器和 safari 来调试移动设备上的 javascript 问题。试试这个:webdesign.tutsplus.com/articles/…
-
您在代码中的哪个位置声明
infiniteInterval? -
在包含这些函数的模块的开头,
var infiniteInterval = null;
标签: javascript jquery mobile