flashのmouseweel事件について
3289 ワード
flashはwmodeがopaqueあるいはtransparentの時に、AS編纂のマウスのローラー事件は失効します.この場合、イベントバインディングは外部のJSでしか実現できない.私の実現コードは以下の通りです.
注意すべきことは、DOMMouseScrrollはfirefoxにのみ適用され、documentにのみ結合されていることである.
最後に、ミスしやすい点、flashが提供するコールバック関数の名前は必ずイベントの名称と同じではなく、オンモスワイア、オンclickなどです.このようにIEの下で方法が見つからないエラーを提示します.ぜひ覚えてください.
function registMousewheel(id){
function _onmousewheel(e) {
var target = e.srcElement || e.target;
if(mousewheelHandler.containsTarget(target)){
var delta = 0;
if(e.wheelDelta ){
delta = e.wheelDelta / 120;
}else if(e.detail){
delta = -e.detail;
}
if (delta != 0) {
target.mousewheelHandler && target.mousewheelHandler(delta);
}
e.preventDefault && e.preventDefault();
}
return false;
}
if (typeof mousewheelHandler == "undefined") {
var _mousewheelHandler = {
targets:{},
containsTarget:function(target){
return target.id in this.targets;
},
regist:function(el) {
if(typeof el=="string"){
el = document.getElementById(el);
}
if (el == null) return;
this.targets[el.id] = el;
if(typeof window.attachEvent!="undefined"){
document.attachEvent("onmousewheel",_onmousewheel);
}else if(typeof window.addEventListener!="undefined"){
document.addEventListener("DOMMouseScroll",_onmousewheel,false);
document.addEventListener("mousewheel",_onmousewheel,false);
}
},
unregistAll:function(){
if(typeof window.attachEvent!="undefined"){
document.detachEvent("onmousewheel",_onmousewheel);
}else if(typeof window.addEventListener!="undefined"){
document.removeEventListener("DOMMouseScroll",_onmousewheel,false);
document.removeEventListener("mousewheel",_onmousewheel,false);
}
this.targets = {};
}
};
mousewheelHandler = _mousewheelHandler;
}
mousewheelHandler.regist(id);
}
上のJSコードをASスクリプトに書いてもいいです.フラッシュローディングが完了したら直接呼び出します.注意すべきことは、DOMMouseScrrollはfirefoxにのみ適用され、documentにのみ結合されていることである.
最後に、ミスしやすい点、flashが提供するコールバック関数の名前は必ずイベントの名称と同じではなく、オンモスワイア、オンclickなどです.このようにIEの下で方法が見つからないエラーを提示します.ぜひ覚えてください.