La posición del ratón
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