在我的HTML中,有一個按鈕可以短按和長按。如果你很快點擊它(就像在其他每個按鈕上一樣),它會執行給定的回調函數。當您持續按下該按鈕時,將會重複執行回調,直到檢測到鼠標移動或鼠標懸停事件。在按下按鈕時避免在移動設備上進行長時間打擊行爲
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);
});
這適用於桌面環境。但是:當在移動設備上使用網站時,由於瀏覽器檢測到右擊(長按),長按不會被註冊。
是否有可能在移動設備上重新創建臺式機的行爲?我怎麼能做到這一點?
確保回調只觸發一次! – lshettyl
@LShetty:但只要用戶保持按下按鈕,我就想觸發回調...... – Fidel90