|
|
分三步处理:
一、需要加一个变量 movTimer 用来控制 setTimeout 的执行与暂停,可以放在 mov() 函数所在代码区域的头部:
var movTimer = null;
二、mov 函数改装一下:
var mov = () => {
if(last != null) spans[last].style.animation = '';
spans[idx].style.animation = 'move 2s';
last = idx;
idx += 1;
if(idx >= spans.length) idx = 0;
movTimer = MusicPlayer.paused ? clearTimeout(movTimer) : setTimeout(mov,2000);
};
//mov(); //这里的函数执行可以不要,将在音频监听事件中管控(保留也无妨)
三、音频监听事件中,各加入相应语句:
MusicPlayer.addEventListener('playing', () => {
tu.style.animationPlayState = 'running';
mov(); //运行 mov 函数
});
MusicPlayer.addEventListener('pause', () => {
tu.style.animationPlayState = 'paused';
clearTimeout(movTimer); //取消定时器
});
修改之后,预期的目的会达到:音乐暂停,文本动画会在执行完后暂停,而不是马上暂停,这是惯性问题,音乐重新播放,文本动画会接着上一个文字动画继续。
|
|