Отключение прокрутки среднего клика с помощью javascript

фон: Я создаю таблицу, напоминающую whenisgood.net, в том, что он имеет щелчок-N-drag переключение для элементов таблицы. Я хочу вызвать различные типы кода переключения, когда левая, средняя и правая кнопки мыши активируют событие mousedown.

используя JQuery, я начинаю хорошо.

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

на toggle() функция, которую я могу использовать e.which чтобы определить, какая кнопка была нажата.

в punchline: я использовал e.preventDefault () надеется, что он остановит поведение прокрутки по умолчанию при среднем щелчке. Это не так. что я могу сделать, чтобы остановить действие прокрутки с активацией?

см. также "запуск события onclick с помощью средней кнопки"

4 ответов


средний щелчок можно отключить с помощью Javascript, но только в IE, WebKit и Konquerer. Firefox требует редактирования файла конфигурации. Это 2017 и firefox 50 поддерживает это.


Это старый вопрос...но если я правильно понимаю, вы хотите отключить прокрутку с помощью средней кнопки мыши.

В настоящее время вы можете сделать это с помощью одной строки vanilla JS:

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

В настоящее время мое решение таково: (больше jquery!)

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

обернув его в ссылку (через в jQuery обернуть), браузеры думают, что это ссылка и не прокручивают средний клик, даже если вы перетаскиваете мышь. С этой настройкой и моей ситуацией есть пара (незначительных) gotchas.

Firefox откроет новую вкладку при среднем щелчке, но только если вы не перетащите. Opera откроет новую вкладку при среднем щелчке, перетаскивании или нет. Вот почему я использовал href='javascript:void(0);' вместо просто href='#'--чтобы браузер клиента не загружал целую страницу, просто пустую страницу со странным url-адресом.

но это решение работает как шарм на Chrome и Safari. Он хорошо работает с IE8, за исключением того, что теперь, когда я нажимаю левой кнопкой мыши-N-drag, он меняет указатель на символ "не могу этого сделать", так как он думает, что я хочу перетащить ссылку куда-нибудь. Непроверенные на старых версиях IE.


это уже немного старый поток, но я старался обойти это в Firefox (я все еще использую 3.6), и я поделюсь своими выводами, возможно, кто-то найдет это полезным.

проверьте, что если вы создаете пустой HTML-файл (или небольшой документ с парой абзацев) и загружаете его в Firefox, полоса прокрутки среднего клика не отображается. Это потому что <body>'ширина и высота меньше, чем размер окна. Если вы положили много <br>, это не так и полоса прокрутки появляется при среднем щелчке.

Google удалось предотвратить скроллер среднего клика, чтобы появиться в Google Maps в Firefox, убедившись (через JS), что <body> размер всегда меньше, чем размер окна, плюс дополнительно класть <body style="overflow:hidden;">.

это вряд ли достижимо в общем случае, но иногда может быть полезно.