отключить прокрутку колесика мыши при наведении курсора на гибкое приложение? - PullRequest
3 голосов
/ 05 января 2010

Можно ли отключить прокрутку колесика мыши на моей веб-странице, когда курсор находится над моим приложением flex?

Моё гибкое приложение - это карта, которая позволяет пользователю увеличивать и уменьшать масштаб с помощью колесика мыши; однако, когда я помещаю свое гибкое приложение на свою веб-страницу, колесо прокрутки заставляет страницу прокручиваться, а не увеличивать и уменьшать масштаб ...

Edit:

Я добавил звуки в свое гибкое приложение, и оно говорит мне, что мои события мыши правильные. Я также добавил окно предупреждения в 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 ]

4 голосов
/ 09 января 2010

Это относится к 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);");
        }
    }
  }
}

В вашем основном флеш-документе «кадр 1 или где-либо» или в вашем основном файле flex mxml поместите следующее:

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

Вы можете посетить веб-сайт, на котором я наткнулся на это, посетив следующий URL: http://www.spikything.com/blog/index.php/2009/11/27/stop-simultaneous-flash-browser-scrolling/

За 5 минут работы наконец-то решена неделя работы ... надо любить программирование!

1 голос
/ 05 января 2010

Ответ будет заключаться в том, чтобы вызвать код отключения Justkevin через вызов externalInterface. в приложении mouseOver вызовите функцию javascript, чтобы отключить колесо прокрутки мыши и включить его в приложении mouseOut.

0 голосов
/ 05 января 2010

Вы не можете сделать это из Flex / Flash, но есть несколько способов сделать это с помощью JavaScript.

Вам потребуется разместить на своей странице JavaScript-приложение в приложении Flash.Может работать не во всех браузерах.

...