Как я могу подключиться к событию изменения размера окна браузера?
Существует способ прослушивания событий изменения размера в jQuery, но я бы предпочел не включать его в свой проект только по одному этому требованию.
javascript
dom-events
window-resize
Мертвый аккаунт
источник
источник
Ответы:
JQuery просто оборачивает стандартное
resize
событие DOM, например.jQuery может сделать некоторую работу, чтобы гарантировать, что событие resize будет срабатывать согласованно во всех браузерах, но я не уверен, отличается ли какой-либо из браузеров, но я бы посоветовал вам протестировать в Firefox, Safari и IE.
источник
window.addEventListener('resize', function(){}, true);
window.onresize = () => { /* code */ };
или лучше:window.addEventListener('resize', () => { /* code */ });
Во-первых, я знаю, что
addEventListener
метод был упомянут в комментариях выше, но я не видел никакого кода. Поскольку это предпочтительный подход, вот он:Вот рабочий образец .
источник
removeEventListener
.Никогда не отменяйте функцию window.onresize.
Вместо этого создайте функцию для добавления прослушивателя событий к объекту или элементу. Это проверяет, что слушатели не работают, а затем переопределяет функцию объекта как последнее средство. Это предпочтительный метод, используемый в библиотеках, таких как jQuery.
object
: элемент или оконный объектtype
: изменить размер, прокрутить (тип события)callback
: ссылка на функциюТогда используйте это так:
или с анонимной функцией:
источник
attachEvent
больше не поддерживается. Предпочтительный путь на будущееaddEventListener
.elem == undefined
. Возможно (хотя и маловероятно), что «неопределенный» локально определяется как что-то еще. stackoverflow.com/questions/8175673/…Событие resize никогда не должно использоваться напрямую, так как оно запускается непрерывно при изменении размера.
Используйте функцию debounce для смягчения лишних вызовов.
window.addEventListener('resize',debounce(handler, delay, immediate),false);
Вот распространенный дебат, распространяющийся по сети, хотя более продвинутые ищите, как featuerd в lodash.
Это можно использовать как так ...
Он никогда не будет срабатывать чаще, чем раз в 200 мс.
Для мобильных изменений ориентации используйте:
Вот небольшая библиотека, которую я собрал, чтобы аккуратно позаботиться об этом.
источник
(...arguments) => {...}
(или...args
для меньшего количества путаницы), посколькуarguments
переменная больше не доступна в своей области видимости.Решение для 2018+:
Вы должны использовать ResizeObserver . Это нативное решение для браузера, которое имеет гораздо лучшую производительность, чем использование
resize
события. Кроме того, он поддерживает не только событие,document
но и произвольноеelements
.В настоящее время Firefox, Chrome и Safari поддерживают его . Для других (и более старых) браузеров вы должны использовать полифилл .
источник
Я верю, что @Alex V уже предоставил правильный ответ, но ответ требует некоторой модернизации, так как ему уже более пяти лет.
Есть два основных вопроса:
Никогда не используйте
object
в качестве имени параметра. Это зарезервированное слово. С учетом вышесказанного, функция @Alex V не будет работать вstrict mode
.addEvent
Функция , обеспечиваемая @Alex V не возвращают ,event object
еслиaddEventListener
используется метод. Для этого необходимо добавить еще один параметрaddEvent
.ПРИМЕЧАНИЕ. Новый параметр to
addEvent
был сделан необязательным, поэтому переход на эту новую версию функции не прервет все предыдущие вызовы этой функции. Все устаревшие варианты использования будут поддерживаться.Вот обновленная
addEvent
функция с этими изменениями:Пример вызова новой
addEvent
функции:источник
Спасибо за ссылку на мой пост в блоге на http://mbccs.blogspot.com/2007/11/fixing-window-resize-event-in-ie.html .
Хотя вы можете просто подключиться к стандартному событию изменения размера окна, вы обнаружите, что в IE событие запускается один раз для каждого X и один раз для каждого движения оси Y, что приводит к возникновению тонны событий, которые могут иметь производительность влияние на ваш сайт, если рендеринг является интенсивной задачей.
Мой метод включает в себя короткий тайм-аут, который отменяется при последующих событиях, чтобы событие не попадало в ваш код, пока пользователь не завершил изменение размера окна.
источник
источник
Следующее сообщение в блоге может быть полезно для вас: Исправление события изменения размера окна в IE
Он предоставляет этот код:
источник
Уже упомянутые выше решения будут работать, если все, что вы хотите сделать, это изменить размер окна и только окна. Однако, если вы хотите, чтобы изменение размера распространялось на дочерние элементы, вам нужно будет распространить событие самостоятельно. Вот пример кода для этого:
Обратите внимание, что дочерний элемент может вызывать
на объекте события, который передается в качестве первого Arg события resize. Например:
источник
источник
источник