La posición del ratón

facebook-svg gplus-svg twitter-svg

Para obtener la posición del ratón encima de un elemento HTML cualquiera hemos creado la función oMousePos() que devuelve un objeto con las coordenadas x e y del ratón.
Esta función utiliza el método getBoundingClientRect().

function oMousePos(elemento, evt) {
  var ClientRect = elemento.getBoundingClientRect();
	return { //objeto
	x: Math.round(evt.clientX - ClientRect.left),
	y: Math.round(evt.clientY - ClientRect.top)
   }
}

También hemos escrito otras dos funciones:
marcarCoords() que da formato al div id="output" donde aparece el valor de las coordenadas x e y del ratón encima del elemento HTML.
Esta función utiliza la propiedad cssText que devuelve o establece el contenido de una hoja de estilo, pero si la utilizamos así: elemento.style.cssText devuelve o establece los estilos en línea de aquel elemento.

function marcarCoords(output, x, y) {
    output.innerHTML = ("x: " + x + ", y: " + y);
    var cssString = "";
    // el div id="output" esta a unos 10px del ratón;
    cssString += "top:" + (y + 10) + "px;";
    cssString += "left:" + (x + 10) + "px;";
    cssString += "visibility:visible;";
    output.style.cssText = cssString;
    testPosRaton.style.cursor = "pointer";
}

y limpiarCoords() que borra los estilos inline del <div id="output">.

function limpiarCoords(output) {
	output.style.cssText = "";
	testPosRaton.style.cursor = "default";
}

Utilizamos el método addEventListener() para detectar el movimiento del ratón ("mousemove") encima del div id="testPosRaton", y marcar las coordenadas con marcarCoords().

testPosRaton.addEventListener("mousemove", function(evt) {
		  var mousePos = oMousePos(testPosRaton, evt);
		  marcarCoords(output, mousePos.x, mousePos.y)
		}, false);

También utilizamos el método addEventListener() para registrar la salida del ratón ("mouseout") fuera del div id="testPosRaton", y borrar los estilos inline del div id="output" con limpiarCoords().

testPosRaton.addEventListener("mouseout", function(evt) {
		  limpiarCoords(output);
		}, false);

#container {
  position: relative;
  width: 250px;
  height: 220px;
  margin: 1em auto;
}

#testPosRaton {
  border: 1px solid #d9d9d9;
  width: 250px;
  height: 220px;
}

#output {
  position: absolute;
  padding: 5px;
  width: 100px;
  text-align: center;
  border: 1px solid #d9d9d9;
  background-color: #FFF;
  visibility:hidden;
}

        var testPosRaton = document.getElementById("testPosRaton");
		var output = document.getElementById("output");

		testPosRaton.addEventListener("mousemove", function(evt) {
		  var mousePos = oMousePos(testPosRaton, evt);
		  marcarCoords(output, mousePos.x, mousePos.y)
		}, false);

		testPosRaton.addEventListener("mouseout", function(evt) {
		  limpiarCoords(output);
		}, false);

		function marcarCoords(output, x, y) {
		  output.innerHTML = ("x: " + x + ", y: " + y);
		  var cssString = "";
		  // http://www.quirksmode.org/dom/w3c_css.html#t30
		  cssString += "top:" + (y + 10) + "px;";
		  cssString += "left:" + (x + 10) + "px;";
		  cssString += "visibility:visible;";
		  output.style.cssText = cssString;

		  testPosRaton.style.cursor = "pointer";
		}

		function limpiarCoords(output) {
		  output.style.cssText = "";
		  testPosRaton.style.cursor = "default";
		}

		function oMousePos(element, evt) {
		  var ClientRect = element.getBoundingClientRect();
		  return { //objeto
		    x: Math.round(evt.clientX - ClientRect.left),
		    y: Math.round(evt.clientY - ClientRect.top)
		  }
		}

Pase por encima del rectángulo ( <div id="testPosRaton"> ) para obtener la posición actual del ratón.

Vea este ejemplo en codepen.io