切换选项卡时,jQuery .animate函数表现不正常

时间:2014-08-21 13:37:42

标签: javascript jquery html5 audio jquery-animate

上下文

我的网页背景中播放的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

2 个答案:

答案 0 :(得分:3)

我发现这是一个优化问题,' .animate'功能执行。当页面被隐藏时#39; - 您正在查看另一个标签 - jQuery将跳过动画步骤,因为观看者无法真正看到动画。这对于实际的动画很有用,但在这种情况下,当使用声音时,它会直接从1跳到0跳过它们之间的步骤。

我在API中找不到这个有点烦人的内容。

我目前的解决方案是创建自己的动画'用于降低递归setTimeout循环中的声音级别的功能。

答案 1 :(得分:0)

这样的事情?

$(id).animate({volume:0},1000);

从这篇文章。 html5-audio-playback-with-fade-in-and-fade-out