Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以使用事件监听器而不是间隔来检查变量是否为特定值?_Javascript_Jquery_Html - Fatal编程技术网

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

Javascript 是否可以使用事件监听器而不是间隔来检查变量是否为特定值?,javascript,jquery,html,Javascript,Jquery,Html,目前,我正在使用一段时间来确定我的游戏的开场音乐是否已经结束 Musictimeout = setInterval(function () { if (Initialmusic.currentTime > 313) { Loopingmusic.play(); Loopingmusic = true; clearInterval(Musi

目前,我正在使用一段时间来确定我的游戏的开场音乐是否已经结束

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

然而,这相当明显地降低了游戏的速度,直到间隔被清除。在这种情况下,我可以使用EventListener而不是interval吗?

在回答您的主要问题时,没有通用的内置事件侦听器会在javascript中的变量值更改时触发

但是,如果您的变量与时间相关(名为
currentTime
的属性听起来像是时间相关的,那么您可能可以使用一个巧妙的设置
setTimeout()
要知道什么时候检查它的值,而不是像你现在这样每10毫秒检查一次。我们必须知道更多关于你到底要做什么以及什么是
初始音乐的信息。currentTime
要知道什么是更好的建议。例如,如果你想知道播放中的某个特定点何时被点击,你应该uld能够注册开始/停止事件,只需保持您自己的计时器运行,当您到达所需的播放时间时,计时器将大致告知您

如果您只是在等待音频完成,那么您可以注册音频事件的结束时间,即
“end”
事件。有关媒体事件,请参阅


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

是的。但您要查找的是什么类型的事件?Lke单击、滚动等。该代码的可能重复确实不会造成太大的减速,尽管您的计时器运行得相当快。当您使用100毫秒甚至150毫秒的间隔时,感觉有多滞后?(事实上,我猜访问
currentTime
可能会很昂贵,这取决于“Initialmusic”是什么。)@Pointy Initialmusic是一个音频对象假设您使用html5
audio
元素,只需订阅它的
oneded
事件:它看起来像是一个HTML音频元素,而且因为它只需要曲目结束通知,所以可能更简单(好吧,在实际操作正确的浏览器中:)@尖刻-是的,我已经在我的答案中添加了这一点(第3段)正如我更多地注意到他们可能正在做的事情一样。我总是感到惊讶的是,人们问他们目前正在研究的解决方案方向,而不是实际描述真正的问题。当实际问题被隐藏起来时,他们错过了太多的想法。