「EaselJSのDisplayObject.mouseEnabledプロパティで直後のマウスイベントが止められない」ことがあります。この問題について、CreateJS Supportから回答がありました。その中身についてご説明します。
DisplayObject.mouseEnabled
プロパティをfalse
に定めると、マウス操作のイベントがそのオブジェクトからは起こらなくなります。ところが、その後マウスポインタを動かすと、DisplayObject.mouseout
イベントが1度だけ生じてしまうのです。
もっとも、DisplayObject.mouseEnabled
プロパティをfalse
にしたとき、オブジェクトの上にあったマウスポインタがもはやインタラクションを失ったオブジェクトから外れたことにする、という仕様でしたら理屈はつきます。実際、Flashではプロパティをfalse
にした瞬間、DisplayObject.mouseout
イベントが起こります。
EaselJSもこの仕様に則りつつ、最適化のためにマウスを動かすまでイベントが送られないようにしたとのことです。仕様と最適化の考慮は、それぞれは納得できます。けれど、ふたつを合わせた現在のふるまいは、意図しない結果に思えます。
もともと、マウスポインタとオブジェクトの重なりを調べることそのものが負荷をかけるため、Stage.enableMouseOver()
メソッドを呼出さないとDisplayObject.mouseout
イベントは送れませんでした。そこで示されたCreateJS Supportからのアイデアは、このメソッドに引数をもうひとつ加えて、マウスを動かさなくてもイベントを起こすようにするというものです。負荷をわかったうえでユーザーが選べるのは、望ましいことではないでしょうか。
myStage.enableMouseOver(frequency, alwaysCheck);