2016-11-07 3 views
1

В JavaScriptmousedown событие, за которым следует mouseup и click. поэтому в событии click три из этого события выполняются. Но в моей задаче я хочу сделать другую задачу для mousedown и click. если кто-либо нажмите и удерживайте кнопку мыши, а затем отобразится список, и событие click не будет выполнено. , когда просто щелкните, то задача для щелчка будет выполнена. Он похож на функциональность задней клавиши хром. кому помочь. Заранее спасибо.Хотите выполнить различную задачу по событию мыши и щелчка

+1

MouseDown + MouseUp = Один полного щелчка. Таким образом, если событие mousedown запускается, произойдет автоматическое событие mouseup. – Prasath

+0

да, я знаю, мне нужна другая задача для mousedown на время и нажмите. –

+0

У вас есть обработчик событий для события 'click'? –

ответ

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 
}); 
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

У этого вопроса будет тот же самый вопрос, что и мой изначально, забыл о событии mouseup, возможно, не срабатывает, если вы отпустите мышь от первоначального элемента управления. Чтобы увидеть это в своем фрагменте, .. Если вы увеличиваете таймаут, чтобы сказать 2 секунды, mousedown на управлении, немедленно отведите мышь от управления, отпустите мышь и подождите. Вы получите «предупреждение», даже если вы не держите его в течение 2 секунд. Говоря это, я думаю, что у setTimeout есть то преимущество, что хотя бы такие ошибки не протекают, мой setInterval просочился в этот экземпляр. Добавьте мышь в объект окна, и это должен быть принятый ответ. – Keith

+1

спасибо, обновлено –

+0

Я пробовал это, но когда я нажимаю 1-й, он работает, но когда я нажимаю после долгого щелчка, он не работает для щелчка –

3

MouseDown doens't генерируют несколько событий для пуха, поэтому здесь я использовал 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>

Смежные вопросы