Я использую JQuery как таковой:
$(window).resize(function() { ... });
Однако, похоже, что если человек вручную изменяет размеры своих окон браузера, перетаскивая край окна, чтобы сделать его больше / меньше, .resize
событие выше запускается несколько раз.
Вопрос: Как вызвать функцию ПОСЛЕ изменения размера окна браузера (чтобы событие срабатывало только один раз)?
javascript
jquery
Сара
источник
источник
Ответы:
Вот модификация решения CMS, которая может быть вызвана в нескольких местах в вашем коде:
Использование:
Решение CMS хорошо, если вы вызываете его только один раз, но если вы вызываете его несколько раз, например, если разные части вашего кода настраивают отдельные обратные вызовы для изменения размера окна, то он потерпит неудачу, потому что они совместно используют
timer
переменную.В этой модификации вы предоставляете уникальный идентификатор для каждого обратного вызова, и эти уникальные идентификаторы используются для разделения всех событий тайм-аута.
источник
Я предпочитаю создать событие:
Вот как вы его создаете:
Это может быть где-то в глобальном файле JavaScript.
источник
Я использую следующую функцию для отсрочки повторных действий, она будет работать для вашего случая:
Использование:
Функция обратного вызова, переданная ей, будет выполняться только в том случае, если по истечении указанного промежутка времени был сделан последний вызов delay, в противном случае таймер будет сброшен, я считаю это полезным для других целей, таких как обнаружение того, когда пользователь прекратил печатать, и т. Д. ..
источник
$(window).resize
), потому что они все будут совместно использоватьtimer
переменную. Смотрите мой ответ ниже для предлагаемого решения.Если у вас установлен Underscore.js, вы можете:
источник
Некоторые из ранее упомянутых решений не работают для меня, хотя они имеют более общее использование. В качестве альтернативы я нашел этот, который сделал работу по изменению размера окна:
источник
Большое спасибо Дэвиду Уолшу, вот ванильная версия подчеркивания.
Код:
Простое использование:
Ссылка: http://davidwalsh.name/javascript-debounce-function
источник
На самом деле, как я знаю, вы не можете выполнять некоторые действия именно тогда, когда изменение размера отключено, просто потому, что вы не знаете действий будущего пользователя. Но вы можете предположить, что прошло время между двумя событиями изменения размера, поэтому, если вы ждете немного больше, чем это время, и изменение не производится, вы можете вызвать свою функцию.
Идея в том, что мы используем
setTimeout
его и его идентификатор, чтобы сохранить или удалить его. Например, мы знаем, что время между двумя событиями изменения размера составляет 500 мс, поэтому мы будем ждать 750 мс.источник
Объявите глобально задержанный слушатель:
А ниже используйте слушателей
resized
события как хотите:источник
Меня устраивает. Смотрите это решение - https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/
источник
Простой плагин jQuery для отложенного изменения размера окна.
СИНТАКСИС:
Добавить новую функцию для изменения размера события
Удалить функцию (объявив ее идентификатор), добавленную ранее
Удалить все функции
ИСПОЛЬЗОВАНИЕ:
ВЫХОД ИСПОЛЬЗОВАНИЯ:
PLUGIN:
источник
Предполагая, что курсор мыши должен вернуться к документу после изменения размера окна, мы можем создать поведение, похожее на обратный вызов, с событием onmouseover. Не забывайте, что это решение может не работать для сенсорных экранов, как ожидалось.
источник
Это то, что я реализовал:
$ (window) .resize (function () {setTimeout (someFunction, 500);});
мы можем очистить setTimeout, если ожидаем, что изменение размера произойдет меньше, чем
500ms
Удачи...
источник