首页 > 其他分享 >图解JS事件对象screenX、clientX、pageX, offsetX区别

图解JS事件对象screenX、clientX、pageX, offsetX区别

时间:2022-10-30 14:44:08浏览次数:77  
标签:clientX 鼠标 offsetX JS 点击 左上角 event

screenX、clientX、pageX 和 offsetX的区别

1、screenX 和screenY
参照点:电脑屏幕左上角
screenX:鼠标点击位置相对于电脑屏幕左上角的水平偏移量
screenY:鼠标点击位置相对于电脑屏幕左上角的垂直偏移量

2、clientX和clientY
参照点:浏览器内容区域左上角
clientX:鼠标点击位置相对于浏览器可视区域的水平偏移量(不会计算水平滚动的距离)
clientY:鼠标点击位置相对于浏览器可视区域的垂直偏移量(不会计算垂直滚动条的距离)

3、pageX和pageY
参照点:网页的左上角
pageX:鼠标点击位置相对于网页左上角的水平偏移量,也就是clientX加上水平滚动条的距离
pageY:鼠标点击位置相对于网页左上角的垂直平偏移量,也就是clientY加上垂直滚动条的距离

4、offsetX和offsetY
offsetX:鼠标点击位置相对于触发事件对象的水平距离
offsetY:鼠标点击位置相对于触发事件对象的垂直距离

image

event.x

event.x 代表点击的点距离可视区左边框的距离,而它在不同浏览器处理结果是不一样的,首先看以下代码

<body>
    <div>
        外
        <div  id="content" style="margin-top:50px;padding:15px;height:20px">
            内
        </div>
    </div>
</body>

这种情况,event.x在谷歌和IE结果是一样的,但是如果在外层div加上定位:

<body>
    <div style="position:relative">
        外
        <div  id="content" style="margin-top:50px;padding:15px;height:20px">
            内
        </div>
    </div>
</body>

这时候,谷歌还是不变的,但是IE就不同了,它的event.x返回的是点击位置到外层div的距离,如下图所示:
image

考虑到兼容性,event.x不建议使用,event.x可以用event.clientX 代替

event.layerX

layerX/Y获取到的是触专发点相对被触发dom左上角的距离,数值与offsetX/Y相同,这个变量就是firefox用来替代offsetX/Y的,基准点为边框左上角,但是有个条件就是,被触发的dom需要设置为position:relative或者position:absolute,否则会返回相对html文档区域左上角的距离:
image

考虑到兼容性,layerX不建议使用,layerX可以用offsetX代替

参考:
1、https://blog.csdn.net/qq_38128179/article/details/84647298
2、https://blog.csdn.net/qq_39816673/article/details/106018053

标签:clientX,鼠标,offsetX,JS,点击,左上角,event
From: https://www.cnblogs.com/hanliukui/p/16841277.html

相关文章

  • Vue学习笔记之vue.js 两个等号 == 和三个等号===的区别 数字0和空字符串
    vuejavascript等号=====数字0空字符串/**==用于比较两者是否相等,忽略数据类型===用于更严谨的比较,值和值的数据类型都需要同时比较*/<!DOCT......
  • JS之循环发送请求代码优化
    需求:将数组中的值作为参数,循环调用新增接口实现批量导入功能。因为接口调用有时间间隔限制,避免误操作,所以需要设置接口请求的间隔时间。原代码如下:constrecursive=(arr,......
  • js数据处理4
    <template><ModuleBox2title="数据趋势图"bgType="2":cityShow="true"moduleType="sjqs":styleObj="styleObj"><divclass="echarts-box">......
  • js获取当前日期的前七天
    //获取当前日期的前7天getDays(){letoneDay=24*60*60*1000letendTime=newDate(Date.now()-oneDay)endTime=this.formatterDate(en......
  • js一键切换dark模式
    js一键切换dark模式//初始化$(function(){lettheme=$.cookie('theme');if(theme=="dark"){$("body").addClass('dark');$("#theme").addClass('......
  • 使用Three.js 心得系列一 如何创建三维网格三、使用Three.js 心得系列三 Three.js 如
    一、使用Three.js心得系列一如何创建三维网格二、使用Three.js心得系列二如何改变三维场景的GlTF模型的位置三、使用Three.js心得系列三Three.js如何加载GlTF文件 ......
  • 什么是Json,如何使用?
    JavaScriptObjectNotation:javascript的对象表示法。这是一种能传递对象的语法,可以是键值对,数组,以及其他对象。轻量级的数据传输方法。json格式:{key:{key:[{......
  • FastJson序列化和反序列化问题记录
    序列化与反序列化问题调用外部接口,http://100.111.55.67:9999/cmdb/v0.2.0/departments?page_size=1000,返回数据格式如下:{"code":0,"content":[{......
  • JS 删除数组中某个元素
    1、首先查找出元素在数组中的位置即索引(数组中本来就有indexOf()方法,方便学习给出代码):Array.prototype.indexOf=function(val){for(vari=0;i<this.len......
  • 使用vue、elementUI开发一个js SDK
    目录背景介绍实操步骤初始化项目1.初始化vue项目2.查阅vue-cli构建目标内容3.具体操作步骤1.在package.json文件中添加命令2.添加入口文件背景介绍本文主要介绍使......