マウスが動くと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
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。