Как запустить событие window.onresize?

Я пытаюсь запустить событие изменения размера окна программно:

var evt = document.createEvent('HTMLEvents');
evt.initEvent('resize', true, false);
window.dispatchEvent(evt);

Это, к сожалению, не работает. Я пытаюсь заставить библиотеку ExtJS выполнять пересчеты, и она использует события DOM Level 3, поэтому я не могу просто вызвать window.onresize();,

4 ответа

Решение

Я не уверен, какие именно пересчеты вы хотите, но, может быть, лучше сделать doLayout? http://docs.sencha.com/ext-js/4-0/#!/api/Ext.container.AbstractContainer-method-doLayout

Вы создаете неправильное событие.

Resize это UIEvent, читайте спецификации здесь

Вам нужно сделать это:

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

Смотрите это в действии здесь: http://jsfiddle.net/9hsBA/

В случае, если createEvent может устареть в пользу CustomEvent, вот аналогичный фрагмент с использованием API CustomEvent:

var ev = new CustomEvent('resize'); //instantiate the resize event
ev.initEvent('resize');

window.dispatchEvent(ev); // fire 'resize' event!

На всякий случай, если кому-то еще это нужно, в Extjs 4.1 вы можете сделать что-то типичное неэлегентное...

    Ext.ComponentQuery.query('viewport')[0].doLayout();

Идентификатор в окне просмотра не требуется - часть.query('viewport') использует конфигурацию псевдонима окна просмотра.

Другие вопросы по тегам