Start GeoGebra
Create Activity
Create Book
Upload…
Create Group
Join Group
Resources
Downloads
Blog
Help
Sign in
搜索
页面
讨论
查看源代码
历史
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
Create language links
链入页面
相关更改
上传文件
特殊页面
查看“編寫程式”的源代码
←
編寫程式
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
不允许您执行您所请求的操作。
您可以查看和复制此页面的源代码。
<noinclude>{{Manual Page|version=4.0}}</noinclude>{{objects|property}} GeoGebra 支援兩種程式語言 - GGBScript 和 Javascript。我們可以在下列的事件中編寫相對的觸發程序: * 用滑鼠點選某物件時 (On Click) * 某物件數值或屬性變更時 (On Update, ...) * 開啟 GeoGebra 檔案時 (ggbOnInit) * Javascript 觸發程序 (listener),詳情請參考 [[:en:Reference:JavaScript|JavaScript]]。 我們可以透過物件[[屬性]]視窗中的「程式」頁面來編寫程式碼。 [[File:ScriptingTab.png|thumb|屬性視窗的「程式」頁]] ==GGBScript== GGBScript 主要是用 GeoGebra 本身的指令來編寫。 {{Example|1=<div> * 假設 a 是一個範圍從 1 到 3 的[[數值與角度|整數]] * 在命令列中輸入以下的[[串列|集合]]:<br><code><nowiki>colors = {"red", "green", "blue"}</nowiki></code> * 進入 ''a'' 的[[屬性]]中的「程式」頁面,然後在「On Update」頁面中輸入:<br><code>[[SetColor 指令|SetColor]][a, [[Element 指令|Element]][colors, a]]</code> * 最後,調整 a 值就可以改變它的[[:en:Reference:Colors|顏色]]。</div>}} {{Hint|有些指令只能用於 GGBScript 中,詳情請參閱:[[GGB 程式碼 指令|GGBScript 指令]]}} {{Hint|有關顏色的名稱與編碼,請參閱:[[:en:Reference:Colors|完整的顏色列表]]}} {{Youtube|title=以 SetColor 指令動態改變顏色|url=http://www.youtube.com/watch?v=xpV2L5CAtM8}} ==JavaScript== JavaScript 是一種常用於網頁中的程式語言。不像 GGBScript 只能依序執行一些 GeoGebra 指令而己,JavaScript 可以使用 {{key|if|blue}}、{{key|while|blue}}、{{key|for|blue}} 等關鍵字來控制程式的流程。 {{Hint|若想進一步瞭解 JavaScript 的語法,請參閱 [https://developer.mozilla.org/en/JavaScript/Guide developer.mozilla.org]。}} 我們也可以使用一些特別的 JavaScript 函數來作圖,這些函數都是 {{key|ggbApplet}} 的物件方法,也就是說我們必須使用:<code>{{key|ggbApplet}}.method(a, b, ...)</code>這樣的語法來呼叫這些函數才行。 {{hint|詳細的函數說明,請參閱 [[:en:Reference:JavaScript|ggbApplet 物件方法]]列表。}} {{Example|1= <code> for(var i =0;i<10;i++) {{key|ggbApplet}}.[[:en:Reference:JavaScript#Available_Methods|evalCommand]]("A_"+i+"=(random()*10,random()*10)"); </code> 這段程式會畫出 10 個點:''A<sub>0</sub>'' 到 ''A<sub>9</sub>'',其座標均由亂數產生。 }} GeoGebra 擁有自己的 JavaScript 編譯程式。當我們要將 GeoGebra [[匯出網頁]]時,我們可以選擇要使用 GeoGebra 自己的編譯程式還是瀏覽器的編譯程式。如果你直接在 HTML 網頁碼中編輯 JavaScript 的話,記得要先執行:<code>{{key|ggbApplet}} = document.applets[0];</code> 否則 {{key|ggbApplet}} 物件無法自行啟動。 ===全域 JavaScript=== [[File:GlobalJavascriptPanel.png|right]]在「[[屬性]]」視窗的「全域 JavaScript」頁面中, 你可以編寫一些 JavaScript 函數或作一些全域變數設定,GeoGebra 會在載入物件前,先執行這裡的程式碼。 「全域 JavaScript」頁面不特屬於任何物件,所以不管你打開哪個物件的屬性視窗,都會看到這個頁面。 你也可以在這裡面定義 {{key|ggbOnInit}}() 函數,此函數會在 GeoGebra 載入所有物件後馬上執行,因此我們常在這個函數中放入一些物件的相關觸發程序(JavaScript listeners),下面就是一個例子: {{example|1= <pre> function ggbOnInit(){ // 當有物件新增(如新增一個點或一條線等)時,就會觸發 onAdd() 函數。 ggbApplet.registerAddListener("onAdd"); } function onAdd(objName){ alert("物件:"+objName+" 已新增!"); } </pre> 首先,我們在系統內定的 {{key|ggbOnInit}}() 函數中利用 [[:en:Reference:JavaScript#GeoGebraApplet_to_JavaScript_Communication|registerAddListener]]() 函數指定了一個「新增物件」的觸發程序,這行指令告訴系統:只要有物件新增了,就啟動 onAdd() 函數,系統同時會將新增物件的名稱丟給這個函數(也就是範例中的 objName,這個名稱不是關鍵字,你也可以用 name、obj 或其他變數名稱都可以),以方便後續的處理。 onAdd() 函數是使用者自訂的,所以你也可以將函數名稱改為 doSomething(),或其他名稱。 當我們寫好了這段程式,然後將檔案存檔再重新開啟,系統就會載入 {{key|ggbOnInit}}() 函數。之後,假設我們新增了一點 A,onAdd() 函數就會執行,然後顯示出「物件:A 已新增!」的訊息。 }} 除了指定「新增物件」的觸發程序外,我們也可以指定諸如「改名」、「刪除」、「清除全部物件」等等事件的觸發程序,完整的說明請看[[:en:Reference:JavaScript#GeoGebraApplet_to_JavaScript_Communication|這裡]]。 {{Hint|JavaScript 函數的啟動順序如下: {{key|全域 JavaScript|red}}(ggbOnInit 除外)⇨ 載入物件 ⇨ {{key|ggbOnInit}}() 函數 因此請勿在全域 JavaScript 中直接呼叫 {{key|ggbApplet}} 的物件方法,因為在 GeoGebra 尚未載入物件完成前,{{key|ggbApplet}} 物件根本就還沒產生,所以也沒辦法呼叫它。}} {{example|1=當 GeoGebra 中有物件新增、變更、或刪除時,將其狀態顯示於其他網頁元件上。 * 請看示範網頁:[http://www.geogebra.org/source/program/applet/geogebra_applet_java2javascript.htm ggbApplet 與 JavaScript 之間的互動]。 }} 以下為此網頁的 JavaScript 程式部份: <pre> <script type="text/javascript"> function ggbOnInit() { // 指定「新增物件、刪除物件、變更名稱、清除繪圖區、物件更新」等事件的觸發程序。 var applet = document.ggbApplet; applet.registerAddListener("addListener"); applet.registerRemoveListener("removeListener"); applet.registerRenameListener("renameListener"); applet.registerClearListener("clearListener"); applet.registerUpdateListener("updateListener"); } var strLength = 150; function addListener(objName) { document.listenerForm.textarea1.value = "add: " + objName + "\n" + document.listenerForm.textarea1.value.substring(0, strLength ); printConstructionState(); } function removeListener(objName) { document.listenerForm.textarea1.value = "remove: " + objName + "\n" + document.listenerForm.textarea1.value.substring(0, strLength ); printConstructionState(); } function renameListener(oldObjName, newObjName) { document.listenerForm.textarea1.value = "rename: " + objName + "\n" + document.listenerForm.textarea1.value.substring(0, strLength ); printConstructionState(); } function updateListener(objName) { strVal = document.ggbApplet.getValueString(objName); document.listenerForm.textarea2.value = strVal + "\n" + document.listenerForm.textarea2.value.substring(0, strLength ); } function clearListener() { document.listenerForm.textarea1.value = ""; document.listenerForm.textarea2.value = ""; document.listenerForm.textarea1.value = "construction cleared"; document.listenerForm.consState.value = ""; } function printConstructionState() { var applet = document.ggbApplet; var objNumber = applet.getObjectNumber(); var strState = "Number of objects: " + objNumber; for (i=0; i < objNumber; i++) { strName = applet.getObjectName(i); strType = applet.getObjectType(strName); strCommand = applet.getCommandString(strName); strState += "\n" + strType + " " + strName + ", " + strCommand; } document.listenerForm.consState.value = strState; } </script> </pre> ===USB Data Logging (From GeoGebra 4.2)=== For logging data from some Vernier USB Data Loggers, eg ''Go!Motion'' and ''Go!Temp'' one can define a logger listener using the registerLoggerListener method. Such listener can look like this: <pre> function logger(value) { var d = value * 1; ggbApplet.evalCommand("(CopyFreeObject[a],"+d+")"); ggbApplet.evalCommand("SetValue[a,a+1]"); } </pre> This script assumes that there is a free number ''a'' in the construction. Each time number ''d'' is logged, point ''(a,d)'' is constructed and ''a'' is increased. [[Category:Awaiting Translation]]
该页面使用的模板:
Template:Example
(
查看源代码
)
Template:Hint
(
查看源代码
)
Template:Key
(
查看源代码
)
Template:Manual Page
(
查看源代码
)
Template:Objects
(
查看源代码
)
Template:Youtube
(
查看源代码
)
返回至
編寫程式
。
GeoGebra
About
Team
Blog
Help
Tutorials
Forum
Manual
Partners
Partners
Institutes
Get Involved
Contact us
Feedback & Questions
This email address is being protected from spambots. You need JavaScript enabled to view it.
+43 677 6137 2693
Terms of Service
Privacy
License
© 2024 International GeoGebra Institute