.delay() и .setTimeout()
Согласно документу jQuery на .delay()
,
Метод .delay() лучше всего подходит для задержки между jQuery в очереди последствия. Поскольку он ограничен - он, например, не предлагает способ отменить задержку..delay() не является заменой для родного JavaScript setTimeout, которая может быть более подходящей для определенного использования случаев.
Разве кто-то может раскрыть это? Когда более целесообразно использовать .delay()
, и когда лучше использовать .setTimeout()
?
Ответы
Ответ 1
Я думаю, что то, что вы опубликовали, действительно объясняет.
Используйте .delay()
для эффектов jQuery, включая анимацию.
setTimeout()
лучше всего использовать для всего остального. Например, когда вам нужно инициировать событие в определенное истекшее время.
Ответ 2
Насколько я понимаю, .delay()
предназначен специально для добавления задержки между методами в заданной очереди jQuery. Например, если вы хотите пометить изображение в поле зрения в течение 1 секунды, сделайте его видимым в течение 5 секунд, а затем потратите еще одну секунду, чтобы снова исчезнуть из вида, вы можете сделать следующее:
$('#image').fadeIn(1000).delay(5000).fadeOut(1000);
В этом случае .delay()
более интуитивно понятен для использования, поскольку он специально предназначен для задержки событий в заданной очереди jQuery. setImeout()
, с другой стороны, является родным методом JavaScript, который явно не предназначен для строки очереди. Если вы хотите, чтобы окно предупреждения появлялось через 1 секунду после нажатия кнопки, вы можете сделать следующее:
function delayAlert() {
var x = setTimeout("alert('5 seconds later!')", 5000);
}
<input type="submit" value="Delay!" onclick="delayAlert();" />
Ответ 3
.delay()
в основном используется для объединения эффектов анимации с паузами между ними.
Как упоминается в документах, отменить задержку невозможно. В случае, если вы можете отменить задержку, вместо этого следует использовать setTimeout()
, чтобы вы могли отменить его с помощью clearTimeout()
Ответ 4
Вы можете использовать delay
с анимацией, например:
$('.message').delay(5000).fadeOut();
Вы также можете использовать timeOut
для задержки начала анимации, например:
window.setTimeout(function(){
$('.message').fadeOut();
}, 5000);
Как вы видите, проще использовать delay
, чем setTimeout
с анимацией.
Вы можете отложить почти все с помощью setTimeout
, но вы можете откладывать анимацию только с помощью delay
. Методы, которые не являются анимацией, не подвержены влиянию delay
, поэтому это не подождало бы некоторое время, прежде чем скрыть элемент, он сразу скроет его:
$('.message').delay(5000).hide();
Ответ 5
Другой побочный эффект delay(): он, по-видимому, отключает возможность скрыть (или fadeOut и т.д.) отсрочку объектива до истечения задержки.
Например, я установил следующий код (возможно, разработчик stackoverflow распознает имена css...), чтобы скрыть "div":
$j(document).ready(function(){
var $messageDiv = $j("<div>").addClass('fading_message')
.text("my alert message here").hide();
var $closeSpan = $j("<span>").addClass('notify_close').text("x");
$closeSpan.click(function() {$j(this).parent().slideUp(400);});
$messageDiv.append($closeSpan);
$j('.content_wrapper_div').prepend($messageDiv);
$messageDiv.fadeTo(500, .9).delay(5000).fadeTo(800,0);
});
Нажатие "x", которое в промежутке (в "div" ), отключило функцию щелчка (я тестировал с предупреждением там), но div не сдвигалUp, как указано. Однако, если я заменю последнюю строку следующим:
$messageDiv.fadeTo(500, .9);
.. тогда это действительно сработало - когда я щелкнул "x", окружающий div slideUp и и прочь. Кажется, что фоновый запуск функции "delay()" в $messageDiv "заблокировал" этот объект, так что отдельный механизм, пытающийся закрыть его, не смог бы сделать это до тех пор, пока не будет выполнена задержка.