2009-12-18 8 views
9

Antecedentes: Estoy creando una tabla que recuerda a whenisgood.net, en la que se hace clic y arrastrar al alternar los elementos de la tabla. Quiero llamar a diferentes tipos de código de alternar cuando los botones izquierdo, medio y derecho del mouse activan un evento de mousedown.Deshabilitar el desplazamiento del medio clic con javascript

Al usar JQuery, he tenido un buen comienzo.

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

En la función toggle() puedo usar e.which para determinar qué botón se hizo clic.

The punchline: utilicé e.preventDefault() con la esperanza de que detuviera el comportamiento predeterminado del medio clic para desplazarse. No fue así. ¿Qué puedo hacer para evitar que se active la acción de desplazamiento?

Ver también "Triggering onclick event using middle click"

Respuesta

3

Actualmente, mi solución es la siguiente: (más jQuery)

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

envolviéndolo en un enlace (a través de jquery wrap), navegadores piensan que es un enlace y no se desplazan en el botón central, incluso si arrastras el mouse alrededor. Con esta configuración y mi situación, hay un par de problemas menores.

Firefox abrirá una nueva pestaña cuando haga clic en el centro, pero solo si no arrastra. Opera abrirá una nueva pestaña cuando haga clic en el medio, arrastre o no. Es por eso que usé href='javascript:void(0);' en lugar de solo href='#' --para que el navegador del cliente no cargue una página entera, solo una página en blanco con una url extraña.

Pero esta solución funciona como un encanto en Chrome y Safari. Funciona bien con IE8, excepto que ahora cuando hago clic con el botón izquierdo en la izquierda, cambia el puntero a un símbolo de "no puedo hacer eso", ya que cree que quiero arrastrar el enlace a alguna parte. No probado en versiones anteriores de IE.

12

Middle-click can be disabled with Javascript, pero sólo en IE, WebKit, y Konquerer. Firefox requiere una edición de archivo de configuración. Es 2017 y Firefox 50 lo admite.

+5

+1 que era apenas divertido. – czarchaic

+0

+1 Gran enlace: lleno de información. Fue la página de prueba (http://unixpapa.com/js/testmouse.html) lo que me inspiró para mi solución actual. –

2

Ya es un hilo viejo, pero he tratado de eludir esto en Firefox (todavía estoy usando 3.6) y compartiré mis hallazgos, tal vez alguien lo encontrará útil.

Compruebe que si crea un archivo HTML vacío (o un pequeño documento con un par de párrafos) y lo carga en Firefox, no hace clic en la barra de desplazamiento central. Esto se debe a que el ancho y la altura de <body> son más pequeños que el tamaño de la ventana. Si coloca un lote de <br>, este no es el caso y la barra de desplazamiento aparece al hacer clic con el botón central.

Google logró impedir clic desplazador medio para aparecer en Google Maps en Firefox asegurándose de que (a través de JS) que <body> tamaño es siempre inferior al tamaño de la ventana, además, además, poner <body style="overflow:hidden;">.

Esto no se puede lograr en general, pero a veces puede ser útil.

4

Esta es una vieja pregunta ... pero si la estoy entendiendo correctamente, desea deshabilitar el desplazamiento haciendo clic con el botón central del mouse.

Hoy en día, usted puede hacer esto con una sola línea de vainilla JS:

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

Puedo confirmar que esto funciona en IE 11, Chrome y Firefox. – emilhem

Cuestiones relacionadas