分析:

外层边框是浏览器边框,内部盒子是页面的一个盒子,绿点是盒子中鼠标的位置。鼠标相对盒子边框的坐标=页面中(注意不是浏览器)鼠标坐标-盒子相对于浏览器边框的偏移量

第一步:求浏览器边框位置

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--获取页面盒子中鼠标相对于盒子上、左边框的坐标的更多相关文章

  1. Javascript获取页面表格中的数据

    var main=mygrid.gettable("11"); //表示获取非固定列的表格 var main1=mygrid.gettable("01");// ...

  2. javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,

    javascript获取iframe框架中,加载的页面document对象 因为浏览器安全限制,对跨域访问的页面,其document对象无法读取.设置属性 function getDocument(i ...

  3. 用javaScript获取页面元素值

    用JavaScript获取页面元素常见的三种方法:                                                           getElementById() ...

  4. JavaScript获取页面元素的常用方法

    1.通过标签获取元素,返回一个数组 var li = document.getElementsByTagName('li');//标签获取元素 li[0].innerHTML;// 查看获取元素的内容 ...

  5. 用JavaScript获取页面上被选中的文字的技巧

    这里介绍的一个小技巧是如何用JavaScript获取页面上被选中的文字的方法.最关键的JavaScript API是: event.selection = window.getSelection(); ...

  6. javaScript获取文档中所有元素节点的个数

    HTML+JS 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  7. javascript 获取页面的高度及滚动条的位置的代码

    http://www.jb51.net/article/23331.htm javascript 获取页面的高度及滚动条的位置的代码 作者: 字体:[增加 减小] 类型:转载   javascript ...

  8. js获取页面url中的各项值

    一. 通过window.location获取各项参数 1.获取页面完整的url url = window.location.href; 2.获取页面的域名 host = window.location ...

  9. 用 Javascript 获取页面大小、窗口大小和滚动条位置

    页面大小.窗口大小和滚动条位置这三个数值在不同的浏览器例如 Firefox 和 IE 中有着不同的实现.即使在同一种浏览器例如 IE 中,不同版本也有不同的实现. 本文给出两个能兼容目前所有浏览器的 ...

随机推荐

  1. 【代码笔记】Java连连看项目的实现(2)——JTable 、TableModel的使用

    博客有时间就写写,所以一篇可能会拆成很多篇,写完后计划再合在一起. 首先肯定是要实现连连看的界面. 先准备连连看要的图片.. “LianLianKan”就是项目名称. 当然,如果小白看我的博客想学到什 ...

  2. JavaScript中双叹号(!!)作用

    经常看到这样的例子: var a: var b=!!a a默认是undefined.!a是true,!!a则是false,所以b的值是false,而不再是undefined,也非其它值,主要是为后续判 ...

  3. wxpython 创建工具栏和菜单栏

    下面看一下关于创建工具栏,状态栏和菜单的方法,看下面一个例子: import wx class ToolBarFrame(wx.Frame): def __init__(self,parent,id) ...

  4. log4j2简单使用

    http://www.cnblogs.com/lzb1096101803/p/5796849.html 如果是基于的slf4j,看这篇文章去配置 http://blog.csdn.net/neosmi ...

  5. mongodb 3.4 学习 (三)复制集

    复制集(replica set) 复制集是一组mongodb的进程维护同样的数据集,提供冗余与高可用性.最小的复制集由3台服务器(或者3个实例)组成,最多1个primary和2个secondary实例 ...

  6. 获取apk package name(包名)以及activity name

    通过adb 查看最上层成activity名字: linux: adb shell dumpsys activity | grep "mFocusedActivity" window ...

  7. 网络防火墙之iptables的前世今生和归宿

    任何事物都有一个从无到有,再归于无的过程.是的,我这里用了一个绝对词:任何. 防火墙 在计算机领域中,防火墙(英文:Firewall)是一项协助确保信息安全的设备,会依照特定的规则,允许或是限制传输的 ...

  8. JSP简要

    本篇知识导图 说起JSP,当年做课程设计什么的都用的这个,虽然技术比较古老,但是还是挺广泛使用的. JSP是一种前台的展现语言,在mvc里面属于表现层.它主要由静态,动态两部分组成,静态包括HTML, ...

  9. python课程笔记

    python变量原理:以数值为主,数字存储在内存中,分配给不同的变量.与C刚好相反 Python中,有3种内建的数据结构:列表.元组和字典.1.列表     list是处理一组有序项目的数据结构,即你 ...

  10. Python3基本数据类型(五、字典)

    一.定义 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号中: dic = {key: ...