js获取鼠标当前所在页面位置
内容提要
文章介绍用JavaScript获取鼠标在页面中的位置:通过getEvent兼容IE与Firefox,再按浏览器差异用layerX/layerY或x/y加滚动偏移计算坐标,最后用show函数弹出位置。作者指出嵌套页面中IE9与其他浏览器定位基准不同,兼容性仍待改进。
延伸解读
兼容性处理的核心思路
文章通过getEvent函数解决IE与Firefox的事件对象获取差异:IE使用window.event,Firefox则需从调用栈中回溯获取事件对象。这种写法反映了早期浏览器兼容的常见模式,即通过检测document.all和遍历caller来适配不同环境。读者可借此理解事件对象获取的底层逻辑,但需注意现代浏览器已统一支持事件参数传递,此类兼容代码多用于维护旧项目。
坐标计算中的浏览器差异
获取鼠标位置时,Firefox使用layerX/layerY,而IE使用x/y,并分别加上滚动偏移。但代码中Firefox的mouseY误用了scrollLeft,这可能导致垂直坐标计算错误。实际开发中需注意滚动偏移应分别对应scrollTop和scrollLeft,否则在页面滚动时坐标会不准确。这提醒我们,即使是简单的坐标获取,也需仔细核对每个属性的含义。
嵌套页面下的定位基准问题
作者指出,当页面B嵌套在页面A中时,IE9与其他浏览器(包括其他IE版本)的定位基准不同:IE9基于浏览器窗口定位,而Firefox等基于当前嵌套页面定位。这意味着同一段代码在不同浏览器中可能返回不同的坐标值,导致功能不一致。若需在嵌套场景下使用,开发者需针对IE9做特殊处理,或考虑使用更现代的API来统一基准。
Q&A
如何用JavaScript获取鼠标在页面中的位置?
可以通过getEvent函数兼容IE和Firefox获取事件对象,然后根据浏览器差异计算坐标:Firefox使用e.layerX和e.layerY加上滚动偏移,其他浏览器使用e.x和e.y加上滚动偏移,最后返回{x, y}对象。
getEvent函数是如何兼容IE和Firefox的?
getEvent函数先检查document.all,如果存在则返回window.event(IE方式);否则通过getEvent.caller遍历调用栈,查找第一个参数为事件对象的调用,从而获取事件对象,兼容Firefox等浏览器。
在Firefox和其他浏览器中,计算鼠标坐标有什么不同?
Firefox使用e.layerX和e.layerY加上document.body.scrollLeft(注意代码中Y方向也用了scrollLeft,可能为笔误)来计算;其他浏览器使用e.x和e.y加上document.body.scrollLeft和scrollTop来计算。
为什么在嵌套页面中获取鼠标位置会有兼容性问题?
对于嵌套在一个页面A中的B页面,IE9是根据浏览器窗口来定位鼠标位置的,而Firefox及其他浏览器是根据当前嵌套页面(即B页面)来定位的,导致定位基准不同,兼容性有待改进。
如何弹出显示当前鼠标在页面中的位置?
可以调用show函数,它内部调用getMouseLocation获取坐标,然后使用alert弹出格式为“x:y”的坐标信息。
这段代码在IE9和其他浏览器中的兼容性如何?
代码在普通页面下可以兼容IE和Firefox,但在嵌套页面中,IE9与其他浏览器(包括其他IE版本)的定位基准不同,IE9基于浏览器窗口,而Firefox等基于嵌套页面,因此兼容性仍待改进。