JS魔法堂:关于元素位置和鼠标位置的属性

简介:

一、关于鼠标位置的属性                        

  1. 触发鼠标事件的区域

      盒子模型中的border,padding,content区域会触发鼠标事件,点击margin区域将不触发鼠标事件。

  2. 鼠标事件对象MouseEvent下的属性

      [a].  evt.pageX/Y :以页面左上角为参考点,表示当前触发点离页面左上角的水平和垂直距离。

      注意:1. IE5.5~8不支持该属性,polyfill方法pageX = clientX + scrollLeft

                 2. 页面左上角并不是指html或body标签的盒子模型border外边框的左上角,而是document的左上角,是不能通过css来调整位置的。

      [b].  evt.clientX/Y :以可视区域左上角为参考点,表示当前触发点离可视区域左上角的水平和垂直距离。

       注意:所有浏览器均支持

      [c].  evt.offsetX/Y :以触发点所在dom的左上角为参考点,表示当前触发点离触发点所在dom的左上角的水平和垂直距离。

      注意:1. Chrome下将以dom的border外边框的左上角作为参考点;

                 2. IE5.5~9下将以dom的content的左上角作为参考点;

                 3. FF不支持该属性

      [d].  evt.screenX/Y :以屏幕左上角为参考点,表示当前触发点离屏幕左上角的水平和垂直距离。

      注意:所有浏览器均支持

     [e].  evt.layerX/Y :当触发点所在的dom的position为relative或absolute时,则以dom的border外边框的左上角作为参考点,否则就以页面左上角为参考点(与pageX一致了)。

     注意:IE5.5~8不支持

 

二、关于元素位置的属性                        

 

1.  HTMLElement.clientLeft/Top :元素左border的宽度和上border的高度。

2.  HTMLElement.clientWidth/Height :元素content+padding-滚动条的宽度或高度。

3.  HTMLElement.offsetWidth/Height :元素content+padding+border的宽度或高度。

4.  HTMLElement.scrollLeft/Top :元素水平、垂直滚动条切去的宽度或高度。

注意:FF在W3C标准模式下,document.documentElement.scrollLeft/Top获取页面滚动条切去的部分;W3C怪异模式下,则采用body.scrollLeft/Top来获取

5.  HTMLElement.offsetParent :最近一个已进行CSS定位的祖先元素。

6.  HTMLElement.offsetTop/Left :元素border外边框的左上角离offsetParent的padding外边框的左上角的垂直、水平距离。若offsetParent为body或 html标签,且body的position不为relative或absolute时,offsetTop/Left为元素border外边框的左上角 离页面左上角的垂直、水平距离。若body的position为relative或absolute时,则为元素border外边框的左上角离 offsetParent的padding外边框的左上角的垂直、水平距离。

注意:IE,FF,Chrome下,怪异模式和标准模式的最顶层offsetParent均为body元素,body.offsetParent和document.documentElement.offsetParent均为null。

 

三、总结                              

   在写拖拽层和polyfill html5特性placeholder时,上述内容为基础知识,同时会减少很多不必要的代码。

目录
相关文章
|
10天前
|
监控 JavaScript 前端开发
确定使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript
【10月更文挑战第24天】选择使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript 是一个需要综合考虑多个因素的决策。需要根据脚本之间的依赖关系、页面加载性能要求、脚本的功能和重要性等因素来进行权衡。在实际应用中,需要通过测试和验证来确定最适合的加载方式,以提供更好的用户体验和页面性能。
|
3月前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
44 1
|
10天前
|
监控 JavaScript 前端开发
使用 `defer` 属性异步加载 JavaScript
【10月更文挑战第24天】使用 `defer` 属性异步加载 JavaScript 是一种有效的提高页面性能和用户体验的方法。通过合理设置 `defer` 属性,可以在不影响页面渲染的情况下异步加载脚本,并确保脚本的执行顺序。在实际应用中,需要根据具体情况选择合适的加载方式,并注意处理可能出现的问题,以确保页面能够正常加载和执行。
|
28天前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
40 4
|
30天前
|
缓存 JavaScript 前端开发
探索Vue.js中的计算属性与侦听器
【10月更文挑战第5天】探索Vue.js中的计算属性与侦听器
19 1
|
27天前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
18 0
|
2月前
|
JavaScript 前端开发
JavaScript基础知识-枚举对象中的属性
关于JavaScript基础知识中如何枚举对象属性的介绍。
30 1
JavaScript基础知识-枚举对象中的属性
|
30天前
|
缓存 JavaScript 前端开发
深入理解Vue.js中的计算属性与侦听属性
【10月更文挑战第5天】深入理解Vue.js中的计算属性与侦听属性
20 0
|
30天前
|
缓存 JavaScript 前端开发
探索Vue.js中的计算属性与侦听器:深入理解与实践
【10月更文挑战第5天】探索Vue.js中的计算属性与侦听器:深入理解与实践
17 0
|
2月前
|
存储 JavaScript 前端开发
JS中的数组有哪些常用操作函数和属性
【9月更文挑战第7天】JS中的数组有哪些常用操作函数和属性
16 1