在我们触发事件的时候会有event
对象,该对象是我们触发事件时的一些信息。
其中包括了鼠标坐标的一些信息。
oDiv.onclick = function(event){
console.log(event);
}
clientX/clientY
:::info 该属性是鼠标位置相对于当前可视页面的坐标(不计算滚动条的距离)。 :::
document.onclick = function(event){
console.log(event.clientX, event.clientY);
}
另外还有x
、y
两个属性,和clientX/clientY
属性同义,但是老版的火狐浏览器不支持!!!
pageX/pageY
:::info
该属性是鼠标位置相对于当前文档的坐标(会计算滚动条的距离,这是和clinetX/clientY
的区别)。
❌ IE9
及以下不支持
:::
document.onclick = function(event){
console.log(event.pageX, event.pageY);
}
另外还有layerX/layerY
两个属性,和pageX/pageY
属性同义,但是IE11
及以下不支持。
📌 兼容性写法:
function pagePos(e){
var sLeft = document.body.scrollTop || document.documentElement.scrollTop,
sTop = document.body.scrollTop || document.documentElement.scrollLeft;
var cLeft = docuemnt.documentElement.clientLeft,
cTop = docuemnt.documentElement.clientTop;
return {
X: e.clientX + sLeft - cLeft,
Y: e.clientY + sTop - cTop
}
}
screenX/screenY
:::info 改属性是鼠标位置相对于屏幕的坐标。 :::
document.onclick = function(event){
console.log(event.screenY, event.screenX);
}
offsetX/offsetY
:::info 该属性是鼠标相对块元素内部的坐标。 :::
// oDiv 是获取到的 div
oDiv.onclick = function(event){
console.log(event.offsetX, event.offsetY);
}
编写鼠标拖动元素
先认识三个事件:
mousedown
鼠标按键按下事件mouseup
鼠标按键抬起事件mousemove
鼠标移动事件
```javascript var oDiv = document.getElementsByClassName(“box”)[0];<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.box {
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
background-color: orange;
}
</style>
</head>
<body>
<div class="box">
</div>
</body>
</html>
oDiv.onmousedown = function (event) { // div 被点击的时候记录鼠标距离 div 边的距离 var offsetPos = { X: event.offsetX, Y: event.offsetY, };
document.onmousemove = function (event) { var pagePos = { X: event.pageX, Y: event.pageY, };
// 为了让 div 的距离是我们点击 div 距离,所以需要用 pageX - offsetX
// 否则当我们点击 div 的时候,div 的左上角会跑到我们的鼠标下
oDiv.style.left = pagePos.X - offsetPos.X + "px";
oDiv.style.top = pagePos.Y - offsetPos.Y + "px";
}; oDiv.onmouseup = function () { document.onmousemove = null; }; }; ```