18.ContextMenu Class和ContextMenuItem Class
Flash終于支持右鍵菜單了,有了這兩個類,用戶可以隨心所欲的定制自己的Flash右鍵菜單。
對于這個功能,我是垂涎以久,因為這意味著純Flash站可以通過它進(jìn)行方便的導(dǎo)航,F(xiàn)lash游戲也算是有了最為簡便的功能菜單,總之,對這樣的好東西,我要多費(fèi)一點(diǎn)吐沫。
閑話休提,先來看一個例子: var my_cm = new ContextMenu(); my_cm.hideBuiltInItems(); my_cm.customItems.push( new ContextMenuItem("Sucy",func_1) ); my_cm.customItems.push( new ContextMenuItem("Alien",func_2) ); my_cm.customItems.push( new ContextMenuItem("Jinni",func_3) ); my_cm.customItems.sort();
function func_1() { trace(" Called Sucy!") } function func_2() { trace(" Called Alien! ") } function func_3() { trace(" Called Jinni! ") }
_root.menu = my_cm;
測試,點(diǎn)擊鼠標(biāo)右鍵,你看到了什么?哈哈,點(diǎn)擊Alien,Jinni或Sucy就可以調(diào)用func_1,func_2和func_3。
其實(shí),添加右鍵菜單的步驟十分簡單: 1.創(chuàng)建ContextMenu菜單對象。 2.創(chuàng)建ContextMenuItem菜單項對象,并添加到ContextMenu對象中。 3.為每個菜單項定制處理函數(shù)。 4.應(yīng)用菜單對象到MC,Button或TextField。
方法為:MoiveClip/Button/TextField instanceName.menu=ContextMenu instaceName;
例如,my_btn.menu=my_cm;
再回頭看看這個例子的代碼,關(guān)于右鍵菜單的核心部分的你已經(jīng)知道得差不多了,他們是:
a)new ContextMenu(); 創(chuàng)建一個ContextMenu對象。 簡單的說,它是一個容器,用來盛裝用戶定義的菜單項。 除了像本例中的方式簡單的創(chuàng)建外,還可以在創(chuàng)建的同時增加一個事件,這個事件將在用戶點(diǎn)擊右鍵出現(xiàn)菜單的時候發(fā)生。
例: var my_cm = new ContextMenu(rightClick); function rightClick() {(" Right Clicked! ")} _root.menu = my_cm;
點(diǎn)擊鼠標(biāo)右鍵,輸出" Right Clicked! "; 其實(shí)到了這,你已經(jīng)知道如何來使用右鍵事件了,遺憾的是,無論如何,菜單都是會彈出來,所以如果你想使用與菜單無關(guān)的右鍵效果,仍然會非常的不爽。 :(
b)ContextMenu.hideBuiltInItems(); ContextMenu對象的方法。
功能從名字就可以看出來了,隱藏內(nèi)建菜單項,例如copy,Zoom In等等,當(dāng)然,settings和版權(quán)信息是不會隱藏的。
另外,你要還要注意的是,自定義的菜單項不能起諸如copy,Zoom In等名字,否則他們不會起作用。
c)ContextMenu.cutstomItems ContextMenu對象的屬性。
它是一個數(shù)組,存儲著所有的用戶定義的菜單項,因為菜單項本身是對象,所以這個數(shù)組的每一個元素都是對象。
更妙的是,你可以用數(shù)組的操作方法來操作他,這對你來說一定不陌生。 你可以用push()方法來項菜單中添加菜單項,并用cutstomItems[i]的方式訪問它。 而其他數(shù)組的方法你也可以善加利用:
例如像本例中的方式,你可任意地添加菜單項,然后對cutstomItems使用sort()方法。
最后出現(xiàn)的菜單就是按字母序排列的。 另外,你也可以通過數(shù)組操作動態(tài)的改變菜單項的內(nèi)容。
d)new ContextMenuItem(caption,func) 創(chuàng)建一個ContextMenuItem對象。 caption: 菜單項的名稱(注意剛才提到過的,不要和內(nèi)建菜單同名)。 caption也是ContextMenuItem的屬性,含義相同。 func: 菜單項被點(diǎn)擊后對應(yīng)的處理函數(shù)的名稱。 另外幾個ContextMenuItem對象的屬性也可以在創(chuàng)建對象的時候作為參數(shù)傳遞。
(1)enabled: 菜單項是否可用。(不可用為灰色)默認(rèn)為true。 (2)separatorBefore:菜單項下面是否會出現(xiàn)分隔線(用于菜單分類)。默認(rèn)為false。 (3)visible: 菜單項是否可見。默認(rèn)為true。
完整的構(gòu)造函數(shù)為:new ContextMenuItem(caption,func,separatorBefore,enabled,visible); 例: my_mc = new ContextMenuItem("Item",func_item,true,false,true);
該方法創(chuàng)建了一個名為Item的菜單項,在它下面將出現(xiàn)菜單分隔線,該項目可見,但處于不可用狀態(tài),處理函數(shù)為func_item()。
關(guān)于創(chuàng)建一個右鍵菜單最基本的東西你已經(jīng)掌握了,下面來看一些額外的東西。 e)ContextMenuItem.copy() ContextMenuItem對象的方法。
返回一個菜單項對象的拷貝,返回值仍為ContextMenuItem對象。
f)ContextMenuItem.onSelect ContextMenuItem對象的事件。 當(dāng)菜單項被選中時發(fā)生。該事件的處理函數(shù)實(shí)際上就是創(chuàng)建對象時的func。 但是如果在創(chuàng)建對象后,對onSelect事件制定新的處理函數(shù),則func不會生效。
g)ContextMenu.copy() ContextMenu對象的方法,返回一個ContextMenu對象的拷貝。返回值仍是ContextMenu對象。
h)ContextMenu.onSelect ContextMenu對象的事件。 在用戶調(diào)用菜單,且菜單出現(xiàn)之前發(fā)生。它可以讓你根據(jù)鼠標(biāo)所處位置來動態(tài)的創(chuàng)建菜單。 該事件的處理函數(shù)可以有兩個參數(shù):
my_cm.onSelect = function (item:Object, item_menu:ContextMenu)
item: 當(dāng)用戶點(diǎn)擊鼠標(biāo)時,位于鼠標(biāo)指針下方的對象實(shí)例,可以是MovieClip,按鈕,文本域。
這讓你可以實(shí)現(xiàn)類似于操作系統(tǒng)的右鍵菜單的效果,即在不同的對像上面點(diǎn)擊右鍵會出現(xiàn)不同的菜單。
你可以用instanceOf來確定鼠標(biāo)指針?biāo)傅膶ο蟮念愋汀?/P>
item_menu:當(dāng)前菜單對應(yīng)的菜單項對象。 例:(這是幫助中的例子)
my_cm = new ContextMenu(); menuHandler = function (obj:Object, menu:ContextMenu) { if(obj instanceof MovieClip) { trace("Movie clip: " + obj); } if(obj instanceof TextField) { trace("Text field: " + obj); } if(obj instanceof Button) { trace("Button: " + obj); } } my_cm.onSelect = menuHandler;
_root.menu = my_cm;
你可以在場景中建立幾個mc,button和textfield,并在這些位置點(diǎn)擊鼠標(biāo)右鍵,看看有什么不同。
g)ContextMenu.builtInItems ContextMenu對象的屬性。
它本身是一個對象,包含了以下幾個布爾類型的屬性,分別對應(yīng)Flash Player的內(nèi)建菜單項:
save, zoom, quality, play, loop, rewind, forward_back, print。
設(shè)置相應(yīng)的屬性為false會將其從菜單項中移除。
例: my_cm = new ContextMenu(); my_cm.bulidInItems.zoom = false; _root.menu = my_cm;
測試,點(diǎn)擊右鍵后,菜單中將不會出現(xiàn)zoom In/zoom Out 選項。 如果想屏蔽所有的內(nèi)建菜單項,請用ContextMenu.hideBuiltInItems()。
出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色
上一頁 MX2004--AS2.0 新特性實(shí)例教程 [5] 下一頁
◎進(jìn)入論壇Flash專欄版塊參加討論
|