javascript:长按一下书签

时间:2011-08-23 15:33:55

标签: javascript click bookmarklet

我需要识别JavaScript小书签中的长按。 所以,我不能使用jQuery,也不能使用onclick()事件和类似的东西。有可能,怎么样?

3 个答案:

答案 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>

Here it is in action in jsfiddle

答案 1 :(得分:1)

单击mousedownmouseclick事件相距很远的点击是不是长按一次?为了解决这个问题,您只需衡量从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。如果自上次点击以来的时间很长,那么这是第一次点击。

没有什么可以阻止您使用三次点击等。