マウスの座標を取得する : 制限版

setTimeoutで頻繁に起こるイベントの処理を減らして、負荷をを抑える

pageX:
pageY:
screenX:
screenY:
clientX:
clientY:
view source

JavaScript

var fps = 30;
var frameTime = 1000 / fps;
var isAnimated = false;
var lastTouchInfo = null;

function animation(e) {
  if (!isAnimated) {
    return; 
  }
  var x = lastTouchInfo.pageX;
  var y = lastTouchInfo.pageY;
  setParam(lastTouchInfo);
  setTimeout(animation, frameTime);
}

function setParam(e) {
  document.getElementById('pageX').textContent = e.pageX;
  document.getElementById('pageY').textContent = e.pageY;
  document.getElementById('screenX').textContent = e.screenX;
  document.getElementById('screenY').textContent = e.screenY;
  document.getElementById('clientX').textContent = e.clientX;
  document.getElementById('clientY').textContent = e.clientY;

  document.getElementById('cursor').style.left = e.clientX + 'px';
  document.getElementById('cursor').style.top  = e.clientY + 'px';
}

document.body.addEventListener('mousedown', function(e){
  lastTouchInfo = e;
  isAnimated = true;
  animation(e);
});
document.body.addEventListener('mousemove', function(e){
  lastTouchInfo = e;
});
document.body.addEventListener('mouseup', function(e){
  isAnimated = false;
  lastTouchInfo = null;
});

CSS

#param{
  position:fixed;
  right:0;
  top:160px;
  z-index:90;
  background-color:rgba(255,255,255,.8);
}

#box{
  width:400px;
  height:400px;
  background-color:#eee;
  margin:20px auto;
}

dl{
  padding:20px;
}
dt{
  margin-top:10px;
}
dt,
dd{
  min-height:1.2em;
}


#cursor{
  position:fixed;
  left:0;
  top:0;
  z-index:99;
  width:20px;
  height:20px;
  margin:-10px;
  background-color:rgba(255,200,200,.8);
  border-radius:50%;
}

HTML

ページのソースを表示 : Ctrl+U , DevTools : F12

view-source:https://hi0a.com/demo/-js/js-mouse-event-timeout/

ABOUT

hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。

プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。

必要な機能の関数をコピペ利用したり勉強に活用できます。

プログラムの動作サンプル結果は画面上部に出力表示されています。

環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。

画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。

動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。

途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。