fastclickを有効にしたDOMの中で
CreateJSのオブジェクトにclick
で登録したイベントが
呼ばれないという現象が起きます。(iOS/Android実機)
shape = new cjs.Shape()
shape.graphics
.f '#f00'
.r 10, 10, 100, 100
.ef()
shape.addEventListener 'click', ->
console.log 'shape clicked'
stage.addChild shape
stage.update()
原因
EaselJS
mouseup
と直前のmousedown
がヒットエリア内にあれば
click
で登録したイベントを呼ぶ。
Canvasが直接click
を拾っている訳ではない模様。
https://github.com/CreateJS/EaselJS/blob/release_v0.7.1/src/easeljs/display/Stage.js#L701
fastclick
touchend
のタイミングで強制的にclick
を発火させる
https://github.com/ftlabs/fastclick/blob/v1.0.0/lib/fastclick.js#L573
という仕組みになっているため相性が悪いようです。
対策
- ターゲットがCanvasの場合は
mouseup
,mousedown
も発火させるようにする
だいぶ雑な感じですが一応これで動きました。
もっと良い方法あったら教えてもらえると嬉しいです。