Zenn
Open1

drag イベントの最後の event.x がなぜか 0 を返す

hwatattamahwatattama

HTML + JavaScript で Draggable を試していたところ、 drag イベントの(通常は連続して発生する)最後のイベントのプロパティ x がなぜか 0 を返すことに気がついた。(気づくまでハマってた)

しかもそれに続いて発生する dragend イベントのプロパティ x はちゃんとした値を返す。また、この現象が Chrome で発生して、 Safari では発生しない。ので、おそらく Chrome の問題だろうと思う。

次の簡単な HTML で再現できる:

<body draggable="true">
    draggable
</body>
<script>
    document.body.addEventListener('drag', (evt) => console.log(evt.x));
    document.body.addEventListener('dragend', (evt) => console.warn(evt.x));
</script>

これを HTML ファイルにしてそれをブラウザで読み込み、 JavaScript コンソールを開いて、画面に表示されている "draggable" 文字列をマウスで摘んで動かし、そして放す(ドラッグをやめる)。

目印になるよう、 dragend イベントで出るコンソールメッセージは "warn" レベルにした。その "warn" が出る一個前のログの行で見られるメッセージが示すものが、最後の drag イベントからのものであり、そのプロパティ x の値が 0 になってしまっている様子が見られる( Chrome の場合。 Safari ではちゃんとした値=おそらく dragend イベントのプロパティ x の値と同じである)。

(追記:このことは、半年ほど前に気づいたことで、当時 Twitter に呟いたのだけれど、いまも治っていないみたいなので、ここにあらためて記すことにしました。この問題は Chrome のサポートに提出済み。)

ログインするとコメントできます