Как остановить / переопределить функцию JQuery TimeOut? - PullRequest
29 голосов
/ 05 апреля 2010

У меня есть небольшой фрагмент кода jquery, который отображает уведомление в верхней части экрана в ответ на действия пользователя на странице. Уведомление часто отображается после действий Ajax с динамическим содержимым внутри него.

Например:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast");
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000);

Уведомление работает хорошо, за исключением случаев, когда пользователь выполняет два или более действий в быстрой последовательности, и в этом случае функция TimeOut запутывается, а второе сообщение появляется в течение предыдущих 3000 миллисекунд.

Есть ли способ «убить» предыдущее уведомление, если выполняется новое действие. У меня нет проблем с действиями / селекторами, только функция TimeOut .... либо остановка, либо переопределение каким-либо образом. Или, может быть, есть лучшая альтернатива, чтобы сообщение задерживалось на экране в течение нескольких секунд, прежде чем исчезнуть?

Спасибо.

Ответы [ 4 ]

61 голосов
/ 05 апреля 2010

Сначала вы сохраняете возвращаемое значение для функции setTimeout:

// Set the timeout
var timeout = setTimeout(function()
    {
        // Your function here
    }, 2000);

Затем, когда вы будете готовы убить тайм-аут ... вы просто вызываете clearTimeout с сохраненным значением из предыдущего вызова на setTimeout.

// Then clearn the timeout
clearTimeout(timeout);
7 голосов
/ 05 апреля 2010

Вы можете использовать .stop ()

Остановить текущую анимацию на подобранных элементах.

6 голосов
/ 05 апреля 2010

jQuery 1.4 имеет встроенный метод для обработки задержек анимации, который вы можете сделать примерно так:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium");

А потом, когда вы захотите очистить очередь анимации, вы можете сделать:

$("#mini").stop(true);
0 голосов
/ 21 октября 2017

Это сбрасывает тайм-аут после запуска функции с задержкой 500 мс

var timeout = setTimeout(function(){

/* YOUR FUNCTION */

}, 500, function(){
   clearTimeout(timeout);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...