2009-02-12 17 views
8

Cómo se desactiva el efecto de desplazamiento ctrl/rueda con css o javascript en ciertos elementos. Creo una barra de menú que se distorsiona cuando se aplica el efecto de zoom. Me gustaría desactivarlo solo para ciertos elementos.deshabilitar el efecto CTRL/Zoom de rueda en el tiempo de ejecución

+0

Este es un problema de accesibilidad y se debe tratar de trabajar con él y no contra ella. Es por eso que debe usar la unidad relativa "em" para dimensionar los elementos css. Gmail es un gran ejemplo de tamaño relativo. Vaya allí y cambie el tamaño del texto del navegador para que sea más grande o más pequeño. –

Respuesta

0

No se puede; esta es una característica del navegador, no una función de documento.

Habiendo dicho esto, si utiliza CSS style = "font-size: 9px;", puede anular el tamaño del texto. El zoom del navegador seguirá funcionando, y los cambios en el tamaño de la fuente del navegador tendrán algunos efectos de reformateo.

11

Mejor idea: diseñe su diseño para que sea lo suficientemente robusto como para manejar cambios como este. No puede deshabilitarlos, incluso si arregla el tamaño de la fuente (lo que nunca debe hacer en primer lugar), por lo que también podría responder al acercamiento con gracia.

El hecho es que si todos los elementos son escalados equitativamente por el navegador, su página debería verse y funcionar exactamente igual que antes (excepto, mejor dicho, más grande) a menos que tome algunos atajos perezosos en su diseño algun lado.

+1

"El hecho es que si el navegador escanea todos los elementos por igual ..." Creo que está teniendo problemas con el zoom de fuente que solía ser dominante. Afortunadamente, eso está a punto de desaparecer ... Desafortunadamente, seguirá siendo un problema durante algunos años. – AaronSieb

+0

Eso es justo. Si hay partes funcionales de la página que no necesitan escalarse con las fuentes (es decir, cualquier cosa menos el contenido), puedo corregirlas. Pero si usa JS que depende del posicionamiento perfecto de píxeles o cualquier cosa en esas líneas, es una causa perdida. – Welbog

+0

@Welbog El hecho es que los navegadores son defectuosos: http: // stackoverflow.com/q/10914174/632951 – Pacerier

0

Aquí está mi problema: Siempre he diseñado con ems, y funcionan mágicamente. Pero con el zoom de página completa, mis fondos también se acercan. Si tengo un patrón repetitivo como fondo principal, no quiero que se pixelice. Nos ayudan a evitar algunos trabajos, como la implementación de las puertas deslizantes de CSS de Doug Bowman, pero ahora tengo que vivir con pestañas borrosas.

También tengo otro problema con el zoom de página completa, al menos tal como está implementado en los navegadores de hoy: Soy una de esas personas que configuran mi navegador a 12pt en lugar de 16pt. De vez en cuando, me encontraba con un sitio (de ancho fijo, por supuesto) que cambia el tamaño del texto a un tamaño pequeño (supongo que usaron 0.9em o algo así, en lugar de 14px, mientras intentaban hacerlo menor). Usualmente solo acercaba una o dos mitades, y todo estaría bien. Sin embargo, con el zoom de página completa, las imágenes se escalan mal y tengo una barra de desplazamiento horizontal.

La solución al primer problema sería permitir algún tipo de instrucción de procesamiento en la etiqueta background-image para no permitir el zoom de página completa en ese elemento. O tal vez algo en la cabeza del documento. Si los navegadores realmente quieren ser justos al respecto, también podrían darles a los usuarios una opción que podrían establecer que anula la instrucción sin zoom, para que puedan hacer zoom de todos modos si así lo desean. La solución al segundo problema sería hacer zoom de página completa para convertir todas las px en em a una velocidad de 16px/em primero, y luego reducir el tamaño del texto, en lugar de convertir px a em usando su texto tamaño como base. Luego, al desplazarse hacia atrás hasta 16 píxeles, las imágenes quedarán perfectamente dimensionadas, según lo previsto.

solución
2

para IE y Firefox:

var obj=document.body; // obj=element for example body 
// bind mousewheel event on the mouseWheel function 
if(obj.addEventListener) 
{ 
    obj.addEventListener('DOMMouseScroll',mouseWheel,false); 
    obj.addEventListener("mousewheel",mouseWheel,false); 
} 
else obj.onmousewheel=mouseWheel; 

function mouseWheel(e) 
{ 
    // disabling 
    e=e?e:window.event; 
    if(e.ctrlKey) 
    { 
     if(e.preventDefault) e.preventDefault(); 
     else e.returnValue=false; 
     return false; 
    } 
} 
+0

FYI, esto no funcionará en los navegadores webkit cuando la tecla de control presiona sobreviene el evento mousewheel y no se detecta. – SpYk3HH

Cuestiones relacionadas