我为什么需要推送功能?

时间:2012-03-13 22:20:29

标签: javascript svg

我无法理解函数push的用法是什么,它有何帮助。 1 - 为什么我需要行代码?

circles.push(newCircle);

2 - 我将此代码复制到html文件并且代码未运行,我是否应该错过这里的内容? 谢谢

 <html>
<head>
<title>Your title here</title>

<script type = "text/javascript" language = "Javascript">
<!-- Hide from older browsers;
var svgns = 'http://www.w3.org/2000/svg';
var svgElement = document.createElementNS(svgns, 'svg');
document.body.appendChild(svgElement);

var Circle = function(x,y,size){
    this.element = document.createElementNS(svgns, 'circle');
    this.x = x;
    this.y = y;
    this.size = size;

    this.dx = 10*(Math.random()-0.5);
    this.dy = 10*(Math.random()-0.5);

    this.element.setAttribute('cx', this.x+'px');
    this.element.setAttribute('cy', this.y+'px');
    this.element.setAttribute('r', this.size+'px');
    this.element.setAttribute('stroke', 'black');
    this.element.setAttribute('stroke-width', '2px');
    this.element.setAttribute('fill', 'red');

    svgElement.appendChild(this.element);    
};

Circle.prototype.update = function(){
    this.x += this.dx;
    this.y += this.dy;
    this.element.setAttribute('cx', this.x+'px');
    this.element.setAttribute('cy', this.y+'px');
};


var circles = [];
for (var i = 0; i< 10; i++) {
    var newCircle = new Circle(100,100,10);
    circles.push(newCircle);     
}

window.setInterval(function(){
    for (var i = 0; i< circles.length; i++) {
        circles[i].update();
    }    
}, 30);




// end hide -->
</script>
</head>
<body>
<!-- Insert HTML here -->

</body>
</html>

3 个答案:

答案 0 :(得分:2)

  1. .push是一个数组方法,它将Circle个实例添加到集合(数组)circles

    circles数组用作代码段circles[i].update()末尾的块中的参考集。

  2. 在遇到document.body之前,您使用的是<body>引用。因此,document.bodyundefined,您的代码会抛出错误 将<script>块放在<body>中,或者通过window.onload=function(){ ... code here... }或脚本标记上的defer属性推迟脚本。

答案 1 :(得分:1)

  1. push方法将一个或多个元素添加到数组的末尾。有关详细信息,请参阅MDN documentation。以下是其工作原理的示例:

    var sports = ["soccer", "baseball"];

    sports.push("football", "swimming");

    // Now, sports = ["soccer", "baseball", "football", "swimming"]

  2. 什么不起作用?

答案 2 :(得分:0)

啊哈哈,那是我的代码。我想知道为什么它看起来如此熟悉。你把它放在了错误的地方。在我为你制作的原始小提琴中,它是为响应窗口加载事件而运行的。

您可以自己做,也可以将脚本标记放在正文而不是头部。

要等待加载事件,请将行document.body.appendChild(svgElement);替换为:

window.addEventListener('load', function(){
    document.body.appendChild(svgElement);
});