我编写了一段代码,可以从数组中随机选择一个元素,并在某个时间间隔内连续循环脚本。当我运行它,它可以工作,但浏览器冻结,所以它的代码不好。它基于Fisher-Yates算法。这是代码:
function random_notes(x){
var frame = document.getElementById("frame");
var my_array = ['E', 'G' , 'A', 'C', 'D', 'G#', 'F', 'C#', 'D#', 'A#', 'F#','B'];
var ri = Math.floor(Math.random() * my_array.length);
var result = my_array[ri];
var div = document.getElementById('frame');
div.innerHTML= result;
setTimeout("random_notes()",x*1000); // x represent a seconds
return random_notes();
}

<input type= "submit" value= "submit" onSubmit="random_notes(2)">
&#13;
和HTML
带ID框的Div也在HTML中定义。 你能帮我优化一下吗?谢谢!
答案 0 :(得分:0)
function random_notes(x, refreshId){
var frame = document.getElementById("frame");
var my_array = ['E', 'G' , 'A', 'C', 'D', 'G#', 'F', 'C#', 'D#', 'A#', 'F#','B'];
var div = document.getElementById('frame');
refreshId = setInterval(function() {
var ri = Math.floor(Math.random() * my_array.length);
var result = my_array[ri];
div.innerHTML= result;
}, x*1000);
}
用x作为延迟来调用它,并刷新一个var,这样你就可以从外面停止循环了。例如
var tmp;
random_notes(10, tmp);
if (something) clearInterval(tmp);
编辑:在setInterval之外移动DOM getElementById以加快速度
答案 1 :(得分:0)
"ABC" + "" + "hi%" + "" +vbCRLF + "bcd"
&#13;
addEventListener("DOMContentLoaded", function(event) {
var span_randomElement = document.getElementById("span_randomElement");
var button_getRandomElement = document.getElementById("button_getRandomElement");
var elements = 'E G A C D G# F C# D# A# E# B'.split(' ');
var multiplier = 1;
var seconds = 1000 * multiplier;
var randomNumber = 0;
var lastRandomNumber = 0;
function start_gettingRandomNumber() {
setInterval(function(){
do {
randomNumber = Math.floor((Math.random() * (elements.length - 1)) + 0);
}while(randomNumber == lastRandomNumber);
lastRandomNumber = randomNumber;
span_randomElement.innerHTML = elements[randomNumber];
}, seconds);
}
button_getRandomElement.addEventListener("click", function() {
start_gettingRandomNumber();
alert("Getting random letter every " + multiplier + " seconds...");
});
});
&#13;
我制作了一个脚本,点击一个按钮即可获得随机信件。我添加了一个<div>
<button id="button_getRandomElement">Get a random element</button>
<span id="span_randomElement"></span>
</div>
,以确保在所有元素都被加载后我会获取元素。
修改强>
添加了适当的&#34;笔记&#34;数组,我没有想到我们在谈论音乐,并缩短了每个音程之间的时间。
编辑2
的建议进行编辑