Можно ли с помощью JavaScript определить, когда пользователь изменяет масштаб страницы? Я просто хочу поймать событие «zoom» и ответить на него (аналогично событию window.onresize).
Спасибо.
javascript
events
zoom
user123093
источник
источник
Ответы:
Там нет никакого способа, чтобы активно обнаружить, если есть зум. Я нашел хорошую запись здесь о том, как вы можете попытаться реализовать это.
Вы также можете сделать это с помощью инструментов, описанных выше. Проблема в том, что вы более или менее делаете обоснованные предположения о том, увеличена ли страница. Это будет работать лучше в некоторых браузерах, чем в других.
Невозможно определить, увеличена ли страница, если они загружают вашу страницу во время увеличения.
источник
document.body.offsetWidth
Я использую этот кусок JavaScript, чтобы реагировать на «события» Zoom.
Опрашивает ширину окна. (Как несколько предложено на этой странице (на которую ссылается Ян Эллиотт): http://novemberborn.net/javascript/page-zoom-ff3 [архив] )
Протестировано с Chrome, Firefox 3.6 и Opera, а не IE.
С уважением, Магнус
источник
Хорошие новости
всенекоторые люди! Новые браузеры будут вызывать событие изменения размера окна при изменении масштаба.источник
Давайте определим px_ratio как показано ниже:
отношение px = отношение физического пикселя к CSS;
если какой-либо один масштабирует страницу, область просмотра пикселей (px отличается от пикселя) уменьшается и должна соответствовать экрану, поэтому соотношение (физический пиксель / CSS_px) должно увеличиваться.
но в окне Изменение размера размер экрана уменьшается так же, как и пиксели. поэтому соотношение сохранится.
масштабирование: вызвать событие windows.resize -> и изменить px_ratio
но
изменение размера: вызвать событие windows.resize -> не изменить px_ratio
Ключевым моментом является разница между CSS PX и Physical Pixel.
https://gist.github.com/abilogos/66aba96bb0fb27ab3ed4a13245817d1e
источник
Это работает для меня:
Это нужно только на IE8. Все остальные браузеры, естественно, генерируют событие изменения размера.
источник
Есть встроенный плагин,
yonran
который может сделать обнаружение. Вот его ранее отвеченный вопрос о StackOverflow. Это работает для большинства браузеров. Приложение так просто, как это:демонстрация
источник
Always enable zoom
кнопку в опции Доступность. Демо не будет реагировать на изменения.Я хотел бы предложить улучшение предыдущего решения с отслеживанием изменений ширины окна. Вместо того чтобы хранить собственный массив прослушивателей событий, вы можете использовать существующую систему событий javascript, запускать собственное событие при изменении ширины и привязывать к нему обработчики событий.
Throttle / debounce может помочь в снижении скорости вызовов вашего обработчика.
источник
Вы также можете получить события изменения размера текста и коэффициент масштабирования, введя элемент div, содержащий как минимум неразрывный пробел (возможно, скрытый), и регулярно проверяя его высоту. Если высота изменяется, размер текста изменился (и вы знаете, сколько - это также срабатывает, кстати, если окно масштабируется в режиме полной страницы, и вы все равно получите правильный коэффициент масштабирования с той же высотой / соотношение высоты).
источник
источник
В iOS 10 можно добавить прослушиватель событий к
touchmove
событию и определить, увеличена ли страница с текущим событием.источник
Хотя это 9-летний вопрос, проблема сохраняется!
Я обнаружил изменение размера, исключая масштабирование в проекте, поэтому я отредактировал свой код, чтобы он работал для определения как изменения размера, так и изменения масштаба друг от друга. Это работает большую часть времени, поэтому, если большинство достаточно хорошо для вашего проекта, то это должно быть полезно! Он обнаруживает увеличение в 100% случаев в том, что я тестировал до сих пор. Единственная проблема заключается в том, что если пользователь сходит с ума (то есть из-за скачкообразного изменения размера окна) или лаги окна, он может срабатывать как увеличение вместо изменения размера окна.
Он работает путем обнаружения изменения
window.outerWidth
илиwindow.outerHeight
изменения размера окна при обнаружении измененияwindow.innerWidth
илиwindow.innerHeight
независимо от изменения размера окна в виде увеличения.Примечание: мое решение похоже на решение KajMagnus, но оно мне помогло.
источник
0.05
по крайней мере, без хорошего объяснения. ;-) Например, я знаю, что в Chrome, в частности, 10% - это наименьшее значение, которое браузер будет увеличивать в любом случае, но не ясно, что это верно для других браузеров. К вашему сведению, всегда проверяйте ваш код и будьте готовы защитить или улучшить его.Вот чистое решение:
источник
Событие resize работает в современных браузерах, прикрепляя событие
window
, а затем считывая значенияbody
, или другого элемента, например ( .getBoundingClientRect () ).Другая альтернатива : API ResizeObserver
В зависимости от вашего макета, вы можете наблюдать за изменением размера на конкретном элементе.
Это хорошо работает на «адаптивных» макетах, потому что размер контейнера увеличивается при изменении масштаба.
Будьте осторожны, чтобы не перегружать задачи javascript событиями жестов пользователя. Используйте requestAnimationFrame всякий раз, когда вам нужно перерисовать.
источник
Согласно MDN, «matchMedia» является правильным способом сделать это https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#Monitoring_screen_resolution_or_zoom_level_changes
это немного привередливо, потому что каждый экземпляр может смотреть только один MQ за раз, так что если вы заинтересованы в какое-либо изменение уровня масштабирования, вам нужно сделать несколько совпадений ... но так как браузер отвечает за выдачу событий, это, вероятно, все еще более производительный, чем опрос, и вы можете регулировать или дебатировать обратный вызов или прикреплять его к кадру анимации или чему-то еще - вот реализация, которая кажется довольно быстрой, не стесняйтесь менять местами _throttle или что-то еще, если вы уже зависите от этого.
Запустите фрагмент кода и увеличьте и уменьшите масштаб в вашем браузере, обратите внимание на обновленное значение в разметке - я проверял это только в Firefox! Дай мне знать, если увидишь какие-то проблемы.
источник
Я отвечаю на 3-летнюю ссылку, но я думаю, что это более приемлемый ответ,
Создайте файл .css как,
НАПРИМЕР:-
Приведенный выше код делает размер шрифта «10 пикселей», когда экран увеличен примерно до 125%. Вы можете проверить другой уровень масштабирования, изменив значение «1000px».
источник
max-width
и коэффициентом масштабирования?