Quiero saber el nivel de zoom de lo que se muestra en una ventana del navegador según el javascripts' window object properties al que tengo acceso. Parece que no puedo encontrar la fórmula matemática correcta para el zoom en función del ancho interior, el desplazamiento de página, etc. Encontré una solución, pero eso usa la llamada document.body.getBoundingClientRect que no devuelve nada en mi caso y por lo que no puedo decir si hay un reemplazo adecuado de las propiedades de la ventana. Estoy usando Safari.¿Cómo determino programáticamente el nivel de zoom actual de una ventana del navegador?
Respuesta
Se puede determinar el nivel de zoom mediante la comparación de diversas propiedades de document.documentElement.clientWidth
dependiendo de su navegador:
- vs
window.outerWidth
(sobre el Opera) - vs
document.defaultView.getComputedStyle(document.documentElement, null).width
(en Safari, Chrome) - o comparar
screen.deviceXDPI
yscreen.logicalXDPI
(en IE8).
La relación de estos valores es el nivel de zoom actual (por ejemplo, una relación de 2 indica un zoom de 200%).
Aquí hay un enfoque aproximado que determina la relación de zoom al observar la diferencia entre el ancho interno y disponible de la ventana (con y sin la barra de desplazamiento), y lo compara con el ancho de la barra de desplazamiento con una relación del 100%. Actualmente depende de jquery, y se debe hacer un poco más de trabajo para calcular el ancho exacto de la barra de desplazamiento para varios navegadores (actualmente solo usa 15 píxeles, que parece ser la norma).
function getZoom(){
var ovflwTmp = $('html').css('overflow');
$('html').css('overflow','scroll');
var viewportwidth;
// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
if (typeof window.innerWidth != 'undefined') {
viewportwidth = window.innerWidth;
} else if (typeof(document.documentElement) != 'undefined' &&
typeof document.documentElement.clientWidth != 'undefined' &&
document.documentElement.clientWidth != 0) {
// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
viewportwidth = document.documentElement.clientWidth;
} else {
// older versions of IE
viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
}
var windW = $(window).width();
var scrollBarW = viewportwidth - windW;
if(!scrollBarW) return 1;
$('html').css('overflow',ovflwTmp);
return (15/scrollBarW);
}
Si bien esto no es perfecto, es lo mejor que he podido para llegar hasta el momento para este tipo de cosas. Actualmente lo estoy usando para saber cuándo publicar imágenes de alta resolución, si el usuario ha aumentado el zoom hasta el punto de hacer que se vean borrosas.
- 1. Configuración del nivel de zoom en el navegador móvil
- 2. ¿Cómo cambiar el nivel de zoom de Google Maps programáticamente?
- 3. ¿Cómo puedo obtener el nivel de zoom actual en UIScrollView?
- 4. ¿Cómo obtener programáticamente el nivel de audio actual?
- 5. ¿Cómo determino el entero de nivel máximo de zoom para Google Maps?
- 6. Cómo aumentar el nivel de zoom del navegador en la carga de la página?
- 7. Obtenga el nivel de confianza de ASP.NET actual programáticamente
- 8. imitar el zoom del navegador con JavaScript
- 9. Obtener la posición de la ventana del navegador independientemente del zoom
- 10. Configuración del nivel de zoom del mapa de worldwind
- 11. Desactivar el zoom del navegador sobre ciertos elementos en Firefox
- 12. Como llegar todos los marcadores visibles en el nivel de zoom actual
- 13. ventana del navegador de redimensionamiento del navegador cruzado en JavaScript
- 14. ¿Cómo especifico el nivel de zoom inicial en D3?
- 15. ¿Cómo encontrar el nivel de transacción actual?
- 16. ¿Cómo creo una ventana de Cocoa programáticamente?
- 17. iPhone UIWebView: ¿cómo se establece el nivel y la posición del zoom?
- 18. ¿Cómo borro el caché del navegador programáticamente en el iPhone?
- 19. Pygame zoom/ventana de desplazamiento
- 20. ¿Cómo prevenir el cierre de la ventana del navegador?
- 21. cómo establecer el nivel de zoom utilizando css
- 22. jquery-ui-map cómo configurar el nivel de zoom
- 23. Cómo cargar capas según el nivel de zoom?
- 24. Comportamiento indiferente del nivel de zoom en IOS 6 mapview
- 25. Google-Maps v3: ¿Cómo cambiar el estilo del mapa en función del nivel de zoom?
- 26. Desactivar ventana del navegador Cambiar el tamaño
- 27. Nivel de zoom mínimo/máximo en OpenLayers
- 28. obtener el nivel de volumen del sistema actual en iPhone
- 29. Crear un navegador de ventana dentro del navegador con extjs
- 30. Determine el controlador de dominio actual programáticamente
Si uso document.documentElement.clientWidth y document.defaultView.getComputedStyle (document.documentElement, null) .width siempre obtengo los mismos valores (920 y 2080), sin importar el zoom. –
¿Tiene sentido decir que zoom = window.pageYOffset/window.innerHeight * 100? –
Hmm ... esto parece funcionar para mí en Chrome, y asumí que también funcionaría en Safari ya que también está usando Webkit, pero es posible que las diferencias de versiones estén entrando en juego aquí. –