onmousemove

onmousemove

onmousemove 属性 (HTML, XHTML 1)

[1] HTML のほとんどの要素で用意されている onmousemove 属性は、 指示装置 (pointing device) がある要素の上で (その要素から出入りせずに) 動かされた時に発生する事象に関する内在事象属性です。

[2] 仕様書:

代替

[3] 内在事象属性は表現と構造の分離の原則に反するので、 好ましくないと考える人もいます。また、 DOM 0 に基づく古い設計です。

代わりに、 script 要素などにより関連付けたスクリプト内で DOM 2 以上の事象に関するメソッド等が利用できます。 DOM 水準2 や DOM 水準 3 はこの属性に対応する DOM の事象 mousemove を用意しています。

属性値

[4] この属性の値は %Script です。 SGML 的には CDATA です。 自称が発生したときに実行するスクリプトの code を記述します。スクリプト言語は、 Content-Script-Type によります。

[5] この属性は省略可能です。

関連

[6] この属性に対応する DOM の事象は mousemove です。そちらもあわせてごらんください。

[7] 別の要素に移動したときには onmouseout 事象が、別の要素から移動してきたときには omouseover 事象が発生します。

[8] ドラッグ・アンド・ドロップスクリプトにより実装したい時には、 mousemovemousedown, mouseup を組み合わせると便利です。

mousedownドラッグしたい要素でだけ listen しておけばいいのですが、 mousemovemouseupドラッグ中にマウス・ポインター要素から外れることを考慮してドラッグ・アンド・ドロップ可能な領域全体で listen しておいたほうがいいです。

メモ

[9] ニンテンドーDSiブラウザーでは mousemove発火されるだけでかなり処理が重たくなります。中の処理を減らしたりしてもあまり変わらない。 position: absolute にすると極端に重さが増します。

[10] ニンテンドーDSiブラウザーviewport を入れて高さ172px以下にすればマウスイベントが発生します。それより長くなるとスクロールになります。 position:absolute なら175px までいけます。

[11] 3DS では普通にペンでなぞっても mousemove が発生しないので、ありがちな canvas を使ったお絵かきは実現不可能です。ペンのタッチイベントは、

  • タッチしてすぐ離せば mouse* 一式と click が順番に発生します。
  • 1秒くらい同じ場所で長押しして文字列選択モードに入ると mouse* 一式がリアルタイムに発生します。

... の2通りのケースで取得できます。

後者で従来スタイルのお絵かきが実現できそうに思えますが、何か描くために毎回1秒くらい長押ししないといけないのは意外と辛く、文字や本格的な絵を描く用途には向きません。