• Flex屏蔽并自定义鼠标右键菜单

    2009-06-17 23:32/点击数()

    最近手头有个项目需要屏蔽Flex鼠标右键菜单并自定义新的flex鼠标右键菜单。通过ContextMenu hideBuiltInItems,还是达不到我要的效果,那该死的几个选项还是存在,在网上搜刮了很久,发现了Google Code上有一个RightClickManager的项目。通过JavaScript与Acti

    原文链接:http://flex.joelove.cn/flex-custom-context-menu/

     最近手头有个项目需要屏蔽Flex鼠标右键菜单并自定义新的flex鼠标右键菜单。通过ContextMenu hideBuiltInItems,还是达不到我要的效果,那该死的几个选项还是存在,在网上搜刮了很久,发现了Google Code上有一个RightClickManager的项目。通过JavaScript与ActionScript的结合,屏蔽了右键,并调用actionscript注册方法,使用时需要修改Flex生成的html文件,加入 “wmode”, “opaque”,或者直接修改index.template.html.

    上代码:

        AC_FL_RunContent(  
                "src", "${swf}",  
                "id", "${application}",  
                "name", "${application}",  
                "width", "${width}",  
                "height", "${height}",  
                "align", "middle",  
                "menu", "false",  
                "wmode", "opaque",
             "quality", "high",  
                "bgcolor", "${bgcolor}",  
                "allowScriptAccess", "always",  
                "allowNetworking", "all",
             "type", "application/x-shockwave-flash",  
                "pluginspage", "http://www.adobe.com/go/getflashplayer"  
        );

    按照自己的需要我稍做了修改,根据不同界面,出现不同的右键菜单。在RightClickManager.as文件中定义的JavaScript里面,我做了如下的修改

    onIEMouse: function() {
    	if (event.button ==2||event.button==0) {
    	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;
    	}
    }



    这样子,就能在FF3,IE6,遨游,chrome2下顺利通过,(PS:我的机上就这些浏览器,其他没测)
    RightClickHandles.as是用来统一管理右键菜单的单例类。RightClickMenuData.as是用于存储右键菜单内容的类。RightClickRegister.as 其实是我修改了FlexSprite.as。
    使用说明:
    在程序入口new 一下RightClickRegister就屏蔽掉了右键
    在需要自定义右键的界面上注册右键Handle:

    RightClickHandles.setHandleFunction(this, RightClickMenuData.Main_MIS,handle);
    function handle(item:Object):void{
     trace(item.action);
    }

    就会出现Main_MIS所指定的菜单内容,点击菜单后回调handle方法。并且传过来点击对象。

    另外,如果你的项目对客户端中文输入有很高的要求的话,劝你不要对屏蔽右键抱太大希望。因为加入了 “wmode”, “opaque”,这对属性之后,将会对输入法造成很大的影响。本来还想解决掉右键点击时事件流的捕获问题,结果发现中文输入不了,彻底放弃了,偶滴神啊!稍后会上传源代码…源码已上传:code.

    下面说一下副作用:使用此种方法在Flex里屏蔽鼠标右键,导致的直接结果就是中文输入法不正常,啊门!

     

上一篇:Flex教程入门篇(五)

下一篇:Flex DataGrid 分页

帮我订酒店网 广交会酒店 广州酒店预订 刷钻源码 刷信誉程序 广州网站建设 淘宝缩阴排行榜 减肥精油排行榜 淘宝缩阴排行榜 减肥精油排行榜 山寨iphone5 策恩 Ceen 世界皮鞋品牌 休闲男鞋品牌 男士商务男鞋 高端男士皮鞋 淘宝男士皮鞋 男士透气皮鞋