Flex自定义右键菜单
2013-05-14 22:40
369 查看
自定义右键菜单注册类:
项目中新增注册类 RightClickManager,代码如下:
打开自己的Flex工程下的html-template文件夹下的index.template.html文件(右击-Open With-Text Editor),在var params = {};语句的下面添加下面的语句:
params.wmode = "opaque";//屏蔽系统右键菜单的关键
3. 在主程序文件中引入:
4.完整代码如下:
示例代码文件
项目中新增注册类 RightClickManager,代码如下:
package com.siloon.plugin.rightClick { import flash.display.DisplayObject; import flash.display.InteractiveObject; import flash.events.ContextMenuEvent; import flash.events.MouseEvent; import flash.external.ExternalInterface; import mx.core.Application; public class RightClickManager { static private var rightClickTarget:DisplayObject; static public const RIGHT_CLICK:String = "rightClick"; static private const javascript:XML = <script> <![CDATA[ /** * * Copyright 2007 * * Paulius Uza * http://www.uza.lt * * Dan Florio * http://www.polygeek.com * * Project website: * http://code.google.com/p/custom-context-menu/ * * -- * RightClick for Flash Player. * Version 0.6.2 * */ function(flashObjectId) { var RightClick = { /** * Constructor */ init: function (flashObjectId) { this.FlashObjectID = flashObjectId; this.Cache = this.FlashObjectID; if(window.addEventListener){ window.addEventListener("mousedown", this.onGeckoMouse(), true); } else { document.getElementById(this.FlashObjectID).parentNode.onmouseup = function() { document.getElementById(RightClick.FlashObjectID).parentNode.releaseCapture(); } document.oncontextmenu = function(){ if(window.event.srcElement.id == RightClick.FlashObjectID) { return false; } else { RightClick.Cache = "nan"; }} document.getElementById(this.FlashObjectID).parentNode.onmousedown = RightClick.onIEMouse; } }, /** * GECKO / WEBKIT event overkill * @param {Object} eventObject */ killEvents: function(eventObject) { if(eventObject) { if (eventObject.stopPropagation) eventObject.stopPropagation(); if (eventObject.preventDefault) eventObject.preventDefault(); if (eventObject.preventCapture) eventObject.preventCapture(); if (eventObject.preventBubble) eventObject.preventBubble(); } }, /** * GECKO / WEBKIT call right click * @param {Object} ev */ onGeckoMouse: function(ev) { return function(ev) { if (ev.button != 0) { RightClick.killEvents(ev); if(ev.target.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) { RightClick.call(); } RightClick.Cache = ev.target.id; } } }, /** * IE call right click * @param {Object} ev */ onIEMouse: function() { if (event.button > 1) { if(window.event.srcElement.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) { RightClick.call(); } document.getElementById(RightClick.FlashObjectID).parentNode.setCapture(); if(window.event.srcElement.id) RightClick.Cache = window.event.srcElement.id; } }, /** * Main call to Flash External Interface */ call: function() { document.getElementById(this.FlashObjectID).rightClick(); } } RightClick.init(flashObjectId); } ]]> </script>; public function RightClickManager() { return; } static public function regist() : Boolean { if (ExternalInterface.available) { ExternalInterface.call(javascript, ExternalInterface.objectID); ExternalInterface.addCallback("rightClick", dispatchRightClickEvent); Application.application.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler); }// end if return true; } static private function mouseOverHandler(event:MouseEvent) : void { //rightClickTarget = DisplayObject(event.target); rightClickTarget = InteractiveObject(event.target); return; } static private function dispatchRightClickEvent() : void { var event:MouseEvent; if (rightClickTarget != null) { event = new MouseEvent(RIGHT_CLICK, true, false, rightClickTarget.mouseX, rightClickTarget.mouseY); //event = new ContextMenuEvent(RIGHT_CLICK, true, false, rightClickTarget as InteractiveObject, rightClickTarget as InteractiveObject); rightClickTarget.dispatchEvent(event); }// end if return; } } } |
params.wmode = "opaque";//屏蔽系统右键菜单的关键
3. 在主程序文件中引入:
//初始化 protected function init():void { if (!rightClickRegisted) { maxNumText.text=rightClickRegisted.toString(); RightClickManager.regist(); rightClickRegisted = true; } this.addEventListener(RightClickManager.RIGHT_CLICK,rightClickHandler); maxNumText.text+="init"; } //创建菜单项 private function createMenuItems():Array { var menuItems:Array = new Array(); var menuItem:Object; menuItem = new Object; menuItem.label = '刷新'; //菜单项名称 //menuItem.itemIcon = this.menu_SX;//菜单项图标 menuItems.push(menuItem); return menuItems; } //生成右键菜单 private function initMenu():void { menu = Menu.createMenu(this, createMenuItems(), false); //menu.iconField="itemIcon";//右键菜单的图标 //menu.labelField="label"; //右键菜单的名称 menu.variableRowHeight = true; menu.width=100; menu.addEventListener(MenuEvent.ITEM_CLICK, menuItemSelected); //右键菜单的事件 var point:Point = new Point(mouseX,mouseY); point = localToGlobal(point); menu.show(point.x,point.y); //显示右键菜单 maxNumText.text="initMenu"; } //删除右键菜单 private function removeMenu():void { if(menu!=null) { menu.hide(); menu.removeEventListener(MenuEvent.ITEM_CLICK,menuItemSelected); menu=null; } maxNumText.text="removeMenu"; } //菜单项点击事件 private function menuItemSelected(event:MenuEvent):void { var menuItem:Object = event.menu.selectedItem as Object; //…… switch(menuItem.label) { case "刷新": addLine(); break; // …… } } private function addLine():void { maxNumText.text="addLine"; } //控件右击事件 private function rightClickHandler(event:MouseEvent):void { //tree_onRightClicked(event); maxNumText.text="rightClickHandler0"; removeMenu(); initMenu(); maxNumText.text="rightClickHandler"; } |
示例代码文件
相关文章推荐
- Flex自定义右键菜单具体实现
- Flex4 自定义右键菜单
- Flex 自定义右键菜单
- Flex屏蔽并自定义鼠标右键菜单(转载)
- Flex屏蔽并自定义鼠标右键菜单
- 屏蔽FLEX右键菜单以及实现自定义的FLEX右键功能
- Flex屏蔽并自定义鼠标右键菜单
- Flex屏蔽并自定义鼠标右键菜单(转载)
- flex4 自定义右键菜单
- flex 自定义 屏蔽 右键菜单
- Flex屏蔽并自定义鼠标右键菜单
- 屏蔽FLEX右键菜单以及实现自定义的FLEX右键功能
- 屏蔽FLEX右键菜单以及实现自定义的FLEX右键功能
- 屏蔽FLEX右键菜单以及实现自定义的FLEX右键功能
- flex 自定义右键菜单
- flex自定义右键菜单
- JavaScript 对任意元素,自定义右键菜单的实现方法
- Java与Flex学习笔记(18)----Flex中创建右键菜单
- FLEX 屏闭系统右键菜单,及在列表控件DataGrid/Tree/List上点右键时自动选择当前行