¿Es posible detectar, usando JavaScript, cuando el usuario cambia el zoom en una página? Simplemente quiero ver un evento de "zoom" y responder a él (similar al evento window.onresize).
Gracias.
javascript
events
zoom
usuario123093
fuente
fuente
Respuestas:
No hay forma de detectar activamente si hay un zoom. Encontré una buena entrada aquí sobre cómo puede intentar implementarlo.
También puedes hacerlo usando las herramientas de la publicación anterior. El problema es que estás más o menos haciendo conjeturas informadas sobre si la página se ha ampliado o no. Esto funcionará mejor en algunos navegadores que en otros.
No hay forma de saber si la página está ampliada si la cargan mientras está ampliada.
fuente
document.body.offsetWidth
Estoy usando este fragmento de JavaScript para reaccionar a los "eventos" de Zoom.
Sondea el ancho de la ventana. (Como se sugiere en esta página (que Ian Elliott enlazó): http://novemberborn.net/javascript/page-zoom-ff3 [archivo] )
Probado con Chrome, Firefox 3.6 y Opera, no IE.
Saludos, Magnus
fuente
Buenas noticias
todo el mundo¡algunas personas! Los navegadores más nuevos activarán un evento de cambio de tamaño de ventana cuando se cambie el zoom.fuente
Vamos a definir px_ratio de la siguiente manera:
px px = ratio de píxeles físicos a css px.
si alguno amplía la página, los pxes de la ventana gráfica (px es diferente del píxel) se reducen y deben ajustarse a la pantalla, por lo que la relación (píxel físico / CSS_px) debe aumentar.
pero en el cambio de tamaño de la ventana, se reduce el tamaño de la pantalla y los px entonces la relación se mantendrá.
zoom: activa el evento windows.resize -> y cambia px_ratio
pero
cambio de tamaño: desencadenar evento windows.resize -> no cambia px_ratio
El punto clave es la diferencia entre CSS PX y Physical Pixel.
https://gist.github.com/abilogos/66aba96bb0fb27ab3ed4a13245817d1e
fuente
Esto funciona para mi:
Solo es necesario en IE8. Todos los otros navegadores generan naturalmente un evento de cambio de tamaño.
fuente
Hay un ingenioso complemento creado a partir de
yonran
eso que puede hacer la detección. Aquí está su pregunta previamente respondida sobre StackOverflow. Funciona para la mayoría de los navegadores. La aplicación es tan simple como esta:Manifestación
fuente
Always enable zoom
botón en la opción Accesibilidad. La demostración no reaccionará al cambio.Me gustaría sugerir una mejora a la solución anterior con el seguimiento de los cambios en el ancho de la ventana. En lugar de mantener su propia variedad de oyentes de eventos, puede usar el sistema de eventos javascript existente y activar su propio evento al cambiar el ancho, y vincular los controladores de eventos.
Acelerador / rebote puede ayudar a reducir la tasa de llamadas de su controlador.
fuente
También puede obtener los eventos de cambio de tamaño del texto y el factor de zoom inyectando un div que contenga al menos un espacio no rompible (posiblemente, oculto) y verificando regularmente su altura. Si la altura cambia, el tamaño del texto ha cambiado (y usted sabe cuánto, esto también se dispara, por cierto, si la ventana se amplía en modo de página completa, y aún obtendrá el factor de zoom correcto, con la misma altura / relación de altura).
fuente
fuente
En iOS 10 es posible agregar un detector de
touchmove
eventos al evento y detectar, si la página está ampliada con el evento actual.fuente
Aunque esta es una pregunta de 9 años, ¡el problema persiste!
He estado detectando el cambio de tamaño al excluir el zoom en un proyecto, por lo que edité mi código para que funcione para detectar tanto el cambio de tamaño como el zoom exclusivos entre sí. Funciona la mayor parte del tiempo, por lo que si la mayoría es lo suficientemente bueno para su proyecto, ¡esto debería ser útil! Detecta el zoom el 100% del tiempo en lo que he probado hasta ahora. El único problema es que si el usuario se vuelve loco (es decir, si cambia el tamaño de la ventana de forma espasmódica) o si la ventana se retrasa, puede activarse como un zoom en lugar de un cambio de tamaño de la ventana.
Funciona mediante la detección de un cambio en el tamaño de la ventana
window.outerWidth
owindow.outerHeight
al cambiar el tamaño de la ventana, mientras que detecta un cambio en el tamaño de la ventanawindow.innerWidth
owindow.innerHeight
independiente del mismo como un zoom.Nota: Mi solución es como la de KajMagnus, pero me ha funcionado mejor.
fuente
0.05
por lo menos, sin dar una buena explicación. ;-) Por ejemplo, sé que en Chrome, específicamente, el 10% es la cantidad más pequeña que el navegador ampliará en cualquier caso, pero no está claro que esto sea cierto para otros navegadores. Para tu información, asegúrate siempre de que tu código esté probado y prepárate para defenderlo o mejorarlo.Aquí hay una solución limpia:
fuente
El evento de cambio de tamaño funciona en los navegadores modernos al adjuntar el evento
window
y luego leer los valores delbody
u otro elemento con, por ejemplo ( .getBoundingClientRect () ).Otra alternativa : la API ResizeObserver
Dependiendo de su diseño, puede mirar para cambiar el tamaño de un elemento en particular.
Esto funciona bien en diseños "receptivos", porque la caja del contenedor cambia de tamaño al hacer zoom.
Tenga cuidado de no sobrecargar las tareas de JavaScript de los eventos de gestos del usuario. Use requestAnimationFrame cuando necesite redibujar.
fuente
Según MDN, "matchMedia" es la forma correcta de hacer esto https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#Monitoring_screen_resolution_or_zoom_level_changes
es un poco complicado porque cada instancia solo puede ver un MQ a la vez, por lo que si está interesado en cualquier cambio en el nivel de zoom, debe hacer un montón de coincidencias ... pero dado que el navegador se encarga de emitir los eventos, probablemente sea aún más eficiente que el sondeo, y podría acelerar o cancelar la devolución de llamada o fijarla a un cuadro de animación o algo así; aquí hay una implementación que parece bastante ágil, no dude en intercambiar _ acelerador o lo que sea si ya depende de eso.
Ejecute el fragmento de código y amplíe y reduzca en su navegador, observe el valor actualizado en el marcado: ¡solo lo probé en Firefox! déjame saber si ves algún problema.
fuente
Estoy respondiendo a un enlace de 3 años pero creo que aquí hay una respuesta más aceptable,
Crear archivo .css como
P.EJ:-
El código anterior hace que el tamaño de la fuente '10px' cuando la pantalla se amplía a aproximadamente 125%. Puede verificar diferentes niveles de zoom cambiando el valor de '1000px'.
fuente
max-width
y la relación de zoom?