是否可以使用事件侦听器而不是间隔来检查变量是否为特定值?

时间:2014-02-15 15:19:23

标签: javascript jquery html

目前,我正在使用间隔来查明我游戏的介绍性音乐是否已经完成。

 Musictimeout = setInterval(function () {
                if (Initialmusic.currentTime > 313) {
                    Loopingmusic.play();
                    Loopingmusic = true;
                    clearInterval(Musictimeout);
                }
 }, 10);

但是,这会让游戏过程变得非常缓慢,直到间隔被清除。在这种情况下,我可以使用eventlisteners而不是间隔吗?

1 个答案:

答案 0 :(得分:2)

在回答您的主要问题时,没有通用的内置事件监听器,当javascript中的变量值发生变化时,它将触发。

但是,如果您的变量与时间相关(名为currentTime的属性听起来可能是这样的话),那么您可以使用巧妙设置setTimeout()来确切知道何时检查它的值而不是试着检查你现在正在做的每10毫秒。我们必须更多地了解你正在尝试做什么,以及确切地知道什么更好的Initialmusic.currentTime是什么。例如,如果你想要要知道播放中的特定点何时被击中,您应该能够注册开始/停止事件并保持自己的计时器,这应该告诉您大约何时达到所需的播放时间。

如果您只是等到音频完成,那么您可以只注册音频事件,直到它结束为"ended"事件。有关媒体事件,请参阅here

此外,仅对于现代浏览器,如果您控制Initialmusic.currentTime的创建,则可以定义一个setter函数,该函数会在其值发生更改时触发通知。请参阅此代码示例:https://gist.github.com/eligrey/384583。我不知道这种类型的解决方案是否适用于音频主机对象(我猜它可能不会)。您必须在多个现代浏览器中尝试查看。