首先需要知道clientX,clientY,screenX,screenY,offsetX,offsetY 是鼠标事件对象下的几个属性.

之前也一直对这些属性搞的稀里糊涂,看文档上说的也是不太理解,反正看完一头雾水,所以自己动手亲自测试了一下;说一下自己的理解;clientX,clientY,screenX,screenY,offsetX,offsetY 这几个属性是“鼠标事件对象”下的属性,所以必然是“鼠标事件”发生时候才会有意义;

  1. clientX:当鼠标事件发生时(不管是onclick,还是omousemove,onmouseover等),鼠标相对于浏览器(这里说的是浏览器的有效区域)x轴的位置;
  2. clientY:当鼠标事件发生时,鼠标相对于浏览器(这里说的是浏览器的有效区域)y轴的位置;
  3. screenX:当鼠标事件发生时,鼠标相对于显示器屏幕x轴的位置;
  4. screenY:当鼠标事件发生时,鼠标相对于显示器屏幕y轴的位置;
  5. offsetX:当鼠标事件发生时,鼠标相对于事件源x轴的位置
  6. offsetY:当鼠标事件发生时,鼠标相对于事件源y轴的位置

下面我将结合我的测试代码和结果对上面的话进行解释

这是我写的测试例子的html代码

  1. <body>
  2. <span style="white-space:pre">    </span><div id="div" class="container"></div>
  3. <span style="white-space:pre">    </span><!--<div id="div1" class="container"></div>
  4. <span style="white-space:pre">    </span><input type="button" value="test" onclick="test();">-->
  5. </body>

添加一点样式

  1. <style>
  2. *{padding: 0;margin: 0;}
  3. .container{
  4. width: 200px;height: 100px;
  5. border: 1px solid #c00;
  6. }
  7. input[type="button"]{
  8. margin: 50px;
  9. border: none;
  10. width: 100px;height: 50px;background: green;
  11. }
  12. </style>

接下来是js部分的代码

  1. <script>
  2. document.onmousemove = function (ev) {
  3. var e = ev || window.event;
  4. var div = document.getElementById('div');
  5. div.innerHTML = "clientX: "+e.clientX + ",clientY:"+ e.clientY +
  6. "</br> screenX:"+ e.screenX+",screenY:" + e.screenY;
  7. }
  8. /*  function test(ev) {
  9. var e = ev || window.event;
  10. var div1 = document.getElementById('div1');
  11. div1.innerHTML = "offsetX:"+ e.offsetX +",offsetY : "+ e.offsetY;
  12. }*/
  13. </script>

这里我需要解释一下我上面说的“浏览器有效区域”这句话,下图中黑色边框区域就是浏览器的有效区域,而整个图片显示的区域就是 “显示器屏幕区域”

下图可以看到当鼠标移动事件onmousemove发生的时候,在id为div的里面显示clientX,clientY,screenX,screenY,的值;

当我的鼠标放到浏览器有效区域的 0 ,0 处,clientX为0,clientY为0;

而screenX为0,screenY为85,因为鼠标在“浏览器有效区域”里的x坐标就是0,y坐标也是0,而鼠标在“显示器屏幕区域”的x坐标是0,y坐标是85px

当我把鼠标移到div的右上角的时候,clientX为200,clientY为0;

screenX为200,screenY为85,由此可知道

clientX是鼠标相对以浏览器有效区域的的X轴坐标,

clientY是鼠标相对以浏览器有效区域的的Y轴坐标,

上图中我的鼠标在浏览器有效区域里 的x坐标是200px,y坐标是0;而screenX,screenY则是相对以整个显示屏幕区域而言的。

上图中 相对于“整个显示屏幕区域而言” 鼠标的x坐标是200px,y坐标是85px,所以screenX和screenY正是获取这两个值,所以screenX是200px,screenY是85px

当我的鼠标移动到div的右下角的时候,screeX是200px,screenY是185px,因为div本身的宽度我定义的时200px,高度100px;

接下来说一说offsetX和offsetY属性

offsetX :当鼠标事件发生时,鼠标相对于事件源x轴的位置

offsetY:当鼠标事件发生时,鼠标相对于事件源y轴的位置

当我们点击test按钮的时候触发onclick事件,这里test这个按钮就是事件源,所以通过offsetX和offsetY获取的坐标值就是相对于 test按钮这个事件源的;

Test按钮自身的宽100px高50px;为了容易理解,我特意给按钮添加个margin:50px让大家看得效果明显一些;

第一次鼠标是在接近test按钮的左上角点击

相信看到这里应该能明白offsetX和offsetY是获取的什么值了吧,获取的就是鼠标相对test这个按钮的x坐标和y坐标

版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/u014205965/article/details/45606797

JS之clientX,clientY,screenX,screenY,offsetX,offsetY区别的更多相关文章

  1. 元素位置pageX,pageY,clientX,clientY,scrollX,scrollY,screenX,screenY,offsetX,offsetY

    总结: event.clientX 设置或获取鼠标指针位置相对于当前窗口的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条. (可见区域)event.clientY 设置或获取鼠标指针位置相对于当 ...

  2. pageX,clientX,screenX,offsetX的区别

    pageX/pageY: 鼠标相对于整个页面的X/Y坐标,但IE不支持.以body元素为参考点. clientX/clientY: 鼠标在浏览器内容区域的X/Y坐标,不包含滚动条,即需要滚动条的地方不 ...

  3. 分清clientY pageY screenY layerY offsetY的区别

    分清clientY pageY screenY layerY offsetY的区别 在我们想要做出拖拽这个效果的时候,我们需要分清这几个属性的区别,这几个属性都是计算鼠标点击的偏移值,我们需要对其进行 ...

  4. 【js】clientY pageY screenY layerY offsetY的区别

    clientY 指的是距离可视页面左上角的距离 pageY 指的是距离可视页面左上角的距离(不受页面滚动影响) screenY 指的是距离屏幕左上角的距离 layerY 指的是找到它或它父级元素中最近 ...

  5. javascript中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX

    原文:https://www.cnblogs.com/ifworld/p/7605954.html 元素宽高 offsetWidth //返回元素的宽度(包括元素宽度.内边距和边框,不包括外边距) o ...

  6. pageX、clientX、screenX、offsetX、layerX、x

    参考:http://www.cnblogs.com/xesam/archive/2011/12/08/2280509.html chrome: e.pageX--相对整个页面的坐标e.layerX-- ...

  7. 【转】pageX、clientX、screenX、offsetX、layerX、x

    参考:http://www.cnblogs.com/xesam/archive/2011/12/08/2280509.html chrome: e.pageX——相对整个页面的坐标e.layerX—— ...

  8. [转]pageX、clientX、screenX、offsetX、layerX、x

    参考:http://www.cnblogs.com/xesam/archive/2011/12/08/2280509.html chrome: e.pageX——相对整个页面的坐标e.layerX—— ...

  9. clientX, clientY,offsetX, offsetY,screenX, screenY, x, y

    clientX, clientY是鼠标当前相对于网页的位置,当鼠标位于页面左上角时clientX=0, clientY=0: offsetX, offsetY是鼠标当前相对于网页中的某一区域的位置,当 ...

随机推荐

  1. 新建Eclipse的web工程目录结构和MyEclipse相似的设置

    新建一个文件名为“org.eclipse.wst.web.prefs”的文件 里面设置的内容如下: “webContent=webRoot%proj%\bin= %webRoot%\WEB-INF\c ...

  2. 版本管理工具小乌龟TortoiseGit的安装和使用(2)

    内容中包含 base64string 图片造成字符过多,拒绝显示

  3. 201671010142 2017-2 《java第八章学习感悟》

    泛型程序设计 学会如何定义简单泛型类,引入了一个变量T,用<>,并放在类名的后面. 如何定义一个带有类型参数的简单方法.当调用一个泛型方法时,在方法名前的尖括号中放入具体的类型.

  4. Python3 open函数

    Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open() 方法一定要保证关闭 ...

  5. python中的unique()

    a = np.unique(A) 对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表 import numpy as np A = [1, ...

  6. PAT A1103

    PAT A1103 标签(空格分隔): PAT 解题思路: DFS #include <cstdio> #include <vector> using namespace st ...

  7. Ubuntu下安装git

    1 安装 官网上提供的命令是: $ sudo add-apt-repository ppa:git-core/ppa 中间暂停时,按回车键Enter继续安装. $ sudo apt-get updat ...

  8. SharePoint Framework 在web部件中使用已存在的JavaScript库 - JavaScript库的格式

    博客地址:http://blog.csdn.net/FoxDave JavaScript库格式 不同的JavaScript库的编译和打包方式各不相同.一些是以模块的方式打包的,而另一些是以纯脚本运行在 ...

  9. c++给数组整体赋初值

    1.memset memset是计算机中C/C++语言初始化函数.作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作. 头文件: #include<cstri ...

  10. C# 读取 appconfig文件配置数据库连接字符串,和配置文件

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <connecti ...