質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

292閲覧

マウス位置追跡スクリプトをスクロールに対応させるには

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/03/03 07:49

マウスが動くとx座標とy座標を更新するプログラムはネットにたくさん落ちてますが、その全てがスクロールに対応していません。
つまり、縦に長いページをマウスホイールや↑↓キーを使ってスクロールしたとき、マウスの位置が変化するにも関わらずy座標値が更新されません。

これはなぜでしょう?スクロールに対応させることはできないのでしょうか。

↓サンプルコード

HTML

1<!DOCTYPE html> 2<html> 3<meta charset="UTF-8"> 4<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 5<body> 6 7<p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p> 8 9 10<footer id="footer"> 11 X座標:<input type="text" id="txtX" /> 12 Y座標:<input type="text" id="txtY" /> 13</footer> 14<style> 15#footer { 16 position: fixed; 17 height: 100px; 18 background-color: red; 19 bottom: 0px; 20 left: 0px; 21 right: 0px; 22 margin-bottom: 0px; 23} 24body { 25 margin-bottom:100px; 26} 27</style> 28<script> 29var xMousePos = 0; 30var yMousePos = 0; 31var lastScrolledLeft = 0; 32var lastScrolledTop = 0; 33 34$(document).mousemove(function(event) { 35 captureMousePosition(event); 36 document.getElementById("txtX").value = xMousePos; 37 document.getElementById("txtY").value = yMousePos; 38}) 39 40$(window).scroll(function(event) { 41 if(lastScrolledLeft != $(document).scrollLeft()){ 42 xMousePos -= lastScrolledLeft; 43 lastScrolledLeft = $(document).scrollLeft(); 44 xMousePos += lastScrolledLeft; 45 } 46 if(lastScrolledTop != $(document).scrollTop()){ 47 yMousePos -= lastScrolledTop; 48 lastScrolledTop = $(document).scrollTop(); 49 yMousePos += lastScrolledTop; 50 } 51}); 52function captureMousePosition(event){ 53 xMousePos = event.pageX; 54 yMousePos = event.pageY; 55} 56 57 58</script> 59</body> 60</html> 61

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

イベントの種類により、取得できる情報は異なります。
scroll イベントでは「マウスの座標」は取得できません。

参考リンク


2019/3/2 追記

参考リンクのページには、日本語訳がないようです。あしからず。
ただ、pageXなどがないことはお分りいただけると思います。

ちなみに、イベントオブジェクト(イベント情報)を介さずに、現在のマウスポジションを取得する方法が現状無いはずです。

他のイベントでどんな情報が取得できるかは、このページで確認できます。

投稿2019/03/03 08:45

編集2019/03/03 08:51
NozomuIkuta

総合スコア1260

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

小さなミスでした。
$(window).scrollの中身にxMousePosを更新するコードを追記したらできました。

投稿2019/03/03 09:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

マウスが動くとx座標とy座標を更新するプログラムはネットにたくさん落ちてますが、その全てがスクロールに対応していません。

どういうものを探したかはわかりませんが、マウスイベントが起こるのはマウスを動かした時なので、スクロール時にマウスが動かない限りは拾えません。

スクロールに対応させることはできないのでしょうか。

「マウスが動く時」「スクロール時」両方で座標(スクロール量とマウス位置)を保存するようにして、計算するようにすれば出来るのでは?
マウスがあった位置から上下左右にどれだけスクロールされたかを見れば、たぶん算出できると思います。

投稿2019/03/03 09:04

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問