2010-01-05 5 views
3

커서가 내 flex 응용 프로그램 위에있는 동안 내 웹 페이지에서 마우스 휠 스크롤을 비활성화 할 수 있습니까?커서가 플렉스 앱 위로 이동하는 동안 마우스 휠 스크롤을 사용 중지 하시겠습니까?

내 플렉스 애플리케이션은 마우스 휠을 사용하여 확대/축소 할 수있는지도입니다. 내 웹 페이지에 내 플렉스 응용 프로그램을 넣으면 그러나 스크롤 휠이 페이지가 ... 대신 확대 및 축소의

편집 스크롤됩니다 : 내 플렉스 응용 프로그램에

내가 추가 한 소리를하고는 나에게 말한다 내 마우스 이벤트가 정확합니다. 또한 자바 스크립트에 alertbox를 추가하여 MyApp.initialize 함수가 호출되고 있지만 mousewheel이 여전히 내 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에 적용됩니다. flex/flash swf에서 마우스 휠 컨트롤을 허용하려면 다음 코드를 사용하십시오. 마우스 커서가 flex/flash swf 외부에있을 때 브라우저를 스크롤합니다. 메인 플래시 문서 "프레임 1 적"또는 메인 플렉스 MXML 파일 내에서

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);"); 
     } 
    } 
    } 
} 

다음을 배치 : 당신은 내가 방문하여 우연히 웹 사이트를 방문 할 수 있습니다

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

다음 URL : 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를 사용하여 수행 할 수있는 방법이 있습니다.

플래시 앱으로 페이지에 자바 스크립트를 추가해야합니다. 모든 브라우저에서 작동하지 않을 수 있습니다.

+0

초기화 할 수 없습니다. 1. 자바 스크립트 파일을 내 사이트에 저장했습니다. 2. 구두점 때문에 처음에는 약간의 오류가 있었지만 해결했습니다. Dreamweaver에서 Java 코드의 형식이 올바르게 지정되었습니다. 그러나, 나는 그것을 초기화 할 수 없다. 어떻게 초기화합니까? 이것이 효과가 있다면 좋을 것입니다! – Phil

+0

당신은 플렉스에서 그것을 할 수 없다고 확신합니까? flex에서 javascript를 호출 할 수있는 페이지를 찾았습니다 : http://help.adobe.com/ko_KR/Flex/4.0/langref/flash/external/ExternalInterface.html#includeExamplesSummary – Phil

+0

FYI, 제공하신 링크는 다음과 같습니다. 지금 부러졌다. – Brian

1

대답은 justkevin의 disabling 코드를 externalInterface 호출을 통해 호출하는 것입니다. on mouseOver는 마우스 스크롤 휠을 비활성화하고 응용 프로그램 mouseOut에서 활성화하는 javascript 함수를 호출합니다.

+0

내 머리 위로 있을지 모릅니다. 방금 웹 사이트에 대한 flex/as3/html 코드를 작성하고 작성하는 데 1 달 18 시간을 보냈습니다 ... java는 다음 달에 배워야 할 것입니다. 난 지쳤어! 그걸 구현하는 데 도움을 줄 수 있습니까? 나는 그것을 매우 감사 할 것이다! – Phil

+0

안녕하세요. 너무 거친 것은 아닙니다. 가장 간단한 사용법은 ExternalInterface입니다.call ("javascriptFunctionName", "argument1", "argument2") 간단한 자바 스크립트 테스트를 작성하거나 몇 가지를 작성하면 수행해야 할 작업에 대한 느낌이 상당히 좋아집니다. 며칠 후에 문제가 생기면 기꺼이 도와 드리겠습니다. – jeremym

+0

글쎄, 나는 자바 초기화를 할 수 있었지만, 브라우저 스크롤을 해제하지는 않는다. – Phil

관련 문제