2009-12-18 68 views
9

背景:我創建了一個讓人想起whenisgood.net的表格,因爲它具有單擊 - 拖動切換表格元素的功能。當左,中,右鼠標按鈕激活mousedown事件時,我想調用不同類型的切換代碼。使用javascript禁止中點擊滾動

通過使用JQuery,我得到了一個良好的開端。

$(".togglable").bind("contextmenu", function() {return false;}); 
$(".togglable").bind("mousedown", function(e){ 
    e.preventDefault(); 
    toggle(this, e); 
}); 

toggle()功能,我可以使用e.which確定單擊哪個按鈕。

點睛之筆:我用e.preventDefault()希望將停止滾動的中間點擊默認行爲。它沒有。 如何才能停止滾動操作?

"Triggering onclick event using middle click"

回答

3

目前,我的解決辦法是這樣的:(!更多的jQuery)

$(".togglable").wrap(
    "<a href='javascript:void(0);' 
    onclick='return false;'></a>" 
); 

通過鏈接包裝它(通過jquery wrap),瀏覽器認爲這是一個鏈接,即使不滾動的中間點擊,你拖動鼠標。有了這個設置和我的情況,有一些(小的)陷阱。

當你中間點擊的時候,Firefox會打開一個新的標籤,但只有在你不拖動的時候。當您中途點擊,拖動或不拖動時,Opera會打開一個新標籤頁。這就是爲什麼我使用href='javascript:void(0);'而不是僅僅是href='#' - 因此,客戶端的瀏覽器不會加載整個頁面,只是一個帶有奇怪URL的空白頁面。

但是這個解決方案在Chrome和Safari上就像一個魅力。它適用於IE8,除了現在當我左鍵單擊n-drag時,它將指針更改爲「無法做到」符號,因爲它認爲我想將鏈接拖到某個地方。未經舊版IE測試。

12

Middle-click can be disabled with Javascript見,但只有在IE,WebKit的,和konquerer中。 Firefox需要配置文件編輯。這是2017年和Firefox 50支持這一點。

+5

+1那只是搞笑。 – czarchaic 2009-12-19 02:55:44

+0

+1偉大的鏈接:充滿了信息。這是測試頁面(http://unixpapa.com/js/testmouse.html)激發了我對當前解決方案的啓發。 – 2009-12-30 23:11:29

2

它已經有點老了,但我努力繞過這個Firefox(我仍然使用3.6),我會分享我的發現,也許有人會發現它有幫助。

檢查您是否創建了一個空的HTML文件(或帶有幾段文字的小文檔)並將其加載到Firefox中,則不會出現中間單擊滾動條。這是因爲<body>的寬度和高度比窗口大小小。如果你投入很多<br>'s,情況並非如此,滾動條出現在中間點擊。

谷歌設法防止中間點擊滾輪通過確保(通過JS),其<body>大小總是小於窗口的大小,再加上額外投入 <body style="overflow:hidden;">在谷歌地圖出現在Firefox瀏覽器。

這在一般情況下難以實現,但有時可能會有用。

4

這是一個老問題......但如果我正確理解它,你想通過點擊鼠標中鍵禁用滾動。

如今,你可以用香草JS單行做到這一點:

document.body.onmousedown = function(e) { if (e.button === 1) return false; } 
+1

我可以確認這適用於IE 11,Chrome和Firefox。 – emilhem 2015-08-04 15:03:11