`

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

阅读更多
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[i][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)
}


抛砖引玉  欢迎大家讨论 看看有没有更好的办法 解决 滚轮问题
分享到:
评论

相关推荐

    Edge/Chrome浏览器中实现滚轮切换标签页功能

    Edge/Chrome中实现滚轮切换标签页功能 只需开启,浏览器中就可以实现鼠标滚轮切换标签页功能。 方便快捷

    C#图片浏览器(实现鼠标滚轮放大/缩小图片/QQ截图功能)

    在本文中,我们将深入探讨如何使用C# Winform来创建一个具有鼠标滚轮放大/缩小图片功能以及类似于QQ截图的程序。这个应用的核心是利用Windows Forms控件和事件处理,结合图像处理技术来实现用户友好的交互体验。 ...

    jquery监听鼠标滚轮事件+js监听滚轮事件

    原生JavaScript监听滚轮事件稍微复杂一些,因为需要考虑浏览器兼容性问题。可以使用`addEventListener`方法添加事件监听器,并处理不同的滚轮事件名称。 ```javascript document.addEventListener('...

    Flex 设置WMODE 后滚轮失效解决的示例源码

    "FixWmodeMouseWheel"这个示例代码提供了一种解决方案,它通过监听和处理鼠标滚轮事件,确保即使在`wmode`设置为可能导致问题的值时,滚轮操作也能正确响应。具体实现可能包括以下步骤: 1. **事件监听**: 在Flex...

    R14下滚轮缩放ZOOM补丁

    "R14下滚轮缩放ZOOM补丁"是一个专门针对这个版本的软件优化工具,它解决了滚轮缩放功能的问题,提升了用户在R14中查看和操作设计图纸的体验。 在原始的R14版本中,滚轮功能可能并不支持或其缩放效果不尽如人意。...

    openGL编程,鼠标左键旋转,右键平移,滚轮缩放

    在本项目中,我们将探讨如何利用OpenGL实现鼠标交互功能,包括左键旋转、右键平移和滚轮缩放,以实现更丰富的用户界面体验。 首先,我们要理解OpenGL中的基本概念,如顶点、向量、矩阵和变换。在3D空间中,我们通常...

    java 实现的图片浏览器

    为了解决这个问题,可以使用`SwingWorker`来异步加载图片,保证用户界面的流畅性。 8. **资源管理与释放**: 在程序运行过程中,确保及时关闭打开的文件流和释放占用的内存资源是非常重要的。使用`finally`块或者try...

    解决苹果电脑双系统鼠标滚轮不能用

    标题“解决苹果电脑双系统鼠标滚轮不能用”所涉及的问题是苹果Mac电脑在运行Windows双系统时,遇到鼠标滚轮无法正常工作的情况。这可能是由于驱动程序不兼容或者未正确安装导致的。苹果电脑(Mac)通常配备了专有的...

    黑莓替代滚轮的软件

    对于那些已经出现滚轮问题的设备,这种软件甚至可能成为解决问题的临时解决方案,直到设备得到维修。 总的来说,黑莓替代滚轮的软件是科技进步的一个体现,它利用软件的优势弥补硬件可能出现的问题,提升了用户体验...

    解决INewPolygonFeedback 画面时做滚轮缩放操作后面变形的问题

    在GIS开发领域,ArcGIS Engine是一个非常重要的工具,它提供了丰富的API和组件,使得开发者能够构建桌面、Web以及移动应用程序。...总之,理解坐标系统转换和正确处理地图事件是解决这类问题的关键。

    一个jQuery插件添加跨浏览器鼠标滚轮支持

    为了解决这些兼容性问题,开发者创建了jQuery MouseWheel插件,它提供了一个统一的接口来处理这些事件,使得代码在所有主流浏览器上都能正常工作。 jQuery MouseWheel插件的核心功能是监听鼠标滚轮事件并触发相应的...

    鼠标滚轮回滚问题屏蔽工具 1.2版

    我用的是雷柏的3100无线鼠标,滚轮经常出现回滚的现象,就是鼠标滚轮向上滚动的时候,时不时的会向下滚动一次,非常的恼火,于是乎,写了个小程序基本搞定了这个问题,有类似问题的朋友可以试试 使用方法: -直接启动,或者...

    BB8700模拟滚轮

    总的来说,BB8700模拟滚轮软件是一款针对特定问题设计的创新解决方案。它不仅仅是一个软件,它代表了现代智能手机软件设计中的一种趋势——即在硬件出现问题时,通过软件创新来弥补缺陷,增强用户体验。对于那些依赖...

    易语言滚轮操作控件

    在易语言中,滚轮操作控件是一种常见的用户界面元素,它允许用户通过鼠标滚轮来执行特定的操作,例如滚动文本、调整音量或者在图像之间切换等。在本案例中,我们主要探讨的是如何利用易语言实现滚轮操作控件,并通过...

    QTphoto_浏览器_图片浏览器_

    QTphoto_浏览器_图片浏览器_是一款基于QT框架开发的图像浏览软件,专为用户提供便捷的图片查看、操作体验。这款应用程序充分利用了QT库的强大功能,实现了多种图像处理操作,如放大、缩小、旋转、平移以及复原等,...

    VB滚轮助手(可F3切换、隐藏)

    VB6.0滚轮助手是一款基于VB6.0开发的工具软件,主要用于解决VB6.0程序在Windows系统下无法使用鼠标滚轮的问题。它提供了简单易用的接口,可以帮助开发者快速实现鼠标滚轮的功能。 VB6.0滚轮助手的主要特点包括: 1...

    Edge浏览器驱动程序 python程序使用使用selenium打开浏览器访问网页

    Edge浏览器驱动程序是微软开发的一款用于自动化测试和网页交互的工具,它允许程序员,特别是Python开发者,通过Selenium库来控制Microsoft Edge浏览器。Selenium是一个强大的Web自动化框架,广泛应用于功能测试、...

    alt加右键模拟滚轮按压2.zip

    总之,这个程序通过“Alt+鼠标右键”的组合键实现了滚轮模拟功能,为滚轮损坏或无滚轮鼠标的用户提供了解决方案。这一技术涉及到对操作系统API的理解和应用,以及对鼠标事件的精确模拟。这样的工具在日常工作中可以...

    复位鼠标滚轮行数,自己编写,有源代码。

    针对题目中的内容,我们将深入探讨如何复位鼠标滚轮行数,特别是针对ThinkPad笔记本电脑,以及如何通过自编源代码实现这一功能。首先,我们要理解鼠标滚轮行数的概念。 鼠标滚轮行数是操作系统识别鼠标滚动时每一...

    android滚轮选择器

    `NumberPicker`虽然提供了基本的滚轮选择功能,但在某些情况下可能无法满足我们对界面样式或交互效果的定制需求,这时就需要自定义滚轮选择器。 二、自定义滚轮选择器的关键步骤 1. 创建布局文件:首先,我们需要...

Global site tag (gtag.js) - Google Analytics