SWFMacMouseWheelで気づいたこと

  • 2008 年 4月 18 日
  • kosuke

swfmacmousewheel2.jsを読んでみて気づいたこと。

swfmacmousewheel2.jsの中身を読んでみたのですが、以下のコメントのような動きだと思うのです。

//swfmacmousewheel2.jsを読み込むと同時にswfmacmousewheelが実行される

var swfmacmousewheel = function(){
    if (!swfobject) return null;	//swfobjectが無かったらnullを返す。処理停止
    var u = navigator.userAgent.toLowerCase();
    var p = navigator.platform.toLowerCase();
    var d = p ? /mac/.test(p) : /mac/.test(u);
    if (!d) return null;                                   //Macで無かったらnullを返す。処理停止
    var k = [];                                            //SWFの識別IDを格納する配列
 
    //マウスホイールの移動量を返す
    var r = function(event){
        var o = 0;
        if (event.wheelDelta) {
	      //マウスホイールの移動量
            o = event.wheelDelta / 120;
            if (window.opera) o = -o;                     //ブラウザ調整
        }
        else if (event.detail) { o = -event.detail; }  //ブラウザ調整
        if (event.preventDefault) event.preventDefault();	//これをどうにかできれば...
        return o;
    };
    //FLASHに移動量を渡す
    var l = function(event){
        var o = r(event);
        var c;
        for (var i = 0; i < k.length; i++) {
            c = swfobject.getObjectById(k[i]);
            if (typeof(c.externalMouseEvent) == 'function') 
                c.externalMouseEvent(o);
        }
    };
    //マウスホイールのイベント定義
    if (window.addEventListener) window.addEventListener('DOMMouseScroll', l, false);
    window.onmousewheel = document.onmousewheel = l;
    //メソッド設定
    return {
        registerObject: function(m){                    //SWFの識別IDを配列に格納
            k[k.length] = m;
        }
    };
}();

気になったのは、
event.preventDefault();
でして、preventDefault()を調べてみると、

Event (Common DOM API)

イベントがキャンセル可能な場合、preventDefault メソッドを使用すると イベントのキャンセルを通知できるため、そのイベントの結果として通常は実装により 実行されるデフォルトのアクションが実行されません。

とあります。ここでキャンセルされるのはマウスホイールの動作なのでフォーカスが外れない問題はここにあるように思います。
試しに消してみたらブラウザのスクロールバーが動きました。
が、Flashへのマウスホイールと同時にブラウザのスクロールバーが動いてしまうので消すだけでも駄目なわけです。

たぶんですが、FlashとJavaScriptでフォーカスやカーソルの位置を調べて、preventDefault();を制御すれば回避できるのかも?と思いました。

“SWFMacMouseWheelで気づいたこと” に コメントはありません

1 件のトラックバック/ピンバック

  • MouseWheelフォーカスの問題 « 2BLOG (Pingback, 2009 年 2 月 26 日)
    [...] 前々回のエントリー「SWFMacMouseWheelで気づいたこと」ですが、preventDefault()の制御を試してみました。 [...]

コメントをどうぞ