Краткое объяснение:хранения requestAnimationFrame
Я сделал requestAnimation, который в качестве альтернативы имеет 2 обратных вызовов в зависимости от счетчика;
один из обратных вызовов будет увеличивать счетчик, а другой уменьшит его (всегда зацикливаясь внутри определенного диапазона 0
// arr.length
).
Все работает, как не ожидается до остановки и перезапуска анимации,
это код, который активирует и должен Хранить requestAnimationFrame (click()
):
function start() {
if (!spiral) {
spiral = window.requestAnimationFrame(animation);
}
}
function click() {
if (spiral) {
var trackSpiral = spiral;
spiral = undefined;
window.cancelAnimationFrame(spiral);
} else {
spiral = trackSpiral;
/* (count > precedingCount || count == 0) ?
spiral = requestAnimationFrame(animation) :
spiral = requestAnimationFrame(animationReverse);*/
}
}
window.addEventListener('load', start)
window.addEventListener('click', click)
В качестве обходного пути я использовал precidingCount var
и в зависимости от того, будет ли он увеличиваться или нет, он может решить, какой запрос обратного вызова RequestAnimationFrame должен срабатывать;
Вопросы:
Может кто-нибудь объяснить, почему просто хранить и ссылаясь на var
назначенную requestAnimation не работает, как я ожидал?
Есть ли лучший шаблон для остановки-перезагрузки requestAnimation?
here's a working pen (чтобы увидеть выпуск строки комментариев от 180 до 182) _
'requestAnimationFrame' получает вас ровно один кадр. Это больше похоже на 'setTimeout', чем' setInterval'. Чтобы получить следующий, вы должны попросить его снова.Отмена только для редкого случая, когда вы хотите отменить его до его выполнения, который, как правило, составляет несколько десятков миллисекунд после запроса. –
Разве вы не должны сначала «cancelAnimationFrame (спираль)», только тогда 'spiral = undefined'? – raina77ow
@ raina77ow Я согласен; но он также будет работать наоборот .. – maioman