私が作成したSlyZoom 拡張機能mousedown
では、仮想スライダーを実装したいと考えています。これは、マウス ポインターが on に変化する小さな静的領域として機能する XUL/XBL 要素であり、イベントew-resize
をキャプチャmousemove
して水平方向の動きを検出し、現在のスライダーを変更します。ズームレベル。
これまでのところ、標準のMouseEvent APIを使用し、非常に便利なMouseEvent.mozMovementXを利用して暫定的な解決策を実装しました。これはPointer Lock APIを使用していないときでも存在しているようです。
この例の画像では、(Xubuntu)ew-resize
マウス ポインターが一時的な仮想スライダー (領域) の上にあり、マウス ポインターの後ろに小さな黒い二重矢印があり、 の左側にあります<menulist>
。
この画像の右側が画面の右端です。左側は単純にトリミングされています。
ただし、ご想像のとおり、ユーザーが十分なズーム レベルに達する前に、マウス ポインターが定期的にユーザーの画面の端に到達する可能性が非常に高くなります。そのような場合、残念MouseEvent.mozMovementX
ながら、物理ポインター デバイスがまだ動いていても、 はゼロのままです。
Pointer Lock API を使用して、これを回避しようとしました。ただし、Pointer Lock API は XUL/XBL ドキュメントでは機能しないようです。あれは正しいですか?それとも、Pointer Lock API は XUL/XBL ドキュメントでも機能するはずですか?
いずれにせよ、Pointer Lock APIがXBL 要素に対して機能していたとしても、マウス ポインターが非表示になり、望ましくありません。その場合、偽のマウス ポインターを作成することもできると思いますが、それはかなり面倒で、動作が不安定になりがちです。
だから私の質問はこれに要約されます:
XUL/XBL ドキュメントで画面の端を越えたマウスムーブ デルタを正しく検出するにはどうすればよいですか? どういうわけか、これは可能ですか?