当光标在我的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);
}
};
我必须遗漏一些东西!?
答案 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。它可能无法在所有浏览器中使用。