上下文
我的网页背景中播放的HTML音频具有淡出/淡入功能,使用jQuery .animate函数在淡出时将音量设置为0,并在淡入时将其设置为1。
我已实施网页可见性API:https://developer.mozilla.org/en-US/docs/Web/Guide/User_experience/Using_the_Page_Visibility_API
这用于检测用户是否切换标签。
目前,当标签从可见变为隐藏时,我会在音频上调用淡出功能,并且当从隐藏变为可见时调用淡入功能:
fadeOut(id){
$(id).animate({volume: 0}, 1000});
}
fadeIn(id){
$(id).animate({volume: 1}, 1000});
}
问题
当切换标签时,从可见变为隐藏,然后调用fadeOut函数,而不是慢慢地从第1卷调到0,它在1秒后直接变为0,但是当它从隐藏变为可见时,它会按预期执行,慢慢地从0变为1。我试过切换功能,似乎只有在从可见到隐藏时才会发生。这是jQuery .animate函数的实现功能吗?或者我错过了什么?
每个步骤的控制台日志输出
从隐藏到可见时:
“步骤时间:”0“vol:”0
“步骤时间:”42“vol:”0
“步骤时间:”44“vol:”0.025049273427930594
“step time:”51“vol:”0.026579017009366445
“步骤时间:”60“vol:”0.030591727271815305
...
“步骤时间:”1000“vol:”1
从可见到隐藏
“步骤时间:”1000“vol:”1
“步骤时间:”0“vol:”0
答案 0 :(得分:3)
我发现这是一个优化问题,' .animate'功能执行。当页面被隐藏时#39; - 您正在查看另一个标签 - jQuery将跳过动画步骤,因为观看者无法真正看到动画。这对于实际的动画很有用,但在这种情况下,当使用声音时,它会直接从1跳到0跳过它们之间的步骤。
我在API中找不到这个有点烦人的内容。
我目前的解决方案是创建自己的动画'用于降低递归setTimeout循环中的声音级别的功能。
答案 1 :(得分:0)