Отключение прокрутки по среднему щелчку с помощью JavaScript - PullRequest
9 голосов
/ 19 декабря 2009

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

С помощью JQuery у меня хорошее начало.

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

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

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

См. Также «Запуск события onclick с помощью среднего щелчка»

Ответы [ 4 ]

12 голосов
/ 19 декабря 2009

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

5 голосов
/ 24 мая 2015

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

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

document.body.onmousedown = function(e) { if (e.button === 1) return false; }
3 голосов
/ 31 декабря 2009

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

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

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

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

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

2 голосов
/ 09 сентября 2011

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

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

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

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

...