to pagetop
:)
spec5zigen Creator's Lab.

プログラマーの後藤です。

年末年始はドタバタしていたので、ずいぶん更新が滞ってましたが僕は元気です。

何をやっていたかというと例えばこんなこととか

他にもAirアプリであんなこととか

レスポンシブなそんなこととか

まぁまだ公開されてなかったり、公にできないものだったりすることが多いのですがそのうちお知らせできるかもしれません。

上に書いたのとは別ですが、今回は久しぶりにFlashの案件を受けて、また同じようなところでつまずいたので備忘録として簡単にメモ。

すごく今更感ありますが、マウスホイールを使う際によくお世話になってるSWFWheelというライブラリがあります。
ソースと概要はSparkProjectの方に書いてあると思うので割愛します。

要は、Flash上でマウスホイールを使ったイベントの処理をしたい時に、このライブラリを読込んでおくことでいい感じに処理してくれるわけです。

が!しかし!、HTMLにFlashを埋め込んでマウスホイールさせようとする際に、縦長なページだったりするとHTML側のブラウザスクロールが発生してしまい、Flashとブラウザのスクロールが一緒に発生してしまうという自体が!

これでは気持ち悪いので、以下のようなスクリプトを組んでおくと、Flash上にマウスがある場合はFlashの、それ以外ではブラウザのスクロールに切替をしてくれます。

//HTML側
_eventbuf=null;
function wheel(event){ _eventbuf = event; }
if(window.addEventListener) window.addEventListener('DOMMouseScroll', wheel, false);
window.onmousewheel = document.onmousewheel = wheel;
//Flash上でマウスホイールイベントが発生した際に呼ばれる関数
function swfwheelevent(){
	_eventbuf.preventDefault();
	_eventbuf.stopPropagation();
	_eventbuf.returnValue = false;
}

そしてこれをFlash側でwheelイベントするときに

//as3
ExternalInterface.call("swfwheelevent", true);

として呼んであげればいい感じです。

で、めんどくさいのでSWFWheelを直接少しカスタマイズさせていただきました。ソースはコチラ

デモはコチラ
デモのソースはコチラ

1点注意はFirefoxだとうまくいかないみたいです。
なんとか対策しようと思ったのですが、原因がわからず…、だれか分かる人いたら教えて!

参考:http://mrhdms.iixx.jp/2011/04/06/scrollbar_jsfix/

2014/4/16 追記:swfwheel.jsの方をみたらどうやら面倒なことをわざわざやってしまっていたようで、取り急ぎ改めてソースを整理してアップしました。
swfwheel.js
SWFWheel.as