一般我們管理Flash右鍵選單是為了兩個目的:第一個,編輯右鍵選單,實現我們自己需要的某些功能;第二個,完全遮蔽右鍵選單。前者可以通過AS程式碼來實現,而後者,Flash本身並不支援,需要藉助一些外力實現。下面我分別介紹:
一、編輯右鍵選單
從InteractiveObject類繼承的每個物件,都可以具有唯一的上下文選單,如Button、TextField、Sprite、MovieClip等。需要注意的是:Stage物件是其中一個例外,它並不接受contextMenu屬性,但如果設定stage.showDefaultContextMenu = false,可以刪除其他所有的選單命令(包括預設的和自己定義的)。
管理右鍵選單首先需要使用ContextMenu類,用於管理選單。如以下程式碼:
var myContextMenu:ContextMenu = new ContextMenu(); //定義選單例項
myContextMenu.hideBuiltInItems(); //隱藏預設的選單項
this.contextMenu = myContextMenu; //應用選單項
如果我們並不需要隱藏所有的預設選單項,可以使用ContextMenuBuiltInItems類進行控制,該類的作用就是控制預設的右鍵選單選項。比如我們要關閉其他的預設選單,僅保留“列印”,程式碼如下:
var myContextMenu:ContextMenu = new ContextMenu();
myContextMenu.hideBuiltInItems(); //使用該行程式碼,設定所有預設項的屬性為false
var defaultItems:ContextMenuBuiltInItems = myContextMenu.builtInItems;
defaultItems.print = true; //設定“列印”為true
this.contextMenu = myContextMenu;
最後我們使用ContextMenuItem類編輯自己的選單項。在編輯之前,我先說下,編輯自己的選單項是有一些限制的,比如:
(1) 自定義選單項不得超過15個,每個標題必須至少包含一個可見字元。
(2) 標題字元不能超過100個,並且開頭的空白字元會被忽略。
(3) 與任何內建選單項相同的標題將被忽略。不過比較搞笑的是,內建選單項比如列印,實際是“列印…”,所以如果取名“列印”是可以的。
程式碼如下:
var myContextMenu:ContextMenu = new ContextMenu();
myContextMenu.hideBuiltInItems();
var menuItem1:ContextMenuItem = new ContextMenuItem(“第一個選單項”);
menuItem1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, func1);
myContextMenu.customItems.push(menuItem1);
var menuItem2:ContextMenuItem = new ContextMenuItem(“第二個選單項”);
menuItem2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, func2);
myContextMenu.customItems.push(menuItem2);
this.contextMenu = myContextMenu;
function func1(event:ContextMenuEvent) {
trace(event.target.caption);
}
function func2(event:ContextMenuEvent) {
trace(event.target.caption);
}
ContextMenuItem類還有一些有用的屬性,如:
caption:獲取選單項標題名稱
enabled:選單項是否啟用(未啟用為灰色不可點選狀態)
separatorBefore:選單項上方是否顯示分隔條
二、完全遮蔽右鍵選單
完全遮蔽右鍵選單,一般有以下三種方法:
(1) 採用JS來實現遮蔽滑鼠右鍵的功能
網上有提供現成的程式碼範例,地址如下:http://www.taoshaw.com/flash/link_add/youjian/youjian.rar
(2) 也是通過JS,利用透明gif+div網頁層在Flash上新增連結的方法來實現的
程式碼相對簡單些,如下:
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>Flash徹底遮蔽右鍵</title>
</head>
<body>
<table height=121 border=0 align=”center” cellpadding=0 cellspacing=0>
<tr>
<td>
<div style=”position:relative”>
<EMBED style=”position:absolute;z-index:0″ src=”http://www.taoshaw.com/flash/link_add/xiao.swf” quality=high height=196 TYPE=”application/x-shockwave-flash” PLUGINSPAGE=”http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash” wmode=”opaque”>
<a href=”http://www.taoshaw.com” target=”_blank” style=”cursor:pointer”>
<div style=”position:relative;filter:alpha(opacity=0);-moz-opacity:0;left:0;top:0; background:#CDEAF6;;height:196px;z-index:10″>
</div>
</a>
</div>
</td>
</tr>
</table>
</body>
</html>
(3) 利用swfobject模組自帶的右鍵遮蔽功能
swfobject據說是Google工程師開發的,功能很強大,非常好用。
格式如下: <flash id=”test” name=”test” src=”RightClick.swf” ;560″ height=”420″ Version=”10.0.0″ param=”{wmode:`opaque`}” rightclick=”rightClick”/>
只要把最後一項改成rightclick=”no”,即可實現遮蔽滑鼠右鍵的功能了。