咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          Flex自定義右鍵菜單-1屏蔽默認菜單

          Posted on 2011-11-28 17:01 oathleo 閱讀(2295) 評論(0)  編輯  收藏 所屬分類: Flex
          不要試圖改變flash插件自帶的右鍵菜單,沒有辦法解決
          自帶的右鍵菜單壞處大大
          1.不能去掉默認的幾項(關于)
          2.不能實現多層

          只能使用js屏蔽掉默認右鍵事件,然后彈出自己的右鍵菜單來實現
          搜索了半天,找了個可行的方案,實現第一步:
          1.屏蔽默認菜單,并響應右鍵事件

          var RightClick = {
              
          /**
               *  Constructor
               
          */ 
              init: function () {
                  
          this.FlashObjectID = "customRightClick";
                  
          this.FlashContainerID = "flashcontent";
                  
          this.Cache = this.FlashObjectID;
                  
          if(window.addEventListener){
                       window.addEventListener(
          "mousedown"this.onGeckoMouse(), true);
                  } 
          else {
                      document.getElementById(
          this.FlashContainerID).onmouseup = function() { document.getElementById(RightClick.FlashContainerID).releaseCapture(); }
                      document.oncontextmenu 
          = function(){ if(window.event.srcElement.id == RightClick.FlashObjectID) { return false; } else { RightClick.Cache = "nan"; }}
                      document.getElementById(
          this.FlashContainerID).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.FlashContainerID).setCapture();
                      
          if(window.event.srcElement.id)
                      RightClick.Cache 
          = window.event.srcElement.id;
                  }
              },
              
          /**
               * Main call to Flash External Interface
               * 'flexview_rightClick'
               
          */
              call: function() {
                  document.getElementById(
          this.FlashObjectID).flexview_rightClick();
              }
          }


              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
              
          <html>
              
          <head>
              
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
              
          <title>TEST</title>
              
              
          <script type="text/javascript" src="swfobject.js"></script>
              
          <script type="text/javascript" src="rightClick.js"></script>

              
              
          </head>
              
          <body onload="RightClick.init();">
                  
          <div id="flashcontent">Flash Player 10 required</div>
                  
          <script type="text/javascript">
                     var so 
          = new SWFObject("RightClickAS3.swf""customRightClick""560""420""9""#CCCCCC");
                      so.addParam(
          "quality""high");
                      so.addParam(
          "name""customRightClick");
                      so.addParam(
          "id""customRightClick");
                      so.addParam(
          "AllowScriptAccess""always");
                      so.addParam(
          "wmode""opaque");
                      so.addParam(
          "menu""false");
                      so.addVariable(
          "variable1""value1");
                      so.write(
          "flashcontent");
                  
          </script>
              
          </body>
              
          </html>
             


          package com
          {
              
          import flash.display.*;
              
          import flash.external.ExternalInterface;
              
          public class RightClick extends Sprite
              {
                  
          public function RightClick()
                  {
                      var methodName:String 
          = "flexview_rightClick";
                      var method:Function 
          = onRightClick;
                      ExternalInterface.addCallback(methodName, method);
                  }
                  
          private function onRightClick():void {
                      var mx:
          int = stage.mouseX;
                      var my:
          int = stage.mouseY;
                      trace(mx 
          + ":" + my);
                      
          if(my> 0 && my <stage.stageHeight && mx> 0 && mx <stage.stageWidth) {
                          
          // YOUR CODE HERE
                      }
                  }
              }
          }
          主站蜘蛛池模板: 武汉市| 临夏县| 东丰县| 娄底市| 安达市| 大宁县| 班戈县| 林芝县| 蒲江县| 株洲县| 博爱县| 灯塔市| 正宁县| 汨罗市| 杭州市| 平遥县| 汶川县| 左权县| 宜黄县| 拉萨市| 泰州市| 洛扎县| 同江市| 潮安县| 隆子县| 台中市| 南乐县| 资中县| 曲靖市| 历史| 缙云县| 建德市| 阿拉善左旗| 巴中市| 雅江县| 弋阳县| 彰武县| 广南县| 台前县| 平泉县| 肇州县|