我无法理解函数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>
答案 0 :(得分:2)
.push
是一个数组方法,它将Circle
个实例添加到集合(数组)circles
。
circles
数组用作代码段circles[i].update()
末尾的块中的参考集。
在遇到document.body
之前,您使用的是<body>
引用。因此,document.body
为undefined
,您的代码会抛出错误
将<script>
块放在<body>
中,或者通过window.onload=function(){ ... code here... }
或脚本标记上的defer
属性推迟脚本。
答案 1 :(得分:1)
push
方法将一个或多个元素添加到数组的末尾。有关详细信息,请参阅MDN documentation。以下是其工作原理的示例:
var sports = ["soccer", "baseball"];
sports.push("football", "swimming");
// Now, sports = ["soccer", "baseball", "football", "swimming"]
什么不起作用?
答案 2 :(得分:0)
啊哈哈,那是我的代码。我想知道为什么它看起来如此熟悉。你把它放在了错误的地方。在我为你制作的原始小提琴中,它是为响应窗口加载事件而运行的。
您可以自己做,也可以将脚本标记放在正文而不是头部。
要等待加载事件,请将行document.body.appendChild(svgElement);
替换为:
window.addEventListener('load', function(){
document.body.appendChild(svgElement);
});