Search Plus!:ホイールイベントをハンドル

http://storehouse.quickvps.net/search_plus/search?query=Erlang

以下のページを読んで、ホイールイベントをハンドルしてみた。

function add_wheel_event(handler) {
  function handler_wrapper(e) {
    var delta = null;
    e = e || event;

    if (e.wheelDelta) {
      delta = e.wheelDelta / 120;
    } else if (e.detail) {
      delta = -e.detail / 3;
    }

    return delta ? handler(e, delta) : true;
  }

  if (window.addEventListener) {
    window.addEventListener('DOMMouseScroll', handler_wrapper, false);
  }

  window.onmousewheel = document.onmousewheel = handler_wrapper;
}

add_wheel_event(function(e, delta) {
  if (delta > 0) {
    load_prev();
  } else if (delta < 0) {
    load_next();
  }

  stop_event(e);
  cancel_event(e);
  return false;
});

Opera9だと、deltaの符号を反転させる必要はなかったなー。
Operaのバージョンが8以下だと、動作が反対になるかも。


追記
うん、なかなか便利便利。


追記2
過剰にハンドルしてたので、以下のように変更。

function add_wheel_event(obj, handler) {
  function handler_wrapper(e) {
    var delta = null;
    e = e || event;

    if (e.wheelDelta) {
      delta = e.wheelDelta / 120;
    } else if (e.detail) {
      delta = -e.detail / 3;
    }

    return delta ? handler(e, delta) : true;
  }

  if (window.opera) {
    document.onmousewheel = handler_wrapper;
  } else if (obj.addEventListener) {
    obj.addEventListener('DOMMouseScroll', handler_wrapper, false);
  } else {
    obj.onmousewheel = handler_wrapper;
  }
}