Flex自定义右键菜单具体实现(flex实现左边固定右边自适应)万万没想到

随心笔谈2年前发布 admin
212 0 0

文章摘要

这篇文章介绍了Flex开发环境中的一个名为`RightClickManager`的类,用于处理右键点击事件(`rightClick`)。该类通过事件监听和DOM操作来实现以下功能: 1. **事件监听**:通过`mousedown`和`mouseup`等事件监听鼠标操作,包括按动(`onGeckoMouse`)和双击(`onIEMouse`)。 2. **事件处理**:在按动和双击事件中,调用`call`方法,执行右键操作,如调用`rightClick()`方法。 3. **事件管理**:通过`init`和`killEvents`方法管理事件的执行和终止,确保右键操作的正确执行。 4. **目标捕捉**:通过`regist`函数注册右键事件,并在`mouseOverHandler`和`dispatchRightClickEvent`函数中捕获鼠标移动和右键点击的目标元素。 文章重点描述了类的结构和核心功能,突出了对右键事件的处理逻辑和事件监听机制。

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=

function(flashObjectId)

{

var RightClick={

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;

}

},

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();

}

},

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;

}

}

},

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;

}

},

call: function() {

document.getElementById(this.FlashObjectID).rightClick();

}

}

RightClick.init(flashObjectId);

}

]]>

;

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;

}

}

}

© 版权声明

相关文章