在JavaScript
mousedown
事件後跟mouseup
和click
。所以在點擊事件三這個事件執行。但在我的任務中,我想爲mousedown
和click
執行不同的任務。 如果有人按住鼠標一段時間,然後列表將顯示並單擊事件將不會執行。 只需單擊,即可執行點擊任務。 它就像鉻後退箭頭功能一樣。 任何人都可以幫忙。提前致謝。想要在mousedown上執行不同的任務並單擊事件
回答
對於這兩個事件在同一個選擇的工作:
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
});
你可以這樣說:
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>
這與我最初的問題有相同的問題,如果將鼠標從初始控件移開,忘記了mouseup事件可能不會觸發。要在你的代碼片段中看到這個,..如果你將超時時間增加到2秒,控制權就會被釋放,立即將鼠標移出控制器,放開鼠標並等待。即使你從未保持2秒鐘,你也會得到'提醒'。說到這一點,我認爲setTimeout的優點是至少像這樣的錯誤不會泄漏,我的setInterval泄漏在這個實例中。在窗口對象上添加鼠標,這應該是可接受的答案。 – Keith
感謝,更新 –
我試過這個,但是當我點擊第一個它的工作,但是當我點擊了很長時間後點擊它不工作點擊 –
MOUSEDOWN好好嘗試一下產生向下多個事件,所以在這裏我用一個的setInterval繼續檢查,如果鼠標仍然下。
剛剛完成了一個快速修改,忘記了如果你將鼠標移出元素,元素上的mouseup不會被觸發。所以我在這裏將事件附加到窗口上。
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>
- 1. .mousedown()事件在JScrollPane上單擊拖動條時不會觸發
- 2. 點擊事件執行時不需要單擊jquery drupal
- 3. 在NAnt上執行並行任務
- 4. 想要在按鈕單擊事件後保持同一頁面
- 5. 我想一次在不同的URL中執行常規任務。
- 6. 按鈕單擊事件不執行
- 7. 按鈕單擊事件不在IIS上執行
- 8. Gruntjs觀看不同的文件夾並執行任務
- 9. 同時讀寫多個文件並在其上執行相同的任務
- 10. 禁用jQuery UI滑塊上的單擊或mousedown事件
- 11. 點擊事件不起作用,但mousedown
- 12. 執行maven任務的第一件事
- 13. 在不同的對象上處理「mousedown」事件
- 14. 單擊第二次單擊事件時如何不執行?
- 15. 在列表視圖按鈕上執行不同的任務點擊
- 16. 單擊GWT/MGWT中的面板時要執行的事件
- 17. 在右鍵單擊文件時執行兩個任務,c#
- 18. NSSlider上的mouseDown事件
- 19. 捕獲單元格列單擊並執行事件
- 20. 不同的執行任務的方式
- 21. 並行執行任務'n'
- 22. JQuery - 在瀏覽器關閉事件上執行任務
- 23. 在iOS中的不同線程上執行後臺任務
- 24. Bamboo在不同的機器上執行任務
- 25. 在不同的主機上執行Ansible任務
- 26. 使用任務並行庫的事件
- 27. 在已禁用的WPF中處理單擊事件或MouseDown StackPanel
- 28. 想要在子菜單上禁用右鍵單擊事件,請輸入:
- 29. 在按鈕上不執行任何操作單擊:Android
- 30. 如何在視圖尋呼機上執行單擊事件android
鼠標按下+鼠標鬆開=一個完整的點擊。所以如果mousedown事件被觸發,那麼會自動發生mouseup事件。 – Prasath
是的,我知道,我想爲mousedown持續一段時間,然後點擊不同的任務。 –
您是否爲'click'事件添加了事件處理程序? –