| This is read-only version of the old wiki, feel free to browse it for materials. If you want to share your own materials, please use GeoGebraTube instead. You are also welcome to help us enhance the new wiki. If any questions arise, please contact the webmaster. |
JavaScript 介面
| 首頁 | 手冊 | 討論 | 正式版 | 測試版 | 圖片 | 模版 | 用色 | 分類 | 傳圖 | 傳檔 |
參見:原始說明文件(英文)
|
Contents |
GeoGebra Applets 與 JavaScript
這裡會介紹如何利用 Java Applets 與 JavaScript 的指令來操弄由 GeoGebra 所產生的動態網頁中的各種物件。
範例
「復原」按鈕
下面的 HTML 網頁碼會在你的網頁中加入一個「復原」按鈕,只要按下此按鈕,就會將你的幾何圖形復原成最原始的狀態。
<form>
<input type="button" value="Reset" onclick="document.applets[0].reset();">
</form>
「顯示隱藏」按鈕
下面的網頁碼會在網頁中加入兩個按鈕。一個是「隱藏 A」,只要按一下,就會把 A 物件隱藏起來。另一個是「顯示 A」,只要按一下,就會把 A 物件顯示出來。
<form> <input type="button" value="隱藏 A" onclick="document.applets[0].setVisible('A', false);"> <input type="button" value="顯示 A" onclick="document.applets[0].setVisible('A', true);"> </form>
執行 GeoGebra 指令
你也可以在網頁中執行 GeoGebra 的畫圖指令。下面的網頁碼中設計了一個 JavaScript 函數叫做 "myLittleConstruction()",它用來畫出 AB 直線。
<applet name="ggbApplet" code="geogebra.GeoGebraApplet"
archive="geogebra.jar"
width=200 height=40>
<param name="filename" value="circle.ggb">
<param name="framePossible" value="false">
如果您無法使用此網頁,請先安裝<a href="http://www.java.com">Java</a>。
</applet>
<script type="text/javascript">
function myLittelConstruction() {
var applet = document.ggbApplet;
applet.evalCommand("A = (1,1)");
applet.evalCommand("B = (3,2)");
applet.evalCommand("s = Line[A, B]");
}
</script>
<form>
<input type="button" value="畫直線" onclick="myLittelConstruction();">
</form>
實用範例
請看下列範例網頁的「原始碼」,你就會對如何使用 JavaScript 有更深的認識。
GeoGebra 使用的 JavaScript 指令表
執行 GeoGebra 指令
| 指令 | 版本 | 說明 | ||
| void evalCommand(String cmdString) | 2.7 | 這個指令的功能就相當於 GeoGebra 視窗中的「指令列」。
|
設定物件的狀態
| 指令 | 版本 | 說明 |
| void deleteObject(String objName) | 2.7 | 刪除指定名稱的物件 |
| void setValue(String objName, double value) | 3.0 | 設定指定物件的數值。如果你指定的不是數值物件的話,則沒任何效果。 |
| void setCoords(String objName, double x, double y) | 3.0 | 設定「點」或「向量」的座標。如果你指定的不是點或向量的話,則沒任何效果。 |
| void setColor(String objName, int red, int green, int blue) | 2.7 | 以 RGB 的方式設定物件顏色。R:0~255, G:0~255, B:0~255。 |
| void setVisible(String objName, boolean visible) | 2.7 | 隱藏或顯示物件。
applet.setVisible("A", true) /* true 代表「顯示」
applet.setVisible("A", false) /* false 代表「隱藏」
|
| void setLabelVisible(String objName, boolean visible) | 3.0 | 隱藏或顯示物件的「標籤」。 |
| void setLabelStyle(String objName, int style) | 3.0 | 設定物件標籤的顯示方式。0:代表只顯示物件標籤,1:代表顯示標籤與數值(如: a = 2.54),2:代表只顯示數值。 |
| void setFixed(String objName, boolean flag) | 3.0 | 設定物件是否為「固定物件」。注意:設定為「固定」後,是無法改變其數值的,除非你解除固定。 |
| void setTrace(String objName, boolean flag) | 3.0 | 設定是否要顯示物件的痕跡。 |
查詢物件的屬性
| 指令 | 版本 | 說明 |
| double getXcoord(String objName) | 2.7 | 傳回指定物件的 x 座標。注意:如果指定的物件不是點或向量的話,還是會傳回 0。 |
| double getYcoord(String objName) | 2.7 | 傳回指定物件的 y 座標。注意:如果指定的物件不是點或向量的話,還是會傳回 0。 |
| double getValue(String objName) | 2.7 | 傳回指定物件的數值。注意:如果指定的物件不是「數值物件」的話,還是會傳回 0。 |
| String getColor(String objName) | 2.7 | 傳回指定物件的顏色,以十六進位的 RGB 格式表示,例如 "#FF0000" 代表紅色。注意:傳回的顏色是一個字串,而且開頭有一個 "#" 符號,其他的英文都是大寫。 |
| String getValueString(String objName) | 2.7 | 傳回指定物件的數值,但以「字串」的方式傳回。 |
| String getDefinitionString(String objName) | 2.7 | 傳回指定物件的「定義」字串。 |
| String getCommandString(String objName) | 2.7 | 傳回指定物件的「指令」字串。 |
| String getObjectType(String objName) | 2.7 | 傳回指定物件的「種類」,例如:"點"、"直線"、"圓"等等。 |
| boolean exists(String objName) | 2.7 | 查詢整個作圖中,是否有指定的物件存在。 |
| boolean isDefined(String objName) | 2.7 | 查詢指定的物件,目前是否具有可計算的數值,還是呈現「未定義」的狀態。例如:如果 ,那麼當 x = -3 時,a 就會變成「未定義」的狀態。
|
| String [] getAllObjectNames() 注:3.0 以後不支援 |
2.7 | 傳回作圖中的所有物件名稱。注意:在有些瀏覽器中,使用 JavaScript 的陣列會產生問題,所以請使用 getObjectNumber() 和 getObjectName()。 |
| int getObjectNumber() | 3.0 | 傳回作圖中的所有物件數。 |
| String getObjectName(int i) | 3.0 | 傳回作圖中第 i 個物件名稱。 |
作圖工具與功能表
| 指令 | 版本 | 說明 |
| void setMode(int mode) | 2.7 | 選擇作圖工具。 |
| void openFile(String strURL) | 2.7 | 開啟檔案。檔案名稱可以是:
|
| void reset() | 2.7 | 將作圖復原成最初始的狀態。 |
| void refreshViews() | 2.7 | 清除所有物件的「痕跡」。 |
| void setRepaintingActive(boolean flag) | 2.7 | 開啟 (true) 或關閉 (false) 此 applet 的重新繪製 (repaint) 功能。當你一次下太多指令時,你可以先關閉重繪功能,等所有指令執行完畢後,再開啟重繪功能,這樣就可以提高此 applet 的執行效率。 |
| void setCoordSystem(double xmin, double xmax, double ymin, double ymax) | 3.0 | 設定繪圖區 x 座標與 y 座標的範圍。 |
| void setAxesVisible(boolean xAxis, boolean yAxis) | 3.0 | 顯示 (true) 或隱藏 (false) x 軸或 y 軸。 |
| void setGridVisible(boolean flag) | 3.0 | 顯示或隱藏「格線」。 |
從 GeoGebraApplet 送指令給 JavaScript
下面這些指令是讓你可以從 GeoGebra 的 applet 中,送指令到 JavaScript 執行。如果你要使用這些指令的話,請確定一定要在<applet>標籤中,加入 MAYSCRIPT 選項,如下例所示。
<applet
name="ggbApplet"
code="geogebra.GeoGebraApplet"
codebase="."
archive="geogebra.jar"
width="500" height="250"
MAYSCRIPT
>
如果你只是從 JavaScript 送指令給 GeoGebra applet 執行,並不需要指定 MAYSCRIPT 選項。
這些指令主要有兩種功能:
| 指令 | 版本 | 說明 | ||
| void registerAddListener(String JSFunctionName) | 3.0 | 將一個 JavaScript 函數指定為 applet 的「新增物件傾聽者」。如果你在繪圖區中新增一個物件,就會馬上執行你指定的 JavaScript 函數,並會把你新增的物件「名稱」當作唯一的參數傳給此函數。比方說你用下面的程式碼指定了一個「新增物件傾聽者」:
ggbApplet.registerAddListener("myAddListenerFunction");
這時,如果你在繪圖區畫了一個新點 A,則 ggbApplet 會執行下面的程式碼: myAddListenerFunction("A");
| ||
| void unregisterAddListener(String objName) | 3.0 | 移除先前指派的「新增物件傾聽者」。 | ||
| void registerRemoveListener(String JSFunctionName) | 3.0 | 將一個 JavaScript 函數指定為 applet 的「刪除物件傾聽者」。如果你在繪圖區中刪除一個物件,就會馬上執行你指定的 JavaScript 函數,並會把你刪除的物件「名稱」當作唯一的參數傳給此函數。比方說你用下面的程式碼指定了一個「刪除物件傾聽者」:
ggbApplet.registerRemoveListener("myRemoveListenerFunction");
這時,如果你在繪圖區刪除了點 A,則 ggbApplet 會執行下面的程式碼: myRemoveListenerFunction("A");
| ||
| void unregisterRemoveListener(String objName) | 3.0 | 移除先前指派的「刪除物件傾聽者」。 | ||
| void registerUpdateListener(String JSFunctionName) | 3.0 | 註冊一個JavaScript函數當作applet的「更新傾聽者」,每當GeoGebraApplet內的任何一個物件被更新,這個JavaScript函數會以JSFunctionName為單一參數當作被更新物件名稱來進行呼叫。
註:當您只要傾聽單一物件的更新時,可以使用registerObjectUpdateListener()來替代。 例:首先,註冊一個JavaScript傾聽函數 ggbApplet.registerUpdateListener("myUpdateListenerFunction");
當物件"A"被更新時,GeoGebra Applet將會呼叫Javascript函數 myUpdateListenerFunction("A");
| ||
| void unregisterUpdateListener(String objName) | 3.0 | 移除一個先前註冊的「更新傾聽者」,請參考:registerUpdateListener() | ||
| void registerObjectUpdateListener(String objName, String JSFunctionName) | 3.0 | 註冊一個JavaScript函數當作單一物件的「更新傾聽者」。每當GeoGebraApplet內該物件被更新,這個JavaScript函數JSFunctionName以被更新物件的名稱為單一參數當作被更新物件名稱來來進行呼叫。如果objName先前曾對應到JavaScript函數,則舊的值會被替代。
註:當所有物件被移除或建構物被清除時,則其「更新傾聽者」會成為未註冊。請參考:registerRemoveListener()及registerClearListener() 例:首先,註冊一個JavaScript更新傾聽函數 ggbApplet.registerObjectUpdateListener("A", "myAupdateListenerFunction");
當物件A被更新,此GeoGebra Applet將呼叫JavaScript函數 myAupdateListenerFunction("A");
註:在一個物件被更名後,物件更新傾聽者仍將繼續運作。 | ||
| void unregisterObjectUpdateListener(String objName) | 3.0 | 移除先前註冊的某個名稱的物件更新傾聽者。請參考:registerObjectUpdateListener() | ||
| void registerRenameListener(String JSFunctionName) | 3.0 | Registers a JavaScript function as a rename listener for the applet's construction. Whenever an object is renamed in the GeoGebraApplet's construction, the JavaScript function JSFunctionName is called using the old name and the new name of the renamed object as its two arguments.
Example: First, register a listening JavaScript function: ggbApplet.registerRenameListener("myRenameListenerFunction"); When an object "A" is renamed to "B", the GeoGebra Applet will call the Javascript function myRenameListenerFunction("A", "B"); | ||
| void unregisterRenameListener(String objName) | 3.0 | Removes a previously registered rename listener, see registerRenameListener() | ||
| void registerClearListener(String JSFunctionName) | 3.0 | Registers a JavaScript function as a clear listener for the applet's construction. Whenever the construction in the GeoGebraApplet is cleared (i.e. all objects are removed), the JavaScript function JSFunctionName is called using no arguments. Note: all updated listeners are unregistered when a construction is cleared. See registerUpdateListener() and registerRemoveListener().
Example: First, register a listening JavaScript function: ggbApplet.registerClearListener("myClearListenerFunction"); When an object "A" is renamed to "B", the GeoGebra Applet will call the Javascript function myClearListenerFunction(); | ||
| void unregisterClearListener(String JSFunctionName) | 3.0 | Removes a previously registered clear listener, see registerClearListener() |
GeoGebra's XML format
With these methods you can set everything in a construction (see GeoGebra's XML format).
| Method Signature | Since | Description |
| void evalXML(String xmlString) | 2.7 | Evaluates the given XML string and changes the current construction. Note: the construction is NOT cleared before evaluating the XML string. |
| void setXML(String xmlString) | 2.7 | Evaluates the given XML string and changes the current construction. Note: the construction is cleared before evaluating the XML string. This method could be used to load constructions. |
| String getXML() | 2.7 | Returns the current construction in GeoGebra's XML format. This method could be used to save constructions. |
,那麼當 x = -3 時,a 就會變成「未定義」的狀態。