Flex自定义右键菜单的代码
Flex #右键菜单2014-04-10 10:08
1.自定义右键菜单注册类: 项目中新增注册类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[
/**
*
* http://yige.org/
*
*/
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;
}
}
}
2.打开自己的Flex工程下的html - template文件夹下的index.template.html文件(右击 - Open With - Text Editor),在
var params = {};语句的下面添加下面的语句: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";
}
相关文章
- flex4 Panel设置透明度效果的代码 2014/04/10
- flex4 Panel去掉标题的代码 2014/04/10
- Flex的Label控件竖排显示文字的方法 2014/04/10
- Flex4.5中CSS选择器介绍 2014/04/10
- Flex取消事件的默认行为发方法 2014/04/10
- flex分页打印操作实现代码 2014/04/10
- Flex动态生成可编辑的DataGrid 2014/04/10
- flash 报错捕获的方法 2014/04/10
- Flex压缩图片时exif信息丢失问题解决方法 2014/04/10
- Flex的Menu Tree实现代码 2014/04/10