【发布时间】:2015-06-17 09:48:18
【问题描述】:
在我的 HTML 中有一个可以短按和长按的按钮。如果您很快单击它(就像在每个其他按钮上一样),它会执行给定的回调函数。当您按住按钮时,回调将重复执行,直到检测到 mouseup 或 mouseout 事件。
var onBtnClick = function (evt, callback) {
//only react to left mouse button
if (evt.which == 1) {
//save 'this' context and interval/timeout IDs
var self = this,
interval= null,
timeout = null;
//react to a single click
callback();
//when user leaves the button cancel timeout/interval, lose focus and unbind recently bound listeners
self.on("mouseup mouseout", function () {
window.clearTimeout(timeout);
window.clearInterval(interval);
self.blur();
self.off("mouseup mouseout");
});
//on a long click call the callback function within an interval for faster value changing
timeout = window.setTimeout(function () {
interval = window.setInterval(callback, 50);
}, 300);
}
},
i = 0,
cb = function () {
console.log(i++);
};
$("button").mousedown(function(evt) {
onBtnClick.call($(this), evt, cb);
});
这在桌面环境中运行良好。但是:在移动设备上使用网站时,不会注册长按,因为浏览器检测到右键单击(长按)。
是否可以在移动设备上从桌面重新创建行为?我怎样才能做到这一点?
【问题讨论】:
-
确保回调只触发一次!
-
@LShetty:但我想触发回调,只要用户按住按钮...
标签: javascript android jquery ios mobile