想要在mousedown和click事件上执行不同的任务

时间:2016-11-07 11:59:54

标签: javascript jquery

JavaScript mousedown事件后跟mouseupclick。所以在点击事件中,此事件的三个​​执行。但在我的任务中,我想为mousedownclick执行不同的任务。 如果有人按住鼠标一段时间,则会显示一个列表,并且不会执行click事件。 只需单击,即可执行单击任务。 它就像chrome后箭头功能一样。 有人帮忙。提前谢谢。

3 个答案:

答案 0 :(得分:4)

你可以这样做:

var pressTimer, longClick;

function mouseUpCheck() {
  clearTimeout(pressTimer);
  window.removeEventListener('mouseup', mouseUpCheck);   
}

document.querySelector('.link').addEventListener('mousedown', function(){
  window.addEventListener('mouseup', mouseUpCheck);
  pressTimer = window.setTimeout(function() { longClick = true; alert('long click'); },2000);
});

document.querySelector('.link').addEventListener('click', function() {
  if (longClick) {
    event.stopPropagation();
    event.preventDefault();
    longClick = false;
    return;
  }

  alert('click');
});
<a class="link">click me</a>

答案 1 :(得分:3)

Mousedown不会为down生成多个事件,所以我在这里使用了setInterval来检查鼠标是否仍然按下。

刚刚完成了一个快速模式,忘记了如果鼠标移出元素,元素上的鼠标就不会被触发。所以我在这里将事件附加到窗口。

var d = document.querySelector('div');
var dtime;
var i;


d.onmousedown = function () {
  window.addEventListener('mouseup', mouseUpCheck);
  dtime = new Date();
  i = setInterval(function () {
    if (dtime) {
      var t = new Date();
      if (t.getTime() - dtime.getTime() >= 2000) {
        dtime = null; //stop now..
        console.log('2 second mousedown');
      }
    }
  }, 50);
}
function mouseUpCheck() {
  dtime = null;
  window.removeEventListener('mouseup', mouseUpCheck);   
  clearInterval(i);
}
<div>Click Hold for 2 seconds</div>

答案 2 :(得分:1)

对于在同一选择器中工作的两个事件:

var pressTimer, longClick;

function mouseUpCheck() {
  clearTimeout(pressTimer);
  window.removeEventListener('mouseup', mouseUpCheck);   
}

document.querySelector('.mySelector').addEventListener('mousedown', function(){
  window.addEventListener('mouseup', mouseUpCheck);
  pressTimer = window.setTimeout(function() {
  longClick = true; 
  //code for longclick
  },2000);
});

document.querySelector('.mySelector').addEventListener('click', function(event) {
  if (longClick) {
    longClick = false;
    event.stopPropagation();
    event.preventDefault();

    return;
  }

  // code for simple click
});