Как вызвать событие изменения размера окна в JavaScript? - PullRequest
285 голосов
/ 30 ноября 2009

Я зарегистрировал триггер при изменении размера окна. Я хочу знать, как я могу вызвать событие, которое будет вызвано. Например, когда я скрываю div, я хочу, чтобы вызывалась моя триггерная функция.

Я обнаружил, window.resizeTo() может вызвать функцию, но есть ли другое решение?

Ответы [ 8 ]

632 голосов
/ 09 сентября 2013
window.dispatchEvent(new Event('resize'));
310 голосов
/ 30 ноября 2009

Где возможно, я предпочитаю вызывать функцию, а не отправлять событие. Это хорошо работает, если у вас есть контроль над кодом, который вы хотите запустить, но смотрите ниже случаи, когда вы не владеете кодом.

window.onresize = doALoadOfStuff;

function doALoadOfStuff() {
    //do a load of stuff
}

В этом примере вы можете вызвать функцию doALoadOfStuff без отправки события.

В ваших современных браузерах вы можете вызвать событие , используя:

window.dispatchEvent(new Event('resize'));

Это не работает в Internet Explorer, где вам нужно будет сделать условное обозначение:

var resizeEvent = window.document.createEvent('UIEvents'); 
resizeEvent .initUIEvent('resize', true, false, window, 0); 
window.dispatchEvent(resizeEvent);

jQuery имеет метод trigger , который работает следующим образом:

$(window).trigger('resize');

И имеет оговорку:

Несмотря на то, что .trigger () имитирует активацию события, в комплекте с синтезированным объектом события, она не полностью воспроизводит естественное событие.

Вы также можете моделировать события для определенного элемента ...

function simulateClick(id) {
  var event = new MouseEvent('click', {
    'view': window,
    'bubbles': true,
    'cancelable': true
  });

  var elem = document.getElementById(id); 

  return elem.dispatchEvent(event);
}
150 голосов
/ 12 апреля 2013

С помощью jQuery вы можете попытаться вызвать триггер :

$(window).trigger('resize');
51 голосов
/ 09 августа 2015

Чистый JS, который также работает в IE (от @ Комментарий Манфреда )

var evt = window.document.createEvent('UIEvents'); 
evt.initUIEvent('resize', true, false, window, 0); 
window.dispatchEvent(evt);

Или для угловых:

$timeout(function() {
    var evt = $window.document.createEvent('UIEvents'); 
    evt.initUIEvent('resize', true, false, $window, 0); 
    $window.dispatchEvent(evt);
});
34 голосов
/ 08 мая 2017

Объединение ответов pomber и avetisk для всех браузеров без предупреждения:

if (typeof(Event) === 'function') {
  // modern browsers
  window.dispatchEvent(new Event('resize'));
} else {
  // for IE and other old browsers
  // causes deprecation warning on modern browsers
  var evt = window.document.createEvent('UIEvents'); 
  evt.initUIEvent('resize', true, false, window, 0); 
  window.dispatchEvent(evt);
}
12 голосов
/ 25 марта 2014

Я не смог заставить это работать с любым из вышеперечисленных решений. После того, как я связал событие с jQuery, оно работало нормально, как показано ниже:

$(window).bind('resize', function () {
    resizeElements();
}).trigger('resize');
5 голосов
/ 18 декабря 2014

только

$(window).resize();

это то, что я использую ... если я не понимаю, что вы просите.

0 голосов
/ 23 марта 2014

window.resizeBy() вызовет событие onresize окна. Это работает в Javascript или VBScript .

window.resizeBy(xDelta, yDelta) называется window.resizeBy(-200, -200), чтобы уменьшить страницу на 200 пикселей на 200 пикселей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...