0

javascript でテキスト スライド ショーを作成しようとしていますが、javascript では、math floor 関数は常に同じ乱数を返します。以下のコードの何が問題になっていますか?

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 に答える