Tam, gdzie to możliwe, wolę wywołać funkcję niż wywołać zdarzenie. Działa to dobrze, jeśli masz kontrolę nad kodem, który chcesz uruchomić, ale poniżej znajdziesz przypadki, w których nie masz kodu.
window.onresize = doALoadOfStuff;
function doALoadOfStuff() {
//do a load of stuff
}
W tym przykładzie możesz wywołać doALoadOfStuff
funkcję bez wywoływania zdarzenia.
W nowoczesnych przeglądarkach możesz wywołać zdarzenie, używając:
window.dispatchEvent(new Event('resize'));
To nie działa w Internet Explorerze, gdzie będziesz musiał zrobić długą rękę:
var resizeEvent = window.document.createEvent('UIEvents');
resizeEvent.initUIEvent('resize', true, false, window, 0);
window.dispatchEvent(resizeEvent);
jQuery ma trigger
metodę , która działa w następujący sposób:
$(window).trigger('resize');
I ma zastrzeżenie:
Chociaż .trigger () symuluje aktywację zdarzenia wraz ze zsyntetyzowanym obiektem zdarzenia, nie doskonale replikuje naturalnie występującego zdarzenia.
Możesz także symulować zdarzenia dotyczące określonego elementu ...
function simulateClick(id) {
var event = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true
});
var elem = document.getElementById(id);
return elem.dispatchEvent(event);
}
źródło
trigger
nie wyzwala natywnego zdarzenia „resize”. Uruchamia tylko detektory zdarzeń, które zostały dodane przy użyciu jQuery. W moim przypadku biblioteka innej firmy nasłuchiwała bezpośrednio natywnego zdarzenia „zmiany rozmiaru” i to rozwiązanie działało dla mnie.window.fireEvent
)Za pomocą jQuery możesz spróbować wywołać wyzwalacz :
źródło
window.dispatchEvent(new Event('resize'));
nieCzysty JS, który działa również w IE (od komentarza @Manfred )
Lub kątowe:
źródło
Do not use this method anymore as it is deprecated.
Dokumenty createEvent mówią „Wiele metod używanych z createEvent, takich jak initCustomEvent, jest przestarzałych. Zamiast tego należy używać konstruktorów zdarzeń .” Ta strona wygląda obiecująco na wydarzenia związane z interfejsem użytkownika.new Event()
metody. Myślę, że jako hack na starszych przeglądarkach możesz zrobić coś takiegoif (Event.prototype.initEvent) { /* deprecated method */ } else { /* current method */ }
. Gdzie obecna metoda jest odpowiedzią avetisk .Łącząc odpowiedzi pomber i avetisk, aby objąć wszystkie przeglądarki i nie powodować ostrzeżeń:
źródło
W rzeczywistości nie byłem w stanie zmusić tego do pracy z żadnym z powyższych rozwiązań. Po powiązaniu wydarzenia z jQuery działało dobrze, jak poniżej:
źródło
właśnie
to jest to, czego używam ... chyba że źle zrozumiem, o co prosisz.
źródło
Odpowiedź z RxJS
Powiedz jak coś w Angular
Jeśli wymagana jest subskrypcja ręczna (lub nie kątowa)
Ponieważ mój początkowy początek z wartością może być niepoprawny (wysłanie do korekty)
Mówiąc Angular (mógłbym ...)
źródło
Uważam, że powinno to działać dla wszystkich przeglądarek:
źródło
Możesz to zrobić za pomocą tej biblioteki. https://github.com/itmor/events-js
źródło
window.resizeBy()
wywoła zdarzenie onresize okna. Działa to zarówno w JavaScript, jak i VBScript .window.resizeBy(xDelta, yDelta)
nazywa się jakwindow.resizeBy(-200, -200)
zmniejszyć stronę 200 na 200 pikseli.źródło