2017-05-05 1 views
-1

Puis-je définir les deux paramètres de setInterval à partir de deux autres fonctions en javascript?Puis-je définir les deux paramètres de setInterval à partir de deux autres fonctions en javascript?

Au lieu de cela ...

myVar = setInterval(function1, 8000); 

Je voudrais faire ... où fonction2 définit les millisecondes.

myVar = setInterval(function1, function2); 

L'exemple ci-dessous est ce que je voudrais faire. Cela ne fonctionne pas. Retourne un "bégaiement" sur la page.

Exemple # 1 https://thehighcountrydiscgolfclub.com/friends/jiesen/example01.html

Toute orientation est appréciée. Même si c'est une meilleure façon de poser cette question ...

Voici le html pour le groupe radio, le menu de sélection et le bouton.

<input type="radio" value="chime-04" name="rad" onclick="soundSelect(this.value);" checked="checked">Chime 
<input type="radio" value="bell-04" name="rad" onclick="soundSelect(this.value);">Bell 
<input type="radio" value="bleep-04" name="rad" onclick="soundSelect(this.value);">Bleep 
<br> 
<audio id="audio"> 
    <source src="" type="audio/ogg"> 
    <source src="" type="audio/wav"> 
    <source src="chime-04.mp3" type="audio/mpeg" id="sound"> 
</audio> 
<br> 
<select id="space"> 
    <option value="4000">0:04 Seconds</option> 
    <option value="6000">0:06 Seconds</option> 
    <option value="8000">0:08 Seconds</option>   
</select> 
<br> 
<button type="button" id="toggle" onclick="runSoundInterval()">Play/Pause</button> 


function soundSelect(val){ 
    var audio = document.getElementById("audio"); 
    var aud = document.getElementById("sound"); 
    aud.src=val+".mp3"; 
    audio.load(); 
    audio.play(); 
} 
function intervalSelect(val){ 
    var space = document.getElementById("space"); 
    var value = space.options[space.selectedIndex].value; 
} 
function runSoundInterval() { 
    myVar = setInterval(soundSelect, intervalSelect); 
} 

Ici, j'ai essayé de condenser les trois fonctions en une seule. J'aime ça. Les boutons radio émettent un son et alertent la bonne valeur de menu de sélection sélectionnée mais ne répètent pas le son. Le bouton ne renvoie que l'alerte, mais pas de son et pas de répétition. Notez que j'essaie de tirer les millisecondes setInterval de "valeur". Ajout de l'alerte pour prouver que la valeur correcte est sélectionnée dans le menu de sélection. L'alerte n'est qu'un test et devra être supprimée à l'avenir. Ne fonctionne pas complètement.

Exemple # 2 https://thehighcountrydiscgolfclub.com/friends/jiesen/example02.html

function soundSelect(val){ 
var space = document.getElementById("space"); 
    var value = space.options[space.selectedIndex].value; 
    alert(value); 
var audio = document.getElementById("audio"); 
    var aud = document.getElementById("sound"); 
    aud.src=val+".mp3"; 
    audio.load(); 
    audio.play(); 
} 
window.setInterval(soundSelect, value); 
+2

Le second argument est censé être un nombre. Il peut s'agir de n'importe quelle expression qui renvoie un nombre, y compris une fonction * call *, mais pas une fonction * reference *. Mais même si vous appelez votre fonction 'intervalSelect()', elle ne renvoie pas de valeur, et ne fait rien d'utile car elle affecte simplement des valeurs aux variables * locales * qui ne sont pas utilisées. En aparté, vous pouvez obtenir la valeur actuelle de votre élément select avec 'space.value', pas besoin d'aller via la collection' .options'. – nnnnnn

+0

@ nnnnnn- IIRC, l'itinéraire * selectedIndex * était requis pour certaines versions anciennes de Netscape Navigator, étonnant que ces memes persistent. – RobG

+0

@RobG - Oui, je me souviens de le faire dans IE à propos de la version 4. – nnnnnn

Répondre

3

Si fonction2 retourne les secondes, il suffit d'utiliser la valeur de retour:

myVar = setInterval(function1, function2()); 
+0

Cette apostrophe doit vous avoir vraiment énervé. – FrankerZ