2010-01-05 3 views
3

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

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

Edit:

я добавил звуки моего гибкого приложения и он говорит мне мои события мыши правильные. Я также добавил оповещение в javascript, чтобы я знал, что функция MyApp.initialize вызывается, но колесико мыши все еще прокручивает веб-страницу вместо моего приложения 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); 
     } 
    }; 

Я должен быть что-то не хватает !?

ответ

4

Это относится к гибкой/вспышке AS3. Используйте следующий код, чтобы включить элементы управления колесиками в 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 или где-либо» или в вашем главном файле прогибается MXML, поместите следующее:

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

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

Неделевая работа окончательно решена за 5 минут ... нужно программировать!

+0

Я добавил код непосредственно в свой класс документов, он даже не запускает события roll_over/roll_out :( –

0

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

Вам нужно будет разместить javascript на своей странице с помощью своего приложения Flash. Он может не работать во всех браузерах.

+0

Я не могу получить это для инициализации. 1. Я сохранил файл javascript на своем сайте. 2. Сначала у него были некоторые ошибки из-за «пунктуации, но я ее исправил». Dreamweaver говорит, что код Java отформатирован правильно; однако я просто не могу его инициализировать. Как его инициализировать? Если это сработает, было бы здорово! – Phil

+0

Вы уверены, что не можете сделать это изнутри flex? Я нашел страницу, в которой говорится, что можно вызвать javascript из flex: http://help.adobe.com/en_US/Flex/4.0/langref/flash/external/ExternalInterface.html#includeExamplesSummary – Phil

+0

FYI, ссылка, которую вы указали, сломанный сейчас. – Brian

1

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

+0

, который может быть над моей головой. Я просто потратил 1 месяц на 18 часов обучения и написания кода flex/as3/html для веб-сайта ... java - это то, что мне нужно будет узнать в следующем месяце. Я изможден! Можете ли вы помочь мне с этим? Буду весьма признателен за это! – Phil

+0

Эй, Фил. Это не слишком грубо. Проще всего было бы сказать ExternalInterface.call ("javascriptFunctionName", "argument1", "argument2") Напишите простой тест javascript или немного, и вы получите хорошее представление о том, что нужно сделать. Если у вас возникнут проблемы через пару дней, я буду рад помочь. – jeremym

+0

Ну, мне удалось запустить java для инициализации ', однако он не отключает прокрутку браузера. – Phil