Javascript 每次将元素推入阵列时播放音频声音
我有一个名为Javascript 每次将元素推入阵列时播放音频声音,javascript,algorithm,primes,Javascript,Algorithm,Primes,我有一个名为primeFactors的函数,我试图找到某个n数的除数,但同时,它们也必须是素数。从某种意义上说,这只是一个基本的算法 在这样做的同时,我还认为在语句在块中循环时播放音频声音会很有趣(只是为了好玩)。但是,声音只播放一次,即使有时结果是由3个因素组成的数组(例如[2,7,11])。在本例中,我希望在将每个元素推入阵列之前,声音播放三次。这是我的密码: function primeFact(n) { let factors = []; let divisor = 2;
primeFactors
的函数,我试图找到某个n
数的除数,但同时,它们也必须是素数。从某种意义上说,这只是一个基本的算法
在这样做的同时,我还认为在语句在块中循环时播放音频声音会很有趣(只是为了好玩)。但是,声音只播放一次,即使有时结果是由3个因素组成的数组(例如[2,7,11]
)。在本例中,我希望在将每个元素推入阵列之前,声音播放三次。这是我的密码:
function primeFact(n) {
let factors = [];
let divisor = 2;
let clap = new Audio('clap.mp3');
while (n > 2) {
if (n % divisor == 0) {
clap.currentTime = 0;
clap.play();
factors.push(divisor);
n = n / divisor;
} else {
divisor++;
}
}
return factors;
}
您可以使用队列。声音只播放一次,因为在这个循环中几乎是瞬间的。这项工作:
<script>
var sounds = new Array,
clap = new Audio('clap.mp3'); // no need to assign it every time
function primeFact(n) {
let factors = [];
let divisor = 2;
while (n > 2) {
if (n % divisor == 0) {
clap.currentTime = 0;
sounds.push(clap); // add sound to queue
factors.push(divisor);
n = n / divisor;
} else {
divisor++;
}
}
playQueuedSounds(); // play all sounds added
return factors;
}
function playQueuedSounds() {
if (sounds.length === 0) return;
var sound = sounds.pop(); // get last sound and remove it
sound.play();
sound.onended = function() { // go look at the queue again once current sound is finished
playQueuedSounds();
};
}
primeFact(25); // two clap noises :)
</script>
var sounds=新数组,
clap=新音频('clap.mp3');//不需要每次都分配它
函数primeFact(n){
让因子=[];
设除数=2;
而(n>2){
如果(n%除数==0){
clap.currentTime=0;
声音。按(拍);//将声音添加到队列
因子push(除数);
n=n/除数;
}否则{
除数++;
}
}
playQueuedSounds();//播放添加的所有声音
回报因素;
}
函数playQueuedSounds(){
如果(sounds.length==0)返回;
var sound=sounds.pop();//获取最后一个声音并将其删除
声音。播放();
sound.onended=function(){//当前声音结束后,再次查看队列
播放队列声音();
};
}
基本事实(25);//两个拍手声:)
是否要等待它完成播放,然后再播放第二次?@SLaks是的,那很好。