Jak wywołać funkcję po ZAKOŃCZENIU zmiany rozmiaru okien przeglądarki?
Próbuję to zrobić w ten sposób, ale mam problemy. Używam funkcji zdarzenia JQuery Resize:
$(window).resize(function() {
... // how to call only once the browser has FINISHED resizing?
});
Jednak ta funkcja jest wywoływana w sposób ciągły, jeśli użytkownik ręcznie zmienia rozmiar okna przeglądarki. Co oznacza, że może wywołać tę funkcję dziesiątki razy w krótkim odstępie czasu.
Jak mogę wywołać funkcję zmiany rozmiaru tylko raz (po zakończeniu zmiany rozmiaru okna przeglądarki)?
AKTUALIZACJA
Również bez konieczności używania zmiennej globalnej.
javascript
jquery
html
nickb
źródło
źródło
Odpowiedzi:
Oto przykład wykorzystujący instrukcje jh
Możesz przechowywać identyfikator odwołania do dowolnego setInterval lub setTimeout. Lubię to:
źródło
Odbicie .
Uwaga, możesz użyć tej metody do wszystkiego, co chcesz usunąć (kluczowe zdarzenia itp.).
Dostosuj parametr limitu czasu, aby uzyskać optymalny pożądany efekt.
źródło
func
, z wewnętrznymthis
wskaźnikiem wskazującym nascope
izArray.prototype.slice.call(args)
(co generuje standardową tablicę zargs
) jako argumentyMożesz używać
setTimeout()
iwclearTimeout()
połączeniu zjQuery.data
:Aktualizacja
Napisałem rozszerzenie, aby ulepszyć domyślny
on
(&bind
) -event-handler jQuery . Dołącza funkcję obsługi zdarzenia dla co najmniej jednego zdarzenia do wybranych elementów, jeśli zdarzenie nie zostało wyzwolone dla danego interwału. Jest to przydatne, jeśli chcesz uruchomić wywołanie zwrotne dopiero po opóźnieniu, takim jak zdarzenie zmiany rozmiaru, lub w innym przypadku. https://github.com/yckart/jquery.unevent.jsUżyj go jak każdego innego programu obsługi
on
lubbind
-event, z wyjątkiem tego, że możesz przekazać dodatkowy parametr jako ostatni:http://jsfiddle.net/ARTsinn/EqqHx/
źródło
źródło
Aby dodać do powyższego, często występują niepożądane zdarzenia zmiany rozmiaru z powodu pojawiających się i znikających pasków przewijania, oto kod, aby tego uniknąć:
zobacz jsfiddle
źródło
Underscore.js ma kilka świetnych metod do tego zadania:
throttle
idebounce
. Nawet jeśli nie używasz podkreślenia, spójrz na źródło tych funkcji. Oto przykład:źródło
To jest moje podejście:
Odbiornik zdarzeń zmiany rozmiaru przechwytuje wszystkie przychodzące wywołania zmiany rozmiaru, tworzy funkcję limitu czasu dla każdego z nich i zapisuje identyfikator limitu czasu wraz z liczbą iteracyjną poprzedzoną
'id-'
(aby można było użyć jako klucz tablicy) wtos
-array.za każdym razem, gdy wyzwalany jest limit czasu, wywołuje funkcję -funkcję
fn
, która sprawdza, czy był to ostatni limit czasu wtos
tablicy (funkcja fn usuwa każdy wykonany limit czasu). jeśli prawda (=if(len-1 == 0)
), zmiana rozmiaru jest zakończona.źródło
jQuery udostępnia
off
metodę usuwania programu obsługi zdarzeńźródło