移除监听器类并不能停止与Jquery Javascript相关的声音事件

Removing a listener class doesn't stop a sound event associated Jquery Javascript

本文关键字:Javascript 事件 声音 Jquery 监听器 并不能      更新时间:2023-09-26

我在图像上悬停时播放声音(这已经工作得很好了),并希望包含一个按钮来关闭它,如果需要的话。不幸的是,我还没能使它工作。

我现在的代码是这样的:

用于创建声音

//a bunch of code to generate the audio that ends on
var mouseoversound = createsoundbite('mysound.mp3')

用于触发

  $(".play").mouseover(function() {
      mouseoversound.play();
    });

监听器元素

<%= image_tag "image.png", class:'logo-image play' %>

我认为禁用它的最简单的解决方案是删除类"监听"事件(即。'.play')在元素监听器中,所以我累了:

  $(".sound").click(function(){
    $(".logo-image").removeClass("play");
  });
//.sound is the class of the button that's intended to block it.

虽然后一个脚本确实成功地删除了类"播放"的声音保持播放每次我悬停在图像上。我错过了什么?难道声音不应该停止播放吗?

你认为还有其他解决办法吗?

欢呼

问题是事件处理程序绑定到元素。在绑定事件后删除类不会影响该绑定。要影响事件处理程序,可以调用off(),像这样:

$(".sound").click(function(){
    $(".logo-image").off('mouseover');
});

或者,如果您想根据类切换声音功能,您可以保持当前的逻辑并检查元素在mouseover处理程序中是否仍然具有类:

$(".logo-image").mouseover(function() {
    if ($(this).hasClass('play') {
        mouseoversound.play();
    }
});
$(".sound").click(function(){
    $(".logo-image").toggleClass("play");
});