FlexでListを使った時のマウスホイールの挙動制御
でかいたスクリプトだとChromeのFlashPlayerがPPAPIの場合に正しく動作しなかった。
そこでchromeの場合のみ違う方法でマウスホイールの挙動制御を行う
as3
// ブラウザのスクロールを有効にする(swfが非アクティブになった時)
ExternalInterface.call("browserScrollEnabled", true);
// ブラウザのスクロールを無効にする(swfがアクティブになった時)
ExternalInterface.call("browserScrollEnabled", false);
javascript
// ブラウザがchromeかどうかの判定フラグ
var ua = navigator.userAgent.toLowerCase();
var isChrome = ua.indexOf('chrome') != -1 && ua.indexOf('opr') == -1;
// ブラウザのスクロール有効フラグ
var browserScroll = true;
init();
/**
* 初期化処理
*/
function init(){
alert(navigator.userAgent.toLowerCase());
if(!isChrome){
if(window.addEventListener){
alert("addEventListener")
window.addEventListener('DOMMouseScroll', mouseScroll, false);
}else if(window.attachEvent){
window.attachEvent('onmousewheel', mouseScroll);
}
window.onmousewheel = mouseScroll;
document.onmousewheel = mouseScroll;
}else{
alert("init isChrome = " + isChrome);
}
}
/**
* DOMMouseScrollイベント
* @param event
*/
function mouseScroll(event){
if(!browserScroll){
// ブラウザのスクロールを無効化する
if(!event){
event = window.event;
}
if(event.preventDefault){
event.preventDefault();
}
event.returnValue = false;
}
}
/**
* ブラウザスクロールを有効にする
* @param flg true:ブラウザスクロール有効 false:ブラウザスクロール無効
*/
function browserScrollEnabled(flg){
if(isChrome){
if(flg){
document.documentElement.style.overflowY = "auto";
}else{
document.documentElement.style.overflowY = "hidden";
}
}else{
browserScroll = flg;
}
}