六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 57|回复: 0

[转] 自己写的针对透明模式下的滚轮类,解决浏览器问题

[复制链接]

升级  50.4%

234

主题

234

主题

234

主题

进士

Rank: 4

积分
752
 楼主| 发表于 2013-1-28 09:34:16 | 显示全部楼层 |阅读模式
http://bbs.9ria.com/viewthread.php?tid=83888&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

该死的浏览器 火狐应该被*毙。。
透明模式下 火狐和谷歌浏览器中的flash无法使用滚轮事件。我这边的项目又需要有DIV浮在flash上面 所以 只能走JS滚轮了

思路是 建立一个数组存放需要使用滚轮的显示对象。注册鼠标OVER 和OUT事件来 处理焦点问题(FLASH 不好找焦点在谁手上,只有自己这样写了。 当然这样也存在着 两个需要滚轮的对象不能是父子关系,需要时平级关系)   当获取JS的滚轮事件 传递到该类,通知该显示对象指定的方法 告诉它 你该滚了。 另外在全屏模式 JS是使用不了的。所以要判断是否是全屏 来切换使用 滚轮事件(用JS还是用FLASH自己的)

先是JS部分
function GetFlash()                          {                                return document.getElementById("Flash");                        }                        if(!(document.attachEvent))                         {                       window.addEventListener("DOMMouseScroll", handleWheel, false);               }                            window.onmousewheel = document.onmousewheel = handleWheel;               function handleWheel(e)              {                                           if (GetFlash())                                       {                                             var t1                                            if(e.wheelDelta){                                                t1 = Number(e.wheelDelta)/40;                                            }else if(e.detail){                                                t1 = Number(e.detail)                                            }                                          GetFlash().handleWheel(t1);                                        }                              }  

再是滚轮类
package Wheel{        import flash.display.DisplayObjectContainer;        import flash.display.InteractiveObject;        import flash.display.Stage;        import flash.events.FocusEvent;        import flash.events.FullScreenEvent;        import flash.events.MouseEvent;        import flash.external.ExternalInterface;        //JS滚轮调用 kinghost80        public class WheelTool        {                                public var Arr:Array =new Array();  //需要被控制的数组  包含 一个现实对象 和一个方法                 private static  var _instance:WheelTool = new WheelTool();                public static var JSWheelBoo:Boolean = false;                public var tempArr:Array;                public var stage:Stage;                //全屏模式下调用JS无效                                                public function WheelTool()                {                        if (_instance)                         {                                                    throw new Error("只能用getInstance()来获取实例");                                               }                }                                              //初始化把舞台对象搞进来并决定是否使用JS滚轮 TRUE为使用JS                public function Init(s:Stage , boo:Boolean= false):void                {                        WheelTool.JSWheelBoo = boo;                        stage =s;                        ExternalInterface.addCallback("handleWheel", JSHandleWheel);                         stage.addEventListener(MouseEvent.MOUSE_WHEEL , FlashHandleWheel);                }                                                public static function getInstance():WheelTool                 {                        return _instance;                }                               //加入显示对象和滚轮移动时候调用的方法                public function Add(dis:DisplayObjectContainer , fun:Function):void                {                        Arr.push(new Array(dis ,fun));                        dis.addEventListener(MouseEvent.MOUSE_OVER , mouseoverfun);                        dis.addEventListener(MouseEvent.MOUSE_OUT , mouseoutfun);                }                                public function Del(dis:DisplayObjectContainer = null):void                {                        if(tempArr!= null)                        {                                if(dis == tempArr[0])                                {                                        tempArr = null;                                }                        }                                                for( var i:int = Arr.length-1; i>=0 ; i--)                        {                                if(Arr[0] == dis)                                {                                        Arr.splice(i,1);                                }                        }                }                                public function mouseoverfun(evt:MouseEvent):void                {                        for each (var  g:Array in Arr)                        {                                if(g[0]==evt.currentTarget)                                {                                                        tempArr = g;                                }                        }                }                                public function mouseoutfun(evt:MouseEvent):void                {                        for each (var  g:Array in Arr)                        {                                if(g[0]==evt.currentTarget)                                {                                        tempArr = null;                                }                        }                }                                //js滚轮事件                public function JSHandleWheel(n:Number): void                 {                           if(!WheelTool.JSWheelBoo)                        {                                return;                        }                        if(tempArr != null)                        {                                tempArr[1](n);                        }                }                                 //flash滚轮事件                public function FlashHandleWheel(evt:MouseEvent): void                 {                                                   if(WheelTool.JSWheelBoo)                        {                                if(stage.displayState != "fullScreen")                                {                                        return;                                }                        }                        if(tempArr != null)                        {                                tempArr[1](evt.delta);                        }                }         }}

最后是调用方法
初始化部分
var k:WheelTool = WheelTool.getInstance();
k.Init(this.stage,true);

调用部分
public var JSW:WheelTool = WheelTool.getInstance(); //外挂滚轮
JSW.Add(this ,MouseWheelEventFun);

//滚轮事件
public function MouseWheelEventFun(n:Number):void
{
      trace(n)
}


抛砖引玉  欢迎大家讨论 看看有没有更好的办法 解决 滚轮问题
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表