如何在维持点击n秒后触发事件? - jQuery / Javascript

时间:2012-02-21 02:22:44

标签: javascript jquery

我确信我不是第一个找这个,但我找不到解决问题的方法..

我正在寻找一种方法,只有在经过3秒的维持点击后才能发起事件。 我尝试使用带有mouseup / mousedown Jquery事件的javascript setInterval()函数,但它没有用。

有人有想法吗?

我有一个div,我按住鼠标按钮3秒钟,然后会触发一些东西。 每次必须重新初始化3秒计时器。

5 个答案:

答案 0 :(得分:11)

调用setTimeout()在3000毫秒后执行操作,将setTimeout()中的标识符存储到作用于函数上方的变量中。在元素的mouseup()上,如果存在超时clearTimeout(),则清除超时。

var divMouseDown;
$('#div-id').mousedown(function() {
  divMouseDown = setTimeout(function() {
     // Do timeout action...
  }, 3000);
});
$('#div-id').mouseup(function() {
  if (divMouseDown) {
    clearTimeout(divMouseDown);
  }
});

答案 1 :(得分:1)

在鼠标按下时,将来设置超时3秒。

在鼠标向上时,清除超时。

答案 2 :(得分:1)

似乎mouseup / mousedown个事件和setTimeout / clearTimeout 的方式:

var timer = null;

$(selector).on('mousedown', function(ev) {
    timer = setTimeout(function() {
        timer = null;

        /* Do something */
    }, 3000);
}.on('mouseup', function(ev) {
    if (timer) {
        clearTimeout(timer);
        timer = null;
    }
});

答案 3 :(得分:1)

$('#div').on('mousedown', function(){
    mousetimer.down();
}).on('mouseup', function(){
    mousetimer.cancel();
});

var mousetimer = {
    timer: null,
    timing: false,
    down: function(){
        if(!timing)
        {
            mousetimer.timing = true;
            mousetimer.timer = setTimeout(function(){
                mousetimer.trigger();
            }, 3000);
        }
    },
    trigger: function(){
        alert('do something');
        mousetimer.cancel();
    },
    cancel: function(){
        mousetimer.timing = false;
        clearTimeout(mousetimer.timer);
    }
};

答案 4 :(得分:0)

使用超时3000毫秒。

设置鼠标按下事件的超时,在鼠标按下事件中将其清除。

http://jsfiddle.net/kHMWX/