Как запустить событие 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') использует конфигурацию псевдонима окна просмотра.