JavaScript--获取页面盒子中鼠标相对于盒子上、左边框的坐标
分析:

外层边框是浏览器边框,内部盒子是页面的一个盒子,绿点是盒子中鼠标的位置。鼠标相对盒子边框的坐标=页面中(注意不是浏览器)鼠标坐标-盒子相对于浏览器边框的偏移量
第一步:求浏览器边框位置
x=element.offsetLeft;
y=element.offsetTop;
代码如下:
/*************样式表********************/
<style>
*{
padding: 0px;
margin: 0px;
}
body {
height: 2000px;
}
#box{
border: 1px solid black;
margin: 100px;
width: 400px;
height: 400px;
}
</style> /*************网页主体********************/
<body>
<div id="box"></div>
/*************JS代码********************/
<script>
//获取盒子边框相当于浏览器边框的距离
var box=document.getElementById('box');
26 var x=box.offsetLeft;
27 var y=box.offsetTop;
console.log(x);
console.log(y);
</script>
</body>
第二步:求鼠标在页面中的位置
鼠标在页面中的位置:
e.PageX e.PageY ---------->鼠标在整个文档中的位置
e.ClientX e.ClientY --------->鼠标在整个浏览器中的位置
上面二者的区别在于文档中有没有滚动条,如果有滚动条,则两个不一样,没有滚动条的情况下,二者没有区别。在本文要求中,需要使用e.PageX e.PageY
不过,e.PageX e.PageY有浏览器兼容性问题,从IE9以后才支持。
e.PageX=e.ClientX+滚动条滚动距离
e.PageY=e.ClientY+滚动条滚动距离
滚动条滚动距离也具有浏览器兼容问题,浏览器兼容问题解决如下:
2.1 滚动条的滚动距离的兼容问题
一般求滚动条滚动距离有两种方式,如下:
第一种:
scroll_x=document.body.scrollLeft
scroll_y=document.body.scrollTop
第二种:
scroll_x=document.documentElement.scrollLeft;
scroll_y=document.documentElement.scrollTop;
但是发现使用第一种方式,获得的滚动条滚动距离一直是0。
查资料发现是DTD的问题。
页面指定了DTD,即指定了DOCTYPE时,使用document.documentElement.scrollTop。
页面没有DTD,即没指定DOCTYPE时,使用document.body.scrollTop。
当然,针对上述问题,本文做了如下调整:
//滚动条滚动距离
var scroll_x=document.body.scrollLeft || document.documentElement.scrollLeft;
var scroll_y=document.body.scrollTop || document.documentElement.scrollTop;
2.2e.PageX e.PageY有浏览器兼容性问题
var page_x=e.pageX || e.clientX + scroll_x;
var page_y=e.pageY || e.clientY + scroll_y;
第二步和第一步做差,即能得到获取页面盒子中鼠标相对于盒子上、左边框的坐标
具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
padding: 0px;
margin: 0px;
}
body {
height: 2000px;
}
#box{
border: 1px solid black;
margin: 100px;
width: 400px;
height: 400px;
}
</style>
</head> <body>
<div id="box"></div>
<script>
//获取盒子边框相当于浏览器边框的距离
var box=document.getElementById('box');
var box_x=box.offsetLeft;
var box_y=box.offsetTop; //滚动条滚动距离
var scroll_x=document.body.scrollLeft || document.documentElement.scrollLeft;
var scroll_y=document.body.scrollTop || document.documentElement.scrollTop; //鼠标点击事件
document.onclick=function(e){
//e.pageX e.pageY坐标
var page_x=e.pageX || e.clientX + scroll_x;
var page_y=e.pageY || e.clientY + scroll_y;
//相对坐标
var x=page_x - box_x;
var y=page_y - box_y;
console.log(x);
console.log(y);
}
</script>
</body>
</html>
JavaScript--获取页面盒子中鼠标相对于盒子上、左边框的坐标的更多相关文章
- Javascript获取页面表格中的数据
var main=mygrid.gettable("11"); //表示获取非固定列的表格 var main1=mygrid.gettable("01");// ...
- javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,
javascript获取iframe框架中,加载的页面document对象 因为浏览器安全限制,对跨域访问的页面,其document对象无法读取.设置属性 function getDocument(i ...
- 用javaScript获取页面元素值
用JavaScript获取页面元素常见的三种方法: getElementById() ...
- JavaScript获取页面元素的常用方法
1.通过标签获取元素,返回一个数组 var li = document.getElementsByTagName('li');//标签获取元素 li[0].innerHTML;// 查看获取元素的内容 ...
- 用JavaScript获取页面上被选中的文字的技巧
这里介绍的一个小技巧是如何用JavaScript获取页面上被选中的文字的方法.最关键的JavaScript API是: event.selection = window.getSelection(); ...
- javaScript获取文档中所有元素节点的个数
HTML+JS 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- javascript 获取页面的高度及滚动条的位置的代码
http://www.jb51.net/article/23331.htm javascript 获取页面的高度及滚动条的位置的代码 作者: 字体:[增加 减小] 类型:转载 javascript ...
- js获取页面url中的各项值
一. 通过window.location获取各项参数 1.获取页面完整的url url = window.location.href; 2.获取页面的域名 host = window.location ...
- 用 Javascript 获取页面大小、窗口大小和滚动条位置
页面大小.窗口大小和滚动条位置这三个数值在不同的浏览器例如 Firefox 和 IE 中有着不同的实现.即使在同一种浏览器例如 IE 中,不同版本也有不同的实现. 本文给出两个能兼容目前所有浏览器的 ...
随机推荐
- Vue2.0+Node.js+MongoDB全栈打造商城系统
vue.js +axios mock数据 在main.js中 import axios from 'axios' Vue.prototype.$ajax = axios webpack.dev.con ...
- Web安全入门笔记-XSS
windows 10 360浏览器 0x00.概述 1.什么是 XSS Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使 ...
- Android 自定义View实现SegmentControlView(自定义多样式tablayout)
偷懒一下,不做过多阐述 参考资源: Android 自定义View实现SegmentControlView : https://blog.csdn.net/a512337862/article/det ...
- harbor使用aws s3存储
参考:http://www.vmtocloud.com/how-to-configure-harbor-registry-to-use-amazon-s3-storage/ s3 bucket权限:更 ...
- Do the Untwist
Do the Untwist Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- <context:property-placeholder>配置资源文件
直接在 spring 配置文件里面加上 <context:property-placeholder file-encoding="UTF-8" location=" ...
- RAC共享磁盘挂载工具
待更新: oracleasm: udev: 自己搭建个存储服务器:
- 发送请求获取响应内容(c#)
C#请求url,获取响应的脚本 public string ResultOfApi(string url) { //发送请求 HttpWebRequest request = null; HttpWe ...
- 测试笔记:jsonp跨域接口测试
原先测过这个接口,前后端同源(域名,协议,端口相同),开发提供的文档: $.post("http://host/url", { data1: "data1", ...
- Java Android 32位16位 MD5加密
// md5加密 32位小写 private String Md5(String sourceStr) { String result = ""; try { MessageDig ...