Два основных способа создания циклов пользовательского интерфейса в JavaScript в браузерах: setTimeout
и setInterval
:
setTimeout
вызовет функцию через указанный интервал в миллисекундах. Время не обязательно точное, и вы не можете запланировать что-то в течение 10 мс в браузерах. Он возвращает дескриптор, который можно использовать для отмены обратного вызова (если вы доберетесь до него до того, как это произойдет) через clearTimeout
. Чтобы сделать цикл, вы устанавливаете новый тайм-аут после завершения обработки предыдущего.
setInterval
будет вызывать функцию несколько раз через заданный интервал (также в миллисекундах, также с типичным минимумом 10 мс). Возвращает дескриптор, который можно использовать для остановки повторов с помощью clearInterval
. Вам не нужно начинать новый каждый раз, переводчик выполняет циклы за вас.
То, что вы выберете, зависит как от того, что вы пытаетесь сделать, так и от личных предпочтений. Обратите внимание, что интервалы в setInterval
отсчитываются от того, когда обратный вызов назывался , тогда как если вы запланируете новый setTimeout
в конце обработки обратного вызова, он, очевидно, будет запланирован вместо этого , Если ваша обработка занимает какое-то значительное время, разница может быть важной (но, опять же, то, что вы хотите, полностью зависит от решаемой вами проблемы).
Я думаю о "продолжительности", как о том, сколько времени потребуется для запуска эффекта целого , который будет лежать вне одного из них - это будет функцией вашего кода эффекта. Большинство эффектов, которые я видел, работают поэтапно (не знаю, как еще вы их сделаете) и выясняете, сколько шагов нужно предпринять, исходя из того, какую длительность вы им даете и какой максимальной детализации, по мнению автора, было необходимо. Например, переход от белого к черному может занять 255 шагов, если вы этого хотите, но это может быть слишком медленным (и мы оставим в стороне дискуссии об «смягчении», когда шаги корректируются в зависимости от того, как человеческий глаз и разум их воспринимают ). Вы можете сделать это за 10 шагов с шагом каждые 50 мс, если вам сказали, что это займет полсекунды, но вы можете сделать это за 20 шагов с тем же интервалом, если у вас была полная секунда, чтобы сделать это. И т.д.