Sempre que possível, prefiro chamar a função em vez de despachar um evento. Isso funciona bem se você tiver controle sobre o código que deseja executar, mas veja abaixo os casos em que você não possui o código.
window.onresize = doALoadOfStuff;
function doALoadOfStuff() {
//do a load of stuff
}
Neste exemplo, você pode chamar a doALoadOfStuff
função sem despachar um evento.
Nos navegadores modernos, você pode acionar o evento usando:
window.dispatchEvent(new Event('resize'));
Isso não funciona no Internet Explorer, onde você terá que fazer isso à mão:
var resizeEvent = window.document.createEvent('UIEvents');
resizeEvent.initUIEvent('resize', true, false, window, 0);
window.dispatchEvent(resizeEvent);
O jQuery possui o trigger
método , que funciona assim:
$(window).trigger('resize');
E tem a ressalva:
Embora .trigger () simule uma ativação de evento, completa com um objeto de evento sintetizado, ele não replica perfeitamente um evento que ocorre naturalmente.
Você também pode simular eventos em um elemento específico ...
function simulateClick(id) {
var event = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true
});
var elem = document.getElementById(id);
return elem.dispatchEvent(event);
}
fonte
trigger
realmente não aciona o evento "redimensionar" nativo. Ele aciona apenas ouvintes de eventos que foram adicionados usando o jQuery. No meu caso, uma biblioteca de terceiros estava ouvindo diretamente o evento "redimensionar" nativo e esta é a solução que funcionou para mim.window.fireEvent
)Com o jQuery, você pode tentar chamar o trigger :
fonte
window.dispatchEvent(new Event('resize'));
fezUm JS puro que também funciona no IE (do comentário do @Manfred )
Ou para angular:
fonte
Do not use this method anymore as it is deprecated.
os documentos createEvent dizem "Muitos métodos usados com createEvent, como initCustomEvent, estão obsoletos. Use construtores de eventos ." Esta página parece promissora para eventos da interface do usuário.new Event()
método. Eu acho que, como um truque contra navegadores mais antigos, você poderia fazer algo assimif (Event.prototype.initEvent) { /* deprecated method */ } else { /* current method */ }
. Onde o método atual é a resposta do avetisk .Combinando as respostas de pomber e avetisk para cobrir todos os navegadores e não causar avisos:
fonte
Na verdade, não consegui fazer isso funcionar com nenhuma das soluções acima. Depois que vinculei o evento ao jQuery, ele funcionou bem como abaixo:
fonte
somente
é o que eu uso ... a menos que eu entenda mal o que você está pedindo.
fonte
Resposta com RxJS
Diga como algo em Angular
Se a assinatura manual desejar (ou não angular)
Como meu valor inicial startWith pode estar incorreto (envio para correção)
Em dizer angular (eu poderia ..)
fonte
Eu acredito que isso deve funcionar para todos os navegadores:
fonte
Você pode fazer isso com esta biblioteca. https://github.com/itmor/events-js
fonte
window.resizeBy()
acionará o evento onresize da janela. Isso funciona em Javascript ou VBScript .window.resizeBy(xDelta, yDelta)
chamado gostariawindow.resizeBy(-200, -200)
de reduzir a página 200 px por 200 px.fonte