現在我停在了鼠標拖動事件,就像這樣:捕獲鼠標鬆開事件/窗口
$(document).mouseup(_onMouseUp);
不過,我需要當鼠標離開瀏覽器窗口來捕捉鼠標了事件,類似於Flash中的releaseOutside
。
這是可能的JS?
現在我停在了鼠標拖動事件,就像這樣:捕獲鼠標鬆開事件/窗口
$(document).mouseup(_onMouseUp);
不過,我需要當鼠標離開瀏覽器窗口來捕捉鼠標了事件,類似於Flash中的releaseOutside
。
這是可能的JS?
您無法在瀏覽器窗口外檢測到mouseup或mousedown事件,但我認爲您要做的是在用戶單擊瀏覽器窗口時取消拖放操作。您可以實現這個目標,通過反應到瀏覽器窗口失去焦點,如:
$(window).on("blur", function(e) {
// Cancel my drag and drop here
});
或
$(document).on("blur", function(e) {
// Cancel my drag and drop here
});
這包括你的瀏覽器窗口外的鼠標點擊,還搞什麼視窗Alt鍵+標籤任務切換。
我想它應該是'window'而不是'document',請參閱http://www.quirksmode.org/dom/events/blurfocus.html –
我測試過所有5種主要瀏覽器和幾種類型的'document'的設備。但是,隨意使用'window',那也可以。 –
是的,可以在瀏覽器窗口外捕獲mouseup事件。只需撥打Element.setCapture()內部mousedown回調。
記得在mouseup上也打電話document.releaseCapture()。
elem.addEventListener('mousedown', function() {
...
elem.setCapture();
});
elem.addEventListener('mouseup', function() {
...
document.releaseCapture();
});
僅供參考Element.setCapture()在Chrome中不受支持(https://bugs.chromium.org/p/chromium/issues/detail?id=246536) –
是的,但Chrome不會默認捕獲鼠標? –
我不知道,但即使是這樣,elem.setCapture()當前在Chrome中引發異常,所以仍需要一些注意。 –
您可以在各種主流瀏覽器(Chrome,Edge和Firefox)的瀏覽器窗口之外捕獲mouseup事件。
你只需要附加該偵聽到 '窗口' 對象,就像這樣:
window.addEventListener('mouseup',
() => console.log('mouse up captured outside the window'));
https://codepen.io/fredrikborgstrom/pen/vRBaZw
或在您的情況下,使用jQuery,這將是:
$(window).mouseup(_onMouseUp);
不,這是不可能的 – Bernhard
鍵盤/鼠標事件只適用於瀏覽器集中(除非你是IE瀏覽器:http://spider.io/blog/2012/12 /互聯網瀏覽器數據泄漏/)。這將是一個巨大的安全漏洞。 –
可以檢測到文檔失去焦點,正如我在下面的答案中詳細說明的那樣。這可能會完成OP想要的內容。 –