光标在flex app上时禁用鼠标滚轮滚动?

时间:2010-01-05 10:22:40

标签: html flex actionscript-3 mousewheel

当光标在我的flex应用程序上时,是否可以在我的网页上禁用鼠标滚轮滚动?

我的flex应用程序是一个允许用户使用鼠标滚轮放大和缩小的地图;但是,当我将我的flex应用程序放到我的网页上时,滚轮会导致页面滚动而不是放大和缩小......

编辑:

我已将声音添加到我的flex应用程序中,它告诉我我的鼠标事件是正确的。我还在javascript中添加了一个警告框,以便我知道正在调用MyApp.initialize函数,但鼠标滚轮仍在滚动网页而不是我的flex应用程序。这是我正在使用的代码,当我在我的flex应用程序之上时它没有锁定滚动条:

var bname;
var MyApp = {
   initialize : function() {  

      this.debugging = true;
      this.busyCount = 0;
      this._debug('initialize');
      bname = navigator.appName;
      //alert(bname + ‘ is browser’);
      document.getElementById('flashDiv').onload = this.start;
      if(window.addEventListener)/** DOMMouseScroll is for mozilla. */
      window.addEventListener('DOMMouseScroll', this.wheel, false);

      /** IE/Opera. */
      window.onmousewheel = document.onmousewheel = this.wheel;
      if (window.attachEvent) //IE exclusive method for binding an event
     window.attachEvent("onmousewheel", this.wheel);
      }
   , start : function() {
      window.document.network_map.focus();
      }
   , //caputer event and do nothing with it.
   wheel : function(event) {
      if(this.bname == "Netscape") {
         // alert(this.bname);
         if (event.detail)delta = 0;
         if (event.preventDefault) {
            //console.log(’prevent default exists’);
            event.preventDefault();
            event.returnValue = false;
            }
         }
      return false;
      }
   , _debug : function(msg) {
      if( this.debugging ) console.log(msg);
      }
   }; 

我必须遗漏一些东西!?

3 个答案:

答案 0 :(得分:4)

这适用于AS3 flex / flash。使用以下代码允许flex / flash swf中的鼠标滚轮控件。当鼠标光标在flex / flash swf之外时,它会滚动浏览器。

package com.custom {

import flash.display.Stage;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.external.ExternalInterface;

/**
 * MouseWheelTrap - Simultaneous browser/Flash mousewheel scroll issue work-around
 * @version 0.1
 * @author Liam O'Donnell
 * @usage Simply call the static method MouseWheelTrap.setup(stage)
 * @see http://www.spikything.com/blog/?s=mousewheeltrap for updates
 * This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
 * (c) 2009 spikything.com
 */

public class MouseWheelTrap {

    static private var _mouseWheelTrapped :Boolean;

    public static function setup(mainStage:Stage):void {

        mainStage.addEventListener(MouseEvent.ROLL_OVER, function():void{ 
            allowBrowserScroll(false); 
            }
        );

        //i added 'mx.core.FlexGlobals.topLevelApplication.'making it work better for flex. use 'stage' for flash   
        mainStage.addEventListener(MouseEvent.ROLL_OUT, function():void{ 
            allowBrowserScroll(true); 
            }
        );
    }

    private static function allowBrowserScroll(allow:Boolean):void
    {
        createMouseWheelTrap();
        if (ExternalInterface.available){
            ExternalInterface.call("allowBrowserScroll", allow);
        }
    }
    private static function createMouseWheelTrap():void
    {
        if (_mouseWheelTrapped) {return;} _mouseWheelTrapped = true; 
        if (ExternalInterface.available){
            ExternalInterface.call("eval", "var browserScrolling;function allowBrowserScroll(value){browserScrolling=value;}function handle(delta){if(!browserScrolling){return false;}return true;}function wheel(event){var delta=0;if(!event){event=window.event;}if(event.wheelDelta){delta=event.wheelDelta/120;}else if(event.detail){delta=-event.detail/3;}if(delta){handle(delta);}if(!browserScrolling){if(event.preventDefault){event.preventDefault();}event.returnValue=false;}}if(window.addEventListener){window.addEventListener('DOMMouseScroll',wheel,false);}window.onmousewheel=document.onmousewheel=wheel;allowBrowserScroll(true);");
        }
    }
  }
}

在主Flash文档“第1帧或任何地方”或主flex xxml文件中,放置以下内容:

import com.custom.MouseWheelTrap;
MouseWheelTrap.setup(stage);

您可以通过访问以下网址访问我偶然发现的网站: http://www.spikything.com/blog/index.php/2009/11/27/stop-simultaneous-flash-browser-scrolling/

一个星期的工作终于在5分钟内解决了......得热爱编程!

答案 1 :(得分:1)

答案是通过externalInterface调用调用justkevin的禁用代码。 on应用程序mouseOver调用一个javascript函数来禁用鼠标滚轮,并在应用程序mouseOut上启用它。

答案 2 :(得分:0)

您无法在Flex / Flash中执行此操作,但有一些方法可以使用javascript来完成。

您需要使用Flash应用在您的网页上添加一些JavaScript。它可能无法在所有浏览器中使用。