我正在将div滚动效果动画与音频同步,当音频暂停时,我将element.style.animation属性设置为'none'时,同步工作正常。问题是当音频暂停时,我尝试暂停动画。当我暂停并播放多次时,动画不再与音频同步(动画太高级)。
//This is the audio element
const pupHymn = document.querySelector(".pup-hymn");
//This is the container div of the lyrics
const hymnLyrics = document.querySelector(".lyrics");
const init = () => {
pupHymn.volume = 0.3;
//Sync when playing manually
pupHymn.addEventListener('play', () => {
audioTime = pupHymn.currentTime;
playbackRate = pupHymn.playbackRate;
hymnLyrics.style.animation = `scroll-effect ${160/playbackRate}s ${(12-audioTime)/playbackRate}s forwards running`;
);
pupHymn.addEventListener('pause', () => {
hymnLyrics.style.animation = 'none';
});
//This works fine.
pupHymn.addEventListener('pause', () => {
hymnLyrics.style.animation = 'none'; });
}
但是当我暂停animationPlayState时,当我暂停并播放多次时,它将无法正确同步。
pupHymn.addEventListener('pause', () => {
hymnLyrics.style.animationPlayState = 'paused'; });
我已经尝试过记录我的div的animation属性,当音频播放时,即使延迟仍然是一个正值,动画已经开始了。
1条答案
按热度按时间hsgswve41#
这里最可靠的方法可能是通过Web Animation API,它允许你以相对较高的精度管理动画的当前时间。你可以挂钩到
<audio>
元素上的一些事件,并将它的.currentTime
Map到Animation
的.currentTime
(注意前者是以秒为单位,而后者是以毫秒为单位)。