0

我正在尝试使用 javascript 制作文本幻灯片,但是在 javascript 中,数学地板函数总是返回相同的随机数。下面的代码有什么问题?

var randomnumber;
D=Array(7)
D[0]='Sunday!'
D[1]='Monday!'
D[2]='Tuesday!'
D[3]='Wednesday!'
D[4]='Thursday!'
D[5]='Friday!'
D[6]='Saturday!'

window.setTimeout("Tick()", 1000);    

function Tick() 
{
    document.write('<marquee><font size="+2">'+D[Math.floor(Math.random()*7)]+'</font></marquee>')    
}


</script>
4

1 回答 1

4

工作正常setTimeout但是,在使用而不是字符串时,您必须传递对函数的引用。setTimeout当您将字符串传递给它时使用eval类似 - 的过程,从而使这种使用方法不安全。

function Tick() {...}

//pass a reference (no quotes)
window.setTimeout(Tick, 1000);​

setTimeout仅在达到超时时触发一次。如果您想做一个恒定的,连续的Tick,那么最好使用setInterval它,它会触发并“重新加载”以再次触发。


这是代码的修改版本以适合您的描述

//create the marquee and add to body 
var marquee = document.createElement('marquee');
document.body.appendChild(marquee);

function Tick() {
    //generate the random text
    var randomDay = D[Math.floor(Math.random() * 7)];

    //change the existing marquee text
    //textContent for compliant browsers
    //innerText for IE
    marquee.textContent = randomDay;
}

//tick every second
window.setInterval(Tick, 1000);​
于 2012-04-27T08:20:44.497 回答