Flex屏蔽右键

原创 2012年03月29日 21:50:45

             Flex 自带的ContextMenu和ContexMenuItem可以实现对右键菜单的控制,具体使用可以看API。用ContextMenu.hideBuiltInItems()可以隐藏部分菜单,当时对“设置”等系统菜单屏蔽不了。

             要完全屏蔽右键菜单,让人犯难。 
     “山重水复疑无路, 柳暗花明又一村。

             Flex中的事件流默认捕获过程为false,而js的事件流默认的是true。(详见js、Flex的事件机制)

            它提供了一种思路:IE,在右键事件的捕获过程,让事件停止传播,Flex对象接受不了右键事件,右键菜单自然就没有了;也许有人会问:没有右键事件,怎么添加我们自己的右键响应时间呢?

          嘿嘿,ExternalInterface.addCallback("js函数",Flex 函数),在IE中捕获到右键事件的时候事件监听器调用Flex的函数。具体的步骤大致如下:

         1.在IE中定义捕获右键事件,定义事件监听器,阻止事件的传播,调用Flex 函数,模拟响应右键事件

            document..onmousedown=onIeRightClick;

            function onIeRightClick()

              {

                       if(event.button >1)//右键是2,左键是1

                         {

                                  ${application}.openRightClick();//调用Flex函数
                                  e.stopPropagation();   //阻止事件传播

                         }

             }

         2.在Flex 中定义外部调用方法

              private function openRightClick():void
               {

                    //自己构造一个事件对象
                     var e:MouseEvent = new MouseEvent(MouseEvent.MOUSE_DOWN, true, false, mouseTarget.mouseX, mouseTarget.mouseY); 
                     //派发事件

                      mouseTarget.dispatchEvent(e);
                }

           3.在Flex application初始化时注册外部调用方法:如creationComplete="init()"

               private function init():void

                {

                  ExternalInterface.addCallback("openRightClick",openRightClick);//注册可以调用

                }

            4.2中模拟一个事件对象需要一个事件源

                  在需要屏蔽的组件上定义mouseOver(也可以其他的事件)事件监听器getMouseTarget(event)

                private function getMouseTarget(event:MouseEvent):void
                   {
                           mouseTarget = DisplayObject(event.target); //获取到事件源
                    }

 

             5.定义mouseDown事件监听器showMouseEvent(event)

              private function showMouseEvent(event:MouseEvent) : void
                {
                     if(event.buttonDown == true)
                             Alert.show("您按下的鼠标左键");
                   else
                          Alert.show("您按下的是鼠标右键");//在这里构造自己的右键菜单,event对象就是上面派发下来的
   }

         5.别忘记了还一步,把swf的参数wmode="opaque"或"transpare" ,默认是window,这个参数我的理解是它的事件依赖于IE,如果是Window的话,事件产生就来自于操作系统(个人讲解)

        ok,全部工作完成了。

            

                 

             

           

版权声明:本文为博主原创文章,未经博主允许不得转载。

flex4 完全屏蔽右键菜单

原文地址: http://hi.baidu.com/vlybrcexwwbblvq/item/e3f4ab3dde40accb2e8ec2aa 1、保存如下代码 RightClickManage...
  • ld_flex
  • ld_flex
  • 2012年09月24日 14:33
  • 1529

FLEX屏蔽鼠标右键

屏蔽FLEX右键菜单以及实现自定义的FLEX右键功能==========================================================================...
  • firefight
  • firefight
  • 2007年06月07日 09:32
  • 4864

flex 里的禁用右键菜单?

虽然你在application级别上禁用了右键的菜单,可是不知道你有没有发现只要popupManager出来的面板和比如一些组件弹出的菜单:combobox,popupmenubutton....里面...
  • songhuanren
  • songhuanren
  • 2007年07月28日 14:56
  • 1626

Flex屏蔽默认右键菜单。

首先需要修改index.template.html生成的静态模板页面,使用js监听document.onmousedown事件,并调用Flex里暴露的方法,代码如下:(Index为生成的flash对象...
  • lihua2915
  • lihua2915
  • 2010年09月16日 11:23
  • 2732

屏蔽FLEX右键

屏蔽FLEX右键菜单以及实现自定义的FLEX右键功能 完全屏蔽FLEX右键菜单比当初想象的要难一些,因为大多数FLEX文档中仅仅介绍了如何隐藏一部分FLEX右键菜单,例如: var contextMe...
  • lihua2915
  • lihua2915
  • 2010年11月12日 16:32
  • 449

flex 屏蔽鼠标右键

屏蔽FLEX右键菜单以及实现自定义的FLEX右键功能 完全屏蔽FLEX右键菜单比当初想象的要难一些,因为大多数FLEX文档中仅仅介绍了如何隐藏一部分FLEX右键菜单,例如: var contextMe...
  • zhaodog
  • zhaodog
  • 2007年06月12日 08:18
  • 3678

Flex下的右键菜单问题汇总

Flex下的右键菜单
  • erwin2012
  • erwin2012
  • 2017年06月14日 22:32
  • 254

flex 监听右键弹出

 一直以为as3里不能监听右键弹出 , 原来是有的 .Application.application.stage.addEventListener(Event.MOUSE_LEAVE ,fun ) ;...
  • songhuanren
  • songhuanren
  • 2007年12月06日 15:22
  • 1314

flex 屏蔽右键的方法

http://plter.com/?p=171 有讲如何实现。记下,日后好查阅。
  • yuanpan
  • yuanpan
  • 2010年10月11日 22:22
  • 394

链接到 网页中最常用的JS代码(js禁止右键、禁止复制)

原文地址:http://www.w3cfuns.com/notes/26307/26f34457491d22e2cdb01c6f3d70832d.html function stop...
  • qq_24591547
  • qq_24591547
  • 2016年08月26日 11:29
  • 4632
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Flex屏蔽右键
举报原因:
原因补充:

(最多只允许输入30个字)