2017-07-13 18 views
0

こんにちは、私はsetIntervalをもう一度有効にすることはできませんし、私の"mute"ボタンのクラスは変更されません。私のコードクリックして無効にして、setIntervalを有効にする

HTML:

<a href="#" class="MuteOff">button</a> 

ボタン:

$('.MuteOn').on('click tap touch', function() { 
$('.MuteOn').removeClass("MuteOn").addClass("MuteOff"); //the class changes 
clearInterval(MyTimer); 
}); 

$('.MuteOff').on('click tap touch', function() { 
$('.MuteOff').removeClass("MuteOff").addClass("MuteOn"); //the class doesn't change back to MuteOn 
MyTimer = setInterval(Checker, 100); //doesn't work 
}); 

は機能:

var MyTimer = setInterval(Checker, 100); 
function Checker(){ 

if ($("body").hasClass("fp-viewing-1")) { 
      audio1.play(); 
      } 
      else { 
    audio1.pause(); 
    audio1.currentTime = 0; 
      } 

if ($("body").hasClass("fp-viewing-2")) { 
      audio2.play(); 
      } 
      else { 
    audio2.pause(); 
    audio2.currentTime = 0; 
      } 

if ($("body").hasClass("fp-viewing-3")) { 
      audio3.play(); 
      } 
      else { 
    audio3.pause(); 
    audio3.currentTime = 0; 
      } 
} 

+0

私は、ミュートボタンとするときクリック用の共通クラスを追加MuteOn/MuteOffクラスを確認する(またはブール値を使用)し、あなたが何をする必要があるかだろう。ロード時にMuteOffのクリックが機能しない – Huangism

+0

'(" .MuteOff ")。on(...)'のようなイベントバインディングがヒットした場合、そのセレクタを満たす要素にイベントをアタッチします。しかし、このコード行がヒットしたときのように、このクラスを持つアイテムはないようです。このクラスは、ボタンがクリックされたときに後で追加されます。あなたのイベントは大丈夫ですが、何も付いていません。あなたは@Huangismのような共通のクラスを使うことができますが、[Event Delegation](https://stackoverflow.com/questions/8110934/direct-vs-delegated-jquery-on)で勉強することは間違いありません。 。 – Santi

答えて

2

私はミュートボタン用の共通クラスを追加し、クリックされたとき、MuteOn/MuteOffクラスを確認する(またはブール値を使用)する任意の助けてくれてありがとうあなたがする必要があることをしてください。

MuteOffの要素が読み込まれていないため、MuteOffのクリックが機能しません。 @Santiが述べたように

設定MuteOn /オフマークアップで

HTML

<a href="#" class="mute-button MuteOff">button</a> 

JS

$('.mute-button').on('click tap touch', function() { 
    var $this = $(this); 

    if($this.hasClass("MuteOn")) { 
     // do mute off stuff 
     $this.removeClass("MuteOn").addClass("MuteOff"); 
     clearInterval(MyTimer); 
    } else { 
     // do mute on stuff 
     $this.removeClass("MuteOff").addClass("MuteOn"); 
     MyTimer = setInterval(Checker, 100); 
    } 
}); 

また、イベントの委任方法を使用することができますが、上記の方が簡単な場合があります今理解する。

Direct vs. Delegated - jQuery .on()

+0

これはclearIntervalを破るように見えますが、クラスの変更は今では機能します –

+0

クリックセクションのjqueryの前にMyTimerを定義しましたか?コードは私が1つのハンドラを使用している以外はあなたのものと同じです – Huangism

+0

私の間違い私は関数と間隔の上にボタンコードを入れました –

関連する問題