JavaScript でドラッグとクリックをどうやって識別するのか、 調べたことをまとめました。
ポイント
いずれも mousedown, mouseup のイベントが発生するが、 mousemove はドラッグの時にしか発生しないので、 mousemove の有無で区別する。
イベント発生の順序
クリックの場合
mousedown → mouseup
ドラッグ(アンド ドロップ)の場合
mousedown → mousemove → mouseup
簡単なサンプルコード
const target = document.getElementById('target')
let isClick = true
target.onmousedown(() => {
isClick = true
})
target.onmousemove(() => {
isClick = false
if (!isClick) {
// ドラッグ(マウス移動)中の処理
}
})
target.onmouseup(() ==> {
if (isClick) {
console.log('CLICKED')
} else {
console.log('DRAGGED')
}
})
mousedownn, mousemove イベント発生時にフラグを変化させることで、 mouseup イベント発生時にクリックだったのかドラッグだったのかがわかるようになります。
ドラッグが始まると 即座にフラグが反映されるので、 ドラッグ中の処理を行うことも可能です。