В моем скрипте в какой-то момент функция 'showwords', которая показывает случайные слова из массива, "пауза" или тайм-аут в течение одной секунды. В этой паузе я хочу, чтобы мой белый ящик отображался - точно в течение одной секунды. Я сделал это, и это "хорошо", но я хочу, чтобы это было быстрее. Есть ли более умный способ сделать это?
setTimeout(showswords, 1000);
$("#whitebox").fadeIn("fast").delay(1000).fadeOut("fast");
Что вы на самом деле хотите сделать здесь? #whitebox
в #whitebox
и через некоторое время снова исчезают #whitebox
? setTimeout
может быть ненужным в зависимости от того, что вы пытаетесь сделать. Однако...
Если вы играете с интервалом времени ожидания и продолжительностью анимации, вы должны быть способны достичь того, чего хотите; в основном setTimeout
позволит вам отсрочить вызов функции (например, showswords()
) до тех пор, пока не пройдет определенный промежуток времени (в вашем примере 1000 мс).
Когда showswords()
выполняется, вы можете затем исчезать в поле #whitebox
с задержкой, какой бы длинной вы ни хотели, метод .fadeIn() принимает аргумент, duration
с которой вы можете определить, как долго будет выполняться анимация, вместо этого времени прохождения в качестве части опций метода, вы можете указать скорость в миллисекундах, чтобы:
setTimeout(function() {
$("#whitebox")
.fadeIn(400) // duration, in ms
.promise
.done(function(){
$("#whitebox").fadeOut(400); // duration, in ms
});
}), 1000);
... будет исчезать в #whitebox
через 400 мс, и когда анимация будет завершена, она погаснет обратно за такой же промежуток времени. Это будет выполняться примерно через одну секунду после выполнения команды setTimeout
.
Вместо использования обещаний вы можете предоставить второй аргумент функции .fadeIn()
и использовать его как метод "сделанного" обратного вызова.
Вы можете указать скорость в миллисекундах эффектов fadein/fadeout. Для более быстрого/плавного эффекта попробуйте выполнить следующее:
$("#whitebox").fadeIn(350, function(){
$(this).delay(500).fadeOut(350);
});