Posted at

FlexでListを使った時のマウスホイールの挙動制御 その2

More than 3 years have passed since last update.

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