2012-03-13 18 views
-1

私は関数プッシュの使い方を理解できず、どのように役立ちますか? 1 - 回線コードが必要なのはなぜですか?プッシュ機能が必要なのはなぜですか?

circles.push(newCircle); 

2 - 私はこのコードをhtmlファイルにコピーしていますが、コードは実行されていません。 Thxを

<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

は、あなたがあなたのタグに名前空間を逃すように見えますか? – DdD

+0

実際に動作します。 http://jsfiddle.net/eU32w/ – DdD

+1

@DimitriAdamou上部ブロックのものが「 ...」に含まれているため、フィドルが動作しています。 –

答えて

2
  1. .pushコレクション(配列)circlesCircleインスタンスを追加し、アレイ方法です。

    circles配列は、コードスニペットcircles[i].update()の最後のブロックの参照セットとして使用されます。

  2. <body>が発生する前に、document.bodyの参照を使用しています。その結果、document.bodyundefinedになり、コードでエラーが発生します。
    <body>にブロック<script>を配置するか、スクリプトタグの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

ありがとう、あなたはsimles to circles.push(newCircle)のサンプルがありますか? – user1255490

0

アハハ、それは私のコードです。私はなぜそれがとても身近に見えるのだろうと思った。あなたはそれを間違った場所に置きました。オリジナルのフィドルで私はあなたのために作ったウィンドウロードイベントに応答して実行されました。

あなたはそれを自分で行うことも、スクリプトタグを頭よりもむしろ身体に入れることもできます。

、ロードイベントを待つこれに伴いdocument.body.appendChild(svgElement);を置き換えるために:

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

thx私はsvgと100%の理解を記入していないプッシュ関数でこのようなより多くのexamleを持つことができますか? – user1255490

+0

'プッシュ機能'は、配列にアイテムを追加する単なる方法です。それはsvgとは関係ありません。私はすべてのサークルを保存していたので、アニメーションのためにループすることができました。 – david

+0

ありがとう、私はあなたのコードが好きです – user1255490

関連する問題