• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Flex自定义右键菜单具体实现
    POST TIME:2021-10-18 08:39
    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[
    /**
    *
    * 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;
    }
    }
    }

    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";
    }

    4.完整代码如下
    示例代码文件
    您可能感兴趣的文章:
    • 右键发送(sendto),创建快捷方式到自定义的位置
    • 右键发送(sendto),创建快捷方式到自定义的位置 的vbs
    • 自定义右键属性覆盖浏览器默认右键行为实现代码
    • JavaScript 对任意元素,自定义右键菜单的实现方法
    • js自定义鼠标右键的实现原理及源码
    • js实现完全自定义可带多级目录的网页鼠标右键菜单方法
    • Js实现自定义右键行为
    上一篇:flex4 panel去掉标题设置透明度效果代码
    下一篇:flex的tree动态加载大量数据与滚动条相关问题探讨
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信