clientX/clientY

Attempting to use clientX/clientY using root as the origin of coordinates.

by David Iglesias

HTML

<div id="transform">

  <div id="root">
  Root
    <div id="wrapper">
      <div id="content">
        Content!<br />
        300 x 300<br />
        (after <tt>scale(1.5)</tt>)
      </div>
    </div>
  </div>

<div id="out"></div>

CSS

* {
  box-sizing: border-box;
  font-family: sans-serif;
}

tt { font-family: monospace; font-size: 1.2em; }

#root {
  width: 500px;
  height: 300px;
  border: 1px solid black;
  background: #eee;
}

#wrapper {
  background: rgba(255,127,0,.5);
  pointer-events: none;
}

#content {
  pointer-events: auto;
  transform-origin: 0 0;
  transform: translate(90px, -10px) rotate(10deg) scale(1.5);
  background: #fabada;
  border: 1px solid red;
  width: 200px;
  height: 200px;
}

#out {
  margin: -5px 0 0 -5px; padding: 0;
  position: absolute;
  pointer-events: none;
  width: 20px;
  height: 20px;
  background: #09f;
  font-size: 20px;
  border-radius: 20px;
}

JavaScript

function log(n, x, y) {
  out.style.left = `${x}px`;
  out.style.top = `${y}px`;
}

let originEl = root; // origin of coordinates (glassPane).

root.addEventListener('pointermove', function(e) {
  let origin = originEl.getBoundingClientRect();
  let offsetX = e.x - origin.x;
  let offsetY = e.y - origin.y;

  log(e.target.id, offsetX, offsetY);
});