我需要识别JavaScript小书签中的长按。 所以,我不能使用jQuery,也不能使用onclick()事件和类似的东西。有可能,怎么样?
答案 0 :(得分:7)
onmousedown
,在长时间点击期间致电setTimeout()
。如果允许超时到期,它将调用其函数来执行您希望在长按时执行的任何操作。但是,onmouseup
如果尚未过期,则取消setTimeout()
。
<script type='text/javascript'>
// t will hold the setTimeout id
// Click for 1 second to see the alert.
var t;
</script>
<button onmousedown='t=setTimeout(function(){alert("hi");}, 1000);' onmouseup='clearTimeout(t);'>Clickme</button>
答案 1 :(得分:1)
单击mousedown
和mouseclick
事件相距很远的点击是不是长按一次?为了解决这个问题,您只需衡量从mousedown
事件到点击事件所需的时间,并检查它是否是,例如超过两秒钟(或任何你想要的)。
您可以通过new Date().getTime()
访问自1970年1月1日以来的当前毫秒数。鉴于我会直观地检查这样的“长按”。
$(".selector").mousedown(function() {
$(this).data("timestamp", new Date().getTime());
}).click(function(event) {
var e = $(this);
var start = e.data("timestamp");
e.removeData("timestamp");
if (start && new Date().getTime() - start > YOUR_DESIRED_WAIT_TIME_IN_MILLISECONDS) {
// Trigger whatever you want to trigger
} else {
event.preventDefault();
event.stopPropagation();
}
});
答案 2 :(得分:0)
延迟回复,但您可能需要考虑点击/双击,而不是点击/长按以提供两种不同的操作。
首先点击:记录时间,然后计时器在500毫秒内执行action1。
第二次点击:如果自上次点击以来的时间很短,请取消计时器并执行操作2。如果自上次点击以来的时间很长,那么这是第一次点击。
没有什么可以阻止您使用三次点击等。