Fireworks 提供圖形、按鈕、動畫三類元件,直接拖用即為「靜態元件」——每個文字、尺寸變化都需重新建立元件,文件庫極易膨脹。而「動態元件」僅需一個元件定義,拖入畫布後即可在「元件屬性」面板即時修改文字、寬高、狀態(正常/滑入/按下/禁用)等屬性,庫中永遠只保留一份主元件。公用庫內建的按鈕即為典型動態元件範例。
.../Adobe Fireworks CS3/Common Library/Custom Symbols。






內建動態元件(如 Mac 風格按鈕)擁有更豐富的互動邏輯(如自動邊框縮放、圖示切換等),這些邏輯封裝在 .jsf 腳本中。透過閱讀並移植官方腳本,可為自製元件賦予企業級互動行為。
.../Custom Symbols/myBtn.jsf。.../Configuration/Common Library/Mac/Button.jsf。Button.jsf 研讀邏輯,再清空 myBtn.jsf 寫入自定義代碼(需儲存為 ANSI 編碼)。核心邏輯包含兩階段:
switch (Widget.opCode) {
case 1: setDefaultValues(); break; // 初始化:建立 Label、State 屬性預設值
case 2: applyCurrentValues(); break; // 監聽屬性變更:同步文字、顯示/隱藏對應狀態圖層
}
function setDefaultValues() { ... }
function applyCurrentValues() {
var vals = Widget.elem.customData["currentValues"];
var state = vals[1].value.split(",")[0];
Widget.GetObjectByName("label").textChars = vals[0].value;
Widget.GetObjectByName("normal").visible = (state=="normal");
Widget.GetObjectByName("mouseOver").visible = (state=="mouseOver");
Widget.GetObjectByName("mouseDown").visible = (state=="mouseDown");
Widget.GetObjectByName("unavailable").visible = (state=="unavailable");
}



掌握動態元件與 JSF 腳本,即能建立自適應、可維護、團隊共享的 UI 元件庫,大幅提升設計系統產出效率。