[hello world 動かない ][検索]

プログラミング関連で自分が調べた事をメモる

javascript img クリック イベント 位置 取得

img要素のクリック地点を画像本来の位置で求める


一行でまとめようとして見出しが意味不明になってしまったが
1200*800 のサイズの画像を 300*200 のimg要素に張り付けた際に
画像の一番右下をクリックしたら
X=300, Y=200 ではなく X=1200, Y=800 と画像のサイズに対してのオフセット位置を取得したい。

$('#imgElement').on('click', function(event) {
  var pos = getPositionOnImage(this, event);
});

var getPositionOnImage = function(imgElem, event) {
  // 画像サイズ
  var rw = imgElem.naturalWidth;
  var rh = imgElem.naturalHeight;

  // 画面上の画像サイズ(img要素のサイズ)
  var w  = imgElem.width;
  var h  = imgElem.height;

  // 比率を求める
  var ratioW = rw / w;
  var ratioH = rh / h;

  // 要素上のクリック地点を取得する
  var elemPos = getPositionOnElement(event);

  // 画像上の位置を求める
  var imageX = Math.round(elemPos.x * ratioW)
  var imageY = Math.round(elemPos.y * ratioH)
  var imagePos = { x: imageX, y: imageY };

  return imagePos;
};

var getPositionOnElement = function(event) {
  var rect = event.target.getBoundingClientRect();
  var x = Math.round(event.clientX - rect.left);
  var y = Math.round(event.clientY - rect.top);

  return {x: x, y: y};
};