2017-07-06 2 views
1

Ich versuche, die Lautstärke eines mp3 in 1 zu verblassen, wenn der Körper die Klasse fp-viewing-0 hat Wie auch immer dies funktioniert nicht und das Volumen doesn ändere nicht, wie kann ich das beheben?Wenn Körper Klasse hat Fade im MP3-Sound sonst ausblenden

Code:

var audio0 = document.getElementById('audio-0'); 
audio0.volume = 0; 

setInterval(function(){ 
      if ($("body").hasClass("fp-viewing-0")) { 
      audio0.animate({volume: 1}, 1000); 
      } 

else { 
    audio0.animate({volume: 0}, 1000); 
      } 

}, 100); 

HTML

<audio id="audio-0" src="1.mp3" autoplay="autoplay"></audio> 

ich auch versucht habe:

$("#audio-0").prop("volume", 0); 


setInterval(function(){ 
      if ($("body").hasClass("fp-viewing-0")) { 
      $("#audio-0").animate({volume: 1}, 3000); 
      } 

else { 
    $("#audio-0").animate({volume: 0}, 3000); 
      } 

}, 100); 

Mit freundlichen Grüßen!

Antwort

1

Ich habe den jquery animate Teil zu einem von Hand gemachten Fade geändert. Dafür habe ich eine Überblendzeit und Schritte erstellt, um den Fade-Effekt zu manipulieren.

var audio0 = document.getElementById('audio-0'); 
audio0.volume = 0; 

if ($("body").hasClass("fp-viewing-0")) { 
    audio0.volume = 1; //max volume 
    var fadeTime = 1500; //in milliseconds 
    var steps = 150; //increasing makes the fade smoother 
    var stepTime = fadeTime/steps; 
    var audioDecrement = audio0.volume/steps; 

    var timer = setInterval(function(){ 
     audio0.volume -= audioDecrement; //fading out 

     if (audio0.volume <= 0.03){ //if its already inaudible stop it 
       audio0.volume = 0; 
       clearInterval(timer); //clearing the timer so that it doesn't keep getting called 
     } 
    }, stepTime); 
} 

Besser wäre all dies in einer Funktion zu setzen, die diese Werte ein faden entsprechend erhält, so dass es organisiert wird:

function fadeAudio(audio, fadeTime, steps){ 
    audio.volume = 1; //max 
    steps = steps || 150; //turning steps into an optional parameter that defaults to 150 
    var stepTime = fadeTime/steps; 
    var audioDecrement = audio.volume/steps; 

    var timer = setInterval(function(){ 
     audio.volume -= audioDecrement; 

     if (audio.volume <= 0.03){ //if its already inaudible stop it 
      audio.volume = 0; 
      clearInterval(timer); 
     } 
    }, stepTime); 
} 

der der Code viel machen würde kompakter und lesbar:

var audio0 = document.getElementById('audio-0'); 
audio0.volume = 0; 
if ($("body").hasClass("fp-viewing-0")) { 
    fadeAudio(audio0, 1500); 
} 
+0

Vielen Dank! Wie würde ich über die else-Anweisung gehen, wenn die if-Bedingung die Audiowiedergabe ausblendet? Was kann ich in die else-Bedingung setzen, um das Audio auszublenden? –

+0

@Neths Ich bin mir nicht sicher, ob ich deine Frage verstanden habe. Dieses "if" im letzten Block blendet den Ton aus, wenn Sie die 'fp-viewing-0' Klasse im' body' haben, sonst tut es nichts. Außerdem hat es vorher die Lautstärke = 0. Das Endergebnis ist also, dass der Ton ausgeblendet wird, wenn die Klasse existiert, sonst hört man nichts. Wenn Sie oben das 'audio0.volume = 0 'entfernen, wird es ausgeblendet, wenn die Klasse existiert, andernfalls wird das Audio wiedergegeben. – Isac