资讯专栏INFORMATION COLUMN

鼠标点击的各种坐标 (事件对象)

xiongzenghui / 2358人阅读

摘要:返回事件发生时,鼠标指针相对于浏览器窗口可视区域的水平垂直窗口坐标。可视区域不包括工具栏和滚动条,事件和标准事件都定义了这个属性返回鼠标指针的位置,类似于,但它们使用的是文档坐标而非窗口坐标。是相对于被点击了的元素。

e.clientX,e.clientY
返回事件发生时,鼠标指针相对于浏览器窗口可视区域的水平(垂直)窗口坐标。可视区域不包括工具栏和滚动条,IE事件和标准事件都定义了这2个属性


e.pageX e.pageY
返回鼠标指针的位置,类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。这2个属性不是标准属性,但得到了广泛支持。IE事件中没有这2个属性


e.offsetX e.offsetY
返回鼠标指针的位置,相对于事件源元素的水平(垂直坐标),只有IE有这两个属性,标准事件没有对应的属性


e.screenX e.screenY
返回事件发生时,鼠标指针相对于用户显示器屏幕的左上角水平(垂直)坐标


e.layerXe.layerY


一.鼠标点击

        window.onload = function(e){
            var box = document.getElementById("box");
            box.onclick = function(e){
                console.log("e.clientX,e.clientY: " + e.clientX,e.clientY);
                console.log("e.offsetX,e.offsetY: " + e.offsetX,e.offsetY);
                console.log("e.pageX,e.pageY: " + e.pageX,e.pageY);
                console.log("e.screenX,e.screenY: " + e.screenX,e.screenY);
                console.log("e.layerX,e.layerY: " + e.layerX,e.layerY);
            }
        }

二、不同浏览器对这些属性的支持:


三、图解 event.offsetX,event.clientX,event.pageX,event.screenX属性


四、图解 event.layerX,event.layerY 属性


五、图解 event.layerX,event.layerY 属性


六:详细文字描述

chrome:

e.pageX——相对整个页面的坐标 
e.layerX——相对当前坐标系的border左上角开始的坐标
e.offsetX——相对当前坐标系的border左上角开始的坐标
e.clientX——相对可视区域的坐标 e.x——相对可视区域的坐标

ff:(firefox)

e.pageX——相对整个页面的坐标
e.layerX——相对当前坐标系的border左上角开始的坐标
e.offsetX——无
e.clientX——相对可视区域的坐标
e.x——无

opera:

e.pageX——相对整个页面的坐标
e.layerX——无
e.offsetX——相对当前坐标系的内容区域左上角开始的坐标
e.clientX——相对可视区域的坐标
e.x——相对可视区域的坐标

safari:(这个和chrome是一样的)

e.pageX——相对整个页面的坐标
e.layerX——相对当前坐标系的border左上角开始的坐标
e.offsetX——相对当前坐标系的border左上角开始的坐标
e.clientX——相对可视区域的坐标
e.x——相对可视区域的坐标

IE9:

e.pageX——相对整个页面的坐标
e.layerX——相对当前坐标系的border左上角开始的坐标 + 滚动条滚过的距离(这个NB轰轰了····=。=)
e.offsetX——相对当前坐标系的内容区域左上角开始的坐标
e.clientX——相对可视区域的坐标
e.x——相对当前坐标系的border左上角开始

IE8:

e.pageX——无
e.layerX——无
e.offsetX——相对当前坐标系的内容区域左上角开始的坐标
e.clientX——相对可视区域的坐标
e.x——相对当前坐标系的border左上角开始

IE7:

e.pageX——无
e.layerX——无
e.offsetX——相对当前坐标系的内容区域左上角开始的坐标
e.clientX——相对可视区域的坐标
e.x——相对当前坐标系的border左上角开始

IE6:

e.pageX——无
e.layerX——无
e.offsetX——相对当前坐标系的内容区域左上角开始的坐标
e.clientX——相对可视区域的坐标
e.x——相对当前坐标系的border左上角开始


所以考虑到兼容的时候必须这么写,

        function getEventPosition(ev){   
           var x, y;   
           if (ev.layerX || ev.layerX == 0) {   
               x = ev.layerX;   
               y = ev.layerY;   
           }else if (ev.offsetX || ev.offsetX == 0) { // Opera   
               x = ev.offsetX;   
               y = ev.offsetY;   
           }   
           return {x: x, y: y};   
        }

PageX和clientX
pageX指鼠标在页面上的位置,以页面左侧为参考点
clientX指可视区域内离左侧的距离,以滚动条滚动到的位置为参考点。各个浏览器相同。
即当有滚动条时clientX 小于 pageX


screenX
鼠标在屏幕中的位置,指的是鼠标到电脑屏幕左侧的距离。 各个浏览器相同。
与clientX的区别是clientX是到浏览器的距离。
例如:当网页缩小,拖动到屏幕中间时,screnX 大于 clientX


offsetX和layerX
为了兼容浏览器,layerX是FF、chrome识别,offsetX是除了FF之外。

如果触发元素设置了position,则offsetX等于layerX
如果页面有滚动条,添加滚动的距离。

layerX:FF特有,是相对于父元素的位置,鼠标相对于“触发事件的元素的层级关系中离该元素最近的,设置了position的父元素”的边界的位置,从border的左上角开始定位,即如果这个父

元素存在border,则坐标原点在border的左上角,而不是内容区域的左上角。
offsetX:IE特有,鼠标相对于“触发事件的元素”的位置,从内容区域左上角开始定位,不是从border左上角开始!这个属性比较好用,用来判断鼠标点在一个元素中的哪个位置很方便,FF没有直接替换的属性。

点击li,如果UL设置了position则layerX相对于UL,如果没有则向父级冒泡寻找设置了position的元素,直到根节点body。
offsetX是相对于被点击了的LI元素。


e.x
FF不识别
到可视区域的距离,有无滚动条相同,同clientX
opera,chrome和safari的event.x返回值和event.clientX相同
IE8910event.x返回值和event.clientX相同
ie7e.x比e.clientX少2px

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/53606.html

相关文章

  • 鼠标点击各种坐标 (事件对象)

    摘要:返回事件发生时,鼠标指针相对于浏览器窗口可视区域的水平垂直窗口坐标。可视区域不包括工具栏和滚动条,事件和标准事件都定义了这个属性返回鼠标指针的位置,类似于,但它们使用的是文档坐标而非窗口坐标。是相对于被点击了的元素。 e.clientX,e.clientY返回事件发生时,鼠标指针相对于浏览器窗口可视区域的水平(垂直)窗口坐标。可视区域不包括工具栏和滚动条,IE事件和标准事件都定义了这2...

    xushaojieaaa 评论0 收藏0
  • JavaScript中各种宽高以及位置总结

    摘要:和这一对属性是用来读取元素的的宽度和高度的。第二部分对象在中,对于元素的运动的操作通常都会涉及到对象,而对象也存在很多位置属性,且由于浏览器兼容性问题会导致这些属性间相互混淆,这里一一讲解。文章转自中的各种宽高以及位置总结 在javascript中操作dom节点让其运动的时候,常常会涉及到各种宽高以及位置坐标等概念,如果不能很好地理解这些属性所代表的意义,就不能理解js的运动原理,同时...

    microelec 评论0 收藏0
  • HTML元素和事件对象各种宽高和位置

    摘要:元素和事件对象中的各种宽高和位置标签经常被一堆的弄混,统一整理一下。元素中的宽高和位置属性表示元素的内部宽度,以像素计。表示元素实际占用的高度,包括其边框,内边距和元素内容。 HTML元素和事件对象中的各种宽高和位置 标签: js [TOC] 经常被一堆的xxxWidth,xxxLeft弄混,统一整理一下。 1. HTML元素中的宽高和位置属性 clientWidth 表示元素的内...

    gggggggbong 评论0 收藏0
  • JS进阶篇4---原生JS实现对元素拖拽

    摘要:原生实现对元素的拖拽一背景介绍此处为铺垫内容,可跳过随着前端的不断发展,各种各样的前端规范和新知识新技术层出不穷,极大地拓展了开发者的操作空间,也大大地提升了用户体验。 原生 JS 实现对 html 元素的拖拽 一、背景介绍 【此处为铺垫内容,可跳过】 随着 Web 前端的不断发展,各种各样的前端规范和新知识、新技术层出不穷,极大地拓展了开发者的操作空间,也大大地提升了用户体验。而随着...

    evin2016 评论0 收藏0
  • JS进阶篇4---原生JS实现对元素拖拽

    摘要:原生实现对元素的拖拽一背景介绍此处为铺垫内容,可跳过随着前端的不断发展,各种各样的前端规范和新知识新技术层出不穷,极大地拓展了开发者的操作空间,也大大地提升了用户体验。 原生 JS 实现对 html 元素的拖拽 一、背景介绍 【此处为铺垫内容,可跳过】 随着 Web 前端的不断发展,各种各样的前端规范和新知识、新技术层出不穷,极大地拓展了开发者的操作空间,也大大地提升了用户体验。而随着...

    phoenixsky 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<