【发布时间】:2012-02-13 00:30:19
【问题描述】:
我需要识别 JavaScript 小书签中的长按。 所以,我不能使用 jQuery,也不能使用 onclick() 事件和类似事件。有可能吗,怎么做?
【问题讨论】:
标签: javascript click bookmarklet
我需要识别 JavaScript 小书签中的长按。 所以,我不能使用 jQuery,也不能使用 onclick() 事件和类似事件。有可能吗,怎么做?
【问题讨论】:
标签: javascript click bookmarklet
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>
【讨论】:
<div>,<span>,随便你
长点击不就是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();
}
});
【讨论】:
延迟回复,但不是单击/长按来提供两种不同的操作,您可能需要考虑单击/双击。
第一次点击:记录时间,然后定时器在 500 毫秒内执行 action1。
第二次点击:如果距离最后一次点击的时间很短,取消计时器并执行action2。如果距离上次点击的时间很长,那么这是第一次点击。
没有什么能阻止您使用三次点击等。
【讨论】: