2011年3月4日金曜日

ダブルクリックとシングルクリックを区別して処理する方法

ダブルクリックを受け取りたい場合のお話です。

Flashでは通常、最初のクリックの段階でクリックイベントがディスパッチされ、その後のクリックでダブルクリックの要件を満たしたときに、クリックイベントではなく、ダブルクリックイベントがディスパッチされます。

詳しくは調べてませんが、OSの設定によりダブルクリックとみなされたときに、FlashPlayerにクリックではなくダブルクリックとして通知されるのではと予想しています。

テキストボックスで考えてみると、最初のクリックでフォーカスし、ダブルクリックを受け取ったところでテキストを全選択にする、ということで、特にシングルクリックとダブルクリックが逐一発生しても何ら問題ありません。

しかし、ズームできる画像があって、画像はクリッカブルマップになっているケースを考えてください。 仮にオンラインのチラシサイトの画像としましょう。

商品をクリックしたら、商品の詳細ページにジャンプし、ズームしたいときはダブルクリックというのが簡単な操作です。しかし、ズームするためにはダブルクリックを受け取る必要がありますが、シングルクリックがその前に発生します。つまり、ダブルクリックだけを受け取りたい場合、シングルクリックは回避しなければなりません。

以下に解決したコードを掲載しました。


簡単に説明すると、クリックを受け取ったら、座標を記録しタイマーを開始します。
 タイマーが完了するまでに再度クリックがあった場合、
  • 同じ座標ならダブルクリック、その後タイマーを停止
  • 同じ座標ではないなら前回の位置でのシングルクリック、タイマーを再起動
とし、 再度クリックがなければ、そのまま記録した位置でのシングルクリックとみなします。

これを応用すれば、ダブルクリックだけではなく、トリプルクリックも実装できますね。

0 件のコメント:

コメントを投稿