2017-07-06 1 views
1

J'essaye de faire disparaître le volume d'un mp3 dans 1 si le corps a la classe fp-visualisation-0 Comment cela ne fonctionne pas et le volume doesn ne change pas comment puis-je résoudre ce problème?si le corps a la classe Fondu dans le son mp3 fondu

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> 

J'ai aussi essayé:

$("#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); 

Cordialement!

Répondre

1

J'ai changé la partie animée de jquery en un fondu fait à la main. Pour cela, j'ai créé un temps de fondu et les étapes comptent pour manipuler l'effet de fondu.

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); 
} 

Il serait préférable de placer tout cela dans une fonction qui reçoit ces valeurs un fane en conséquence afin qu'il soit organisé:

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); 
} 

qui rendrait votre code beaucoup plus compact et facile à lire:

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

Merci beaucoup! comment irais-je à propos de l'instruction else si la condition if fait disparaître l'audio dans ce que je peux mettre dans la condition else pour faire disparaître l'audio? –

+0

@Neths Je ne suis pas sûr d'avoir compris votre question. Ce 'if' dans le dernier bloc fane l'audio si vous avez la classe' fp-viewing-0' dans le 'body' sinon il ne fait rien. En outre, il a le 'volume = 0' précédemment. Donc, le résultat final est, il fane l'audio si la classe existe, sinon vous n'entendrez rien. Si vous supprimez le 'audio0.volume = 0' ci-dessus, il disparaît si la classe existe, sinon il conserve la lecture audio. – Isac