Array.prototype.spil = function (x,max) {
if (this.length===max) {
this.shift();
this.push(x);
} else {
this.push(x);
}
return this;
}
var heard = [0],
freash = [];
$('#speak').bind('touchstart', function() {
var sounds = [
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
];
var temp = sounds;
for (var i=0; i<heard.length; i++) {
temp.splice(temp.indexOf(heard[i]), 1);
}
freash = temp;
var say = Math.floor(Math.random() * freash.length+1) + 1;
heard.spil(say,10);
say = document.getElementById('c'+say); // audio element
// use the sound...
});
我尝试制作播放“不是最近的声音”的声音。不管用!我想让10个按钮点击时播放的最后一个声音不再播放。
heard
是您已经听过的声音数组,它有Array.spil
函数,它将通过push
填充数组,直到它达到最大长度为10时shift
然后push
代替。
freash
是声音数组,不存在heard
数组的成员。
您可以看到heard
和freash
是在点击(touchstart
)范围之外宣布的。
如果我点击/点击有时我会听到比我想象的更早播放的声音,经常互相跟随。
这让我困扰了好几天,但是我无法在逻辑上看到这个问题。你能吗?
答案 0 :(得分:1)
我想这一行
var say = Math.floor(Math.random() * freash.length+1) + 1;
应该是
var say = freash[Math.floor(Math.random() * freash.length)];
还要考虑快捷方式
var say = freash[Math.random() * freash.length | 0];