Używam JQuery jako takiego:
$(window).resize(function() { ... });
Wydaje się jednak, że jeśli dana osoba ręcznie zmieni rozmiar okien przeglądarki, przeciągając krawędź okna, aby ją powiększyć / zmniejszyć, .resize
powyższe zdarzenie zostanie uruchomione wielokrotnie.
Pytanie: Jak wywołać funkcję PO zakończeniu zmiany rozmiaru okna przeglądarki (aby zdarzenie było uruchamiane tylko raz)?
javascript
jquery
Sarah
źródło
źródło
Odpowiedzi:
Oto modyfikacja rozwiązania CMS, którą można wywołać w wielu miejscach w kodzie:
Stosowanie:
Rozwiązanie CMS jest w porządku, jeśli wywołujesz go tylko raz, ale jeśli wywołujesz go wiele razy, np. Jeśli różne części kodu konfigurują osobne wywołania zwrotne do zmiany rozmiaru okna, to nie powiedzie się, ponieważ współużytkują
timer
zmienną.Dzięki tej modyfikacji dostarczasz unikalny identyfikator dla każdego wywołania zwrotnego, a te unikalne identyfikatory służą do oddzielenia wszystkich zdarzeń przekroczenia limitu czasu.
źródło
Wolę stworzyć wydarzenie:
Oto jak go utworzysz:
Możesz mieć to gdzieś w globalnym pliku javascript.
źródło
Używam następującej funkcji do opóźniania powtarzających się działań, zadziała w twoim przypadku:
Stosowanie:
Przekazana do niego funkcja oddzwaniania zostanie wykonana tylko wtedy, gdy ostatnie wezwanie do opóźnienia zostanie wykonane po upływie określonego czasu, w przeciwnym razie timer zostanie zresetowany, uważam to za przydatne do innych celów, takich jak wykrywanie, kiedy użytkownik przestał pisać itp. ..
źródło
$(window).resize
), ponieważ wszystkie one współużytkujątimer
zmienną. Zobacz moją odpowiedź poniżej dla proponowanego rozwiązania.Jeśli masz zainstalowany plik Underscore.js, możesz:
źródło
Niektóre z wcześniej wymienionych rozwiązań nie działały dla mnie, mimo że mają bardziej ogólne zastosowanie. Alternatywnie znalazłem ten, który wykonał zadanie przy zmianie rozmiaru okna:
źródło
Ogromne podziękowania dla Davida Walsha, oto waniliowa wersja podkreślenia podkreślenia.
Kod:
Proste użycie:
Patrz: http://davidwalsh.name/javascript-debounce-function
źródło
W rzeczywistości, jak wiem, nie możesz wykonywać niektórych akcji dokładnie wtedy, gdy zmiana rozmiaru jest wyłączona, po prostu dlatego, że nie znasz działań przyszłego użytkownika. Możesz jednak założyć, że czas minął między dwoma zdarzeniami zmiany rozmiaru, więc jeśli poczekasz trochę dłużej niż ten czas i nie zostanie wykonana zmiana rozmiaru, możesz wywołać swoją funkcję.
Chodzi o to, że używamy
setTimeout
i jest to identyfikator, aby go zapisać lub usunąć. Na przykład wiemy, że czas między dwoma zdarzeniami zmiany rozmiaru wynosi 500 ms, dlatego będziemy czekać 750 ms.źródło
Zadeklaruj globalnie opóźniony słuchacz:
A poniżej używaj detektorów do
resized
organizowania wydarzeń, jak chcesz:źródło
Mi to pasuje. Zobacz to rozwiązanie - https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/
źródło
Prosta wtyczka jQuery do opóźnionego zdarzenia zmiany rozmiaru okna.
SKŁADNIA:
Dodaj nową funkcję, aby zmienić rozmiar zdarzenia
Usuń funkcję (deklarując jej identyfikator) dodaną wcześniej
Usuń wszystkie funkcje
STOSOWANIE:
WYDAJNOŚĆ UŻYCIA:
PODŁĄCZ:
źródło
Zakładając, że kursor myszy powróci do dokumentu po zmianie rozmiaru okna, możemy stworzyć zachowanie przypominające wywołanie zwrotne ze zdarzeniem onmouseover. Nie zapominaj, że to rozwiązanie może nie działać w przypadku ekranów dotykowych zgodnie z oczekiwaniami.
źródło
Oto co zaimplementowałem:
$ (window) .resize (function () {setTimeout (someFunction, 500);});
możemy wyczyścić setTimeout, jeśli spodziewamy się, że zmiana rozmiaru nastąpi mniej niż
500ms
Powodzenia...
źródło