数字不断变化

Number Keep Changing

本文关键字:变化 数字      更新时间:2023-09-26

我想通过从 49 个数字中选择 6 个数字来更改数字,所以首先我声明了一个div 并在其中有六个跨度来包含一个数字。

我想通过getElementByTagName来更改它,以分配一个与setInterval相结合的新数字,使其始终更改,但它不起作用。

我错的地方在哪里?

感谢。

function computeRandom(){
var value = new Array(49);//declare array

    for ( i = 0; i < 49; i++ )//initial array_value
        value[i] = i+1;

    for ( i = 0 ;i < 100; i++ ) {//random arrange
        x = parseInt(Math.random()*49);
        y = parseInt(Math.random()*49);
        tmp = value[x];
        value[x] = value[y];
        value[y] = tmp;     
    }

var color = new Array(49);
    for ( i = 0; i < 49; i++ )//store color
        color[i] = "rgb(" + parseInt(Math.random()*255) + "," + parseInt(Math.random()*255) + "," + parseInt(Math.random()*255) + ")";      
    var value_tmp = new Array(6);
    for( i = 0; i < 6; i++)
        value_tmp[i] = value[i];
    document.write("<div style = '"text-align:center;'" >");//center the text by div
        for( i = 0; i < 6; i++)
            document.write("<span  style = '"font-size: 2.5em; display:inline-block; text-align:center; width: 1.5em; background: white; color: " + color[i] + " '" > " 
            + value_tmp[i] + "</span>&nbsp&nbsp&nbsp&nbsp&nbsp");
    var spanArray = document.getElementsByTagName("span");
    setInterval("keepMove(value,spanArray)",10);
    }
function keepMove(val,sp){  
var index = parseInt(Math.random()*43);//set a increment to avoid repeatition
for( i = 0; i < sp.length; i++){
    sp[i].innerHTML = val[i+index];
    document.write(sp[i].innerHTML+"  ");
}
}

.CSS:

#bg {
background: grey;
opacity: 0.8;
}

#hl {
text-align: center;
color: white;
}

.HTML:对不起,我不知道如何发布 HTML?http://codepad.org/IrSOsjg7

我已经尝试了评论员的建议,但仍然不起作用,但感谢您的帮助!我非常感谢!

我认为问题setInterval("keepMove(value,spanArray)",10)

当你传递一个字符串作为setInterval的第一个参数时,就像eval那个字符串一样,代码将在全局环境中运行,因为在全局环境中没有变量valuespanArray,代码将无法正常运行。

例如:

function foo(x, y) {
    alert(x + " " + y);
}
function bar() {
    var x = 100, y = 200;
    setInterval("foo(x, y)", 1000);
}
bar();

这将得到错误x is not defined

您可以尝试:

setInterval(function(){
    keepMove(value, spanArray);
}, 10);

尝试更改使用 setInterval 的方式。您应该使用闭包来访问值和 spanArray vars。

setInterval(function(value, spanArray) { 
        return function() {
            keepMove(value,spanArray)
        }
    }(value, spanArray),10);
}

这是因为 setTimeout 将在全局上下文中执行,从那里你无法访问这些私有变量。