关于鼠标事件的screenY,pageY,clientY,layerY,offsetY属性 (详细图解)

screenY

鼠标相对于显示器屏幕左上角的偏移

pageY

鼠标相对于页面左上角的偏移 (其值不会受滚动条的影响)

IE9之下并不支持这个属性

但是可以写点代码计算出来。 jQuery中的实现:

1 // Calculate pageX/Y if missing and clientX/Y available
2 if ( event.pageX == null && original.clientX != null ) {
3     eventDoc = event.target.ownerDocument || document;
4     doc = eventDoc.documentElement;
5     body = eventDoc.body;
6     event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft||body&&body.clientLeft || 0 );
7     event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
8 }    

简单点实现就是。

鼠标相对于浏览器视口的偏移加上文档的滚动条隐藏的高度减去文档的clientTop.

1 var pageY = event.clientY +document.documentElement. scrollTop-document.documentElement.clientTop

为何要减去document.documentElement.clientTop

这是IE8之下浏览器特有的文档的偏移,即使设置html,body的padding和margin为0也不会影响其值。

在iE7下测试,得到

1 document.documentElement.clientTop --> 2px  document.documentElement.clientLeft --> 2px
2
3 document.bocy.clientTop --> 0px  document.body.clientLeft --> 0px

clientY

鼠标相对于浏览器视口左上角的偏移

注意clientY和pageY的区别,clientY在页面无滚动条的情况下值等同于pageY

----------------------------------分割-----------------------------------------------

layerY

如果元素的position样式不是默认的static,我们说这个元素具有定位属性。

在当前触发鼠标事件的元素和它的祖先元素中找到最近的具有定位属性的元素,计算鼠标与其的偏移值,以找到元素的border的左上角的外交点作为相对点。如果找不到具有定位属性的元素,那么就相对于当前页面计算偏移,此时等同于pageY。

  IE9之下并不支持这个属性,但是可以用其特有的offsetY替换

offsetY 

    IE专有的属性

offsetY和layerY的不同在于,前者的在计算偏移值时,相对于元素的border左上角的内交点,因此当鼠标位于元素的border上时,偏移值是一个负值。 另外offsetY并不在乎触发事件的元素是否有定位属性,它总是相对于触发事件的元素来计算偏移值。

     鉴于layerY和offsetY的不同,要兼容的使用二者要注意

  1.触发事件的元素一定要设置定位属性。

   2.在元素具有上边框border-top的情况下, layerY比offsetY的值多一个border-top的大小。

1 var offsetY = event.offsetY||(event.layerY +element.borderTopWidth);
2  //注意这里的element.borderTopWidth需要替换成计算出的元素的上边框宽度。

通过layerY和offsetY属性,可以很方便的计算鼠标相对于绑定鼠标事件元素的偏移,这在某些时候非常有用。

这里详细说了鼠标竖直方向的偏移属性,水平方向的偏移类似,不再讨论。

时间: 2024-10-27 05:58:11

关于鼠标事件的screenY,pageY,clientY,layerY,offsetY属性 (详细图解)的相关文章

如何使用Vue实现拖拽效果pageY、screenY、clientY、layerY、offsetY(转)

如何使用Vue实现拖拽效果pageY.screenY.clientY.layerY.offsetY 2018年06月28日 17:34:42 唐策 阅读数:377 标签: 如何使用Vue实现拖拽效果pageY.screenY.cli 更多 个人分类: vue-js 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29132907/article/details/80846652 1.效果图 2.分清clientY pageY screenY

这样理解比较好吧(pageX,pageY,clientX,clientY,eventX,eventY,scrollX,scrollY,screenX,screenY,event.offsetX,event.offsetY,offsetLeft,style.left)

1 pageX,pageY:鼠标指针相对于当前窗口的X,Y坐标,计算区域包括窗口自身的控件和滚动条.(火狐特有) 2 event.clientX,event.clientY:鼠标指针相对于当前窗口的X,Y坐标,和page 不同的是计算区域不包括窗口自身的控件和滚动条. 3 event.X和event.Y:相对于当前窗口,设置或获取鼠标指针位置相对于父文档的x,y像素坐标(可惜火狐不支持,人生总要有些遗憾也是没办法的). 4 scrollX,scrollY:望文生义,相对于浏览器而言的,随滚动条移

dom 鼠标事件中的坐标位置

1. 客户区坐标位置 鼠标事件都是在浏览器视口中的特定位置上发生的.这个位置信息保存在事件对象的 clientX 和 clientY 属性中.所有浏览器都支持这两个属性,它们的值表示事件发生时鼠标指针在视口中的水平 和垂直坐标.这些值中不包括页面滚动的距离,因此这个位置并不表示鼠标在页面上的位置. 2. 页面坐标位置 通过客户区坐标能够知道鼠标是在视口中什么位置发生的,而页面坐标通过事件对象的 pageX 和 pageY 属性,能告诉你事件是在页面中的什么位置发生的.换句话说,这两个属性表示鼠标

深入学习jQuery鼠标事件

前面的话 鼠标事件是DOM事件中最常用的事件,jQuery对鼠标事件进行了封装和扩展.本文将详细介绍jQuery鼠标事件 类型 鼠标事件共10类,包括click.contextmenu.dblclick.mousedown.mouseup.mousemove.mouseover.mouseout.mouseenter和mouseleave click 当用户按下并释放鼠标按键或其他方式"激活"元素时触发 contextmenu 可以取消的事件,当上下文菜单即将出现时触发.当前浏览器在鼠

鼠标事件(二)

在鼠标事件的事件对象中,相应的保存着与该事件对应的信息. 当鼠标主按钮(默认左键)按下并抬起时,触发click事件,这个信息是固定的.但当发生mousedown和mouseup时,event就会有一个button属性来保存按下或抬起的键.当event.button为0时是主键(左键),为1时是滚轮,为2时是次键(右键).然而,IE8则保存完全不同的信息而且比较复杂: 0:没有按下鼠标键 1:按下鼠标主键 2:按下鼠标次键 3:按下鼠标主键和次键 4:按下鼠标滚轮 5:按下鼠标主键和滚轮 6:按钮

鼠标事件-MouseEvent与addEventListener的用法(转)

altkey : 触发鼠标事件时是否alt 按键被按下,如果按下,则返回true,否则返回 fasle. button:  事件属性返回一个阿拉伯数字 , 0代表 按下 左键 ,1 代表按下 滚轮 ,2 代表按下 右键. offsetX.offsetY :事件属性返回触发事件时 鼠标相对于事件源元素 的X,Y坐标,标准事件没有对应的属性. clientX.clientY : 事件属性返回当事件被触发时鼠标指针相对于浏览器页面(或客户区)的水平坐标.垂直坐标. pageX.pageY:事件属性返回

JavaScript的事件对象_鼠标事件

鼠标事件是 Web 上面最常用的一类事件,毕竟鼠标还是最主要的定位设备.那么通过事件对象可以获取到鼠标按钮信息和屏幕坐标获取等. 一.鼠标按钮 只有在主鼠标按钮被单击时(常规一般是鼠标左键)才会触发 click 事件,因此检测按钮的信息并不是必要的. 但对于 mousedown 和 mouseup 事件来说,则在其 event 对象存在一个 button 属性,表示按下或释放按钮. <script type="text/javascript"> window.onload

“穿透”层的鼠标事件

“穿透”层的鼠标事件 标题可能不是一读让人容易明白,上张图(转载的) 需要实现如下的效果,有一个浮动层,需要层级在它之下的一个元素也能照常响应相应的事件 一个100*100的元素,边框为1px solid #406c99,它有两个事件(鼠标移入.鼠标移出): onmouseover="this.style.borderColor='#f00';" onmouseout="this.style.borderColor='#406c99';" 在不做特殊处理的情况下,它

关于鼠标事件和手机中的各个事件的几点总结

今天就来盘点一下鼠标的事件和手机触摸事件. 一.鼠标事件 onmousedown事件,当鼠标左键按下时触发. 如:当鼠标元素boxq1上按下时,改变它的背景颜色. var box1 = document.getElementById("box1"); box1.onmousedown = function(){ box1.style.backgroundColor = 'green'; }; 2. onmouseup事件,当鼠标左键抬起时触发.如:鼠标按下之前元素box1背景颜色为红色