【发布时间】:2017-01-04 15:09:48
【问题描述】:
我正在尝试编写一个 JavaScript 网络应用程序,其中对 mouseup 执行操作,并在用户按住按钮足够长的时间后执行另一个操作。我的代码适用于我在 Windows 和 Linux 上尝试过的所有浏览器,但在我尝试过的所有三种 Android 浏览器(Chrome、Firefox 和本机)上,如果计时器触发,我似乎会丢失 mouseup 事件。
我的代码的核心看起来很简单:
btn.addEventListener("mousedown", function(){
myTimer = setTimeout(function(){
btn.textContent += "t";
outVal = "b";
}, 500);
});
btn.addEventListener("mouseup", function(){
clearTimeout(myTimer);
btn.textContent += outVal;
outVal = "a"
});
Jsfiddle 在这里:https://jsfiddle.net/wanderinglogic/sycL0e53/
在非Android浏览器上,如果用户在短时间内释放按钮,则输出a,如果用户按住按钮(500ms后)输出t,然后当用户释放按钮时输出@ 987654327@.
但是在Android浏览器上,如果用户在短时间内释放按钮,它仍然会输出a,如果用户按住按钮(500ms后)仍然输出t,但最后的按钮释放不会'不输出b。
Android 上是否有一些我不知道的额外事件干扰了我的mouseup?
【问题讨论】:
-
你当然在比这两个事件处理函数更高的范围内声明了
myTimer,对吧? -
可能是因为他们使用的是触摸事件而不是鼠标事件。
-
@ScottMarcus 是的,我试图将代码的核心放在帖子中。完整代码在 jsfiddle 中。
标签: javascript android web-applications event-handling cross-browser