2011-09-18 33 views
0

我需要單擊一個HTML按鈕並更改processing.js中的值。這似乎是這將是簡單的,但有些事是錯在這裏:processing.js,通過表單按鈕訪問?

<!DOCTYPE html> 
<html> 
<head> 
    <script src="../../processing.js"></script> 
</head> 
<body> 

<script type="application/processing"> 
int color =80; 
void setup() { 
    size(200, 200); 
    stroke(255); 
} 
void draw() { 
    background(0); 
    fill(color); 
    ellipse(100, 100, 160, 160); 
} 

function changeColor(newColor){ 
    color = newColor; 
} 
</script> 
<canvas width="200" height="200"></canvas></p> 
<div style="height:0px;width:0px;overflow:hidden;"></div> 

<button onClick="changeColor(150)">Change Color</button> 
</body> 
</html> 

回答

0

變化int color = 80;var color = 80;
<script type="application/processing"><script type="text/javascript">
,你應該是不錯的。

這是一個概念loose typingdynamic typing(這意味着一個JS變量可以在不同的時間取決於上下文保存不同的數據類型)已知的概念。所以,你在這裏沒有定義任何類型。

+0

謝謝Saket,這很有道理。但我試過了,它不起作用。我認爲還有一個額外的問題。 – Roger

+0

哦,我編輯了我的回覆以進行額外的更改(腳本標記)。請注意。 – Saket

+0

我並不是說這個腳本標記是錯誤的,我是說我不相信它是正確的。 processingjs.org網站的示例遵循我使用的腳本標記格式。 Fwiw,大部分的腳本(幾百行)都是用Java編寫的,其中有一些javascript行可以正常工作(例如,document.getElementById ...)。 – Roger

0

得到這個工作,改變你的草圖功能:

int myColor = 80; 
void changeColor(newColor) { 
    myColor = newColor; 
} 

改變您的按鈕的代碼如下所示:

<button onClick="Processing.instances[0].changeColor(150)"> 
    Change Color 
</button> 

它之前沒有工作的原因是,

  1. 瀏覽器不會在<script>塊中執行代碼,除非它具有type="text/javascript'。因此,與普通的JavaScript塊不同,changeColor函數對頁面來說不是全局的。
  2. 由於函數不是全局函數,因此需要通過處理實例使用Processing.instances數組引用它。
  3. 你命名color會踩在腳下稱爲color()的處理API函數變量,所以我改變了你的變量
  4. 我改變你的JavaScript函數來處理函數的名稱; Processing.js將處理函數附加到草圖上,這意味着您可以稍後調用它。