我想在用戶點擊一個按鈕時觸發一個事件,然後保持點擊1000到1500毫秒。如何在jQuery中監聽點擊並按住?
是否有jQuery的核心功能或插件,已經啓用了這個?
我應該推出自己的?我應該從哪裏開始?
我想在用戶點擊一個按鈕時觸發一個事件,然後保持點擊1000到1500毫秒。如何在jQuery中監聽點擊並按住?
是否有jQuery的核心功能或插件,已經啓用了這個?
我應該推出自己的?我應該從哪裏開始?
var timeoutId = 0;
$('#myElement').on('mousedown', function() {
timeoutId = setTimeout(myFunction, 1000);
}).on('mouseup mouseleave', function() {
clearTimeout(timeoutId);
});
編輯:每個AndyE的更正...謝謝!
編輯2:使用綁定現在用相同的處理每gnarf兩個事件
想必你可以在mousedown
揭開序幕setTimeout
呼叫,然後(您超時完成之前,如果mouseup
情況),在mouseup
取消。
但是,貌似有一個插件:longclick。
鏈接已死亡 – 2015-05-16 01:31:14
這裏是我當前的實現:
$.liveClickHold = function(selector, fn) {
$(selector).live("mousedown", function(evt) {
var $this = $(this).data("mousedown", true);
setTimeout(function() {
if ($this.data("mousedown") === true) {
fn(evt);
}
}, 500);
});
$(selector).live("mouseup", function(evt) {
$(this).data("mousedown", false);
});
}
Aircoded(但this fiddle測試)
(function($) {
function startTrigger(e) {
var $elem = $(this);
$elem.data('mouseheld_timeout', setTimeout(function() {
$elem.trigger('mouseheld');
}, e.data));
}
function stopTrigger() {
var $elem = $(this);
clearTimeout($elem.data('mouseheld_timeout'));
}
var mouseheld = $.event.special.mouseheld = {
setup: function(data) {
// the first binding of a mouseheld event on an element will trigger this
// lets bind our event handlers
var $this = $(this);
$this.bind('mousedown', +data || mouseheld.time, startTrigger);
$this.bind('mouseleave mouseup', stopTrigger);
},
teardown: function() {
var $this = $(this);
$this.unbind('mousedown', startTrigger);
$this.unbind('mouseleave mouseup', stopTrigger);
},
time: 750 // default to 750ms
};
})(jQuery);
// usage
$("div").bind('mouseheld', function(e) {
console.log('Held', e);
})
如何選擇不同顏色的文本,當我們點擊並按住設備 – Lucky 2013-10-22 06:16:43
var _timeoutId = 0;
var _startHoldEvent = function(e) {
_timeoutId = setInterval(function() {
myFunction.call(e.target);
}, 1000);
};
var _stopHoldEvent = function() {
clearInterval(_timeoutId);
};
$('#myElement').on('mousedown', _startHoldEvent).on('mouseup mouseleave', _stopHoldEvent);
我寫了一些代碼,以方便
//Add custom event listener
$(':root').on('mousedown', '*', function() {
var el = $(this),
events = $._data(this, 'events');
if (events && events.clickHold) {
el.data(
'clickHoldTimer',
setTimeout(
function() {
el.trigger('clickHold')
},
el.data('clickHoldTimeout')
)
);
}
}).on('mouseup mouseleave mousemove', '*', function() {
clearTimeout($(this).data('clickHoldTimer'));
});
//Attach it to the element
$('#HoldListener').data('clickHoldTimeout', 2000); //Time to hold
$('#HoldListener').on('clickHold', function() {
console.log('Worked!');
});
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<img src="http://lorempixel.com/400/200/" id="HoldListener">
現在,你只需要設置的舉行時間,並添加clickHold
事件上你的元素
可能重複[Long in JavaScript?](http://stackoverflow.com/questions/2625210/long-press-in-javascript) – 2014-06-11 20:11:33
'taphold'怎麼樣? – Roshdy 2015-05-03 18:08:48