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

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 のサポートに提出済み。)
ログインするとコメントできます