2012-03-13 155 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 2012-03-13 22:23:11

+0

實際上它的工作原理。 http://jsfiddle.net/eU32w/ – DdD 2012-03-13 22:25:32

+1

@DimitriAdamou小提琴正在工作,因爲左上角的任何東西都包含在' ...'中。 – 2012-03-13 22:29:29

回答

2
  1. .push是一個陣列的方法,這增加了Circle實例到集合(數組)circles

    circles數組用作塊代碼片段circles[i].update()末尾的參考集。

  2. 在遇到<body>之前,您正在使用document.body參考。因此,document.bodyundefined,並且您的代碼會引發錯誤。
    要麼將​​<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

謝謝,你有更多的示例simulate.push(newCircle); – user1255490 2012-03-13 22:40:29

0

Ahhaha,這是我的代碼。我想知道爲什麼它看起來很熟悉。你把它放在錯誤的地方。在我爲您製作的原始小提琴中,它響應於窗口加載事件而運行。

你既可以自己做,也可以把腳本標籤放在身體而不是頭部。

等待加載事件,用這種替代線路document.body.appendChild(svgElement);

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

thx你可以有更多的這樣的推送功能這個問題我不是用svg填寫100%的理解嗎? – user1255490 2012-03-13 22:51:46

+0

「推送功能」只是將項目添加到數組中的一種方式。它與svg無關。我只是保存所有的圈子,所以我可以循環播放動畫。 – david 2012-03-13 22:55:34

+0

非常感謝我的代碼 – user1255490 2012-03-13 23:00:04

相關問題