热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS基本篇相识JS的clientX、pageX、screenX等方法来猎取鼠标坐标详解

在一些DOM操纵中我们常常会跟元素的位置打交道,鼠标交互式一个常常用到的方面,使人扫兴的是差别的浏览器下会有差别的效果以至是有的浏览器下没效果,这篇文章就上鼠标点击位置坐标猎取做一

在一些DOM操纵中我们常常会跟元素的位置打交道,鼠标交互式一个常常用到的方面,使人扫兴的是差别的浏览器下会有差别的效果以至是有的浏览器下没效果,这篇文章就上鼠标点击位置坐标猎取做一些简朴的总结,没特别声明代码在IE8,FireFox,Chrome下举行测试兼容

要领引见

关于js鼠标事宜综合各大浏览器能猎取到坐标的属性统共以下五种:

  • event.clientX/Y
  • event.pageX/Y
  • event.offsetX/Y
  • event.layerX/Y
  • event.screenX/Y

clientX/Y

clientX/Y猎取到的是触发点相对浏览器可视地区左上角间隔,不随页面转动而转变。
兼容性:一切浏览器均支撑

pageX/Y

pageX/Y猎取到的是触发点相对文档地区左上角间隔,会跟着页面转动而转变
兼容性:除IE6/7/8不支撑外,其他浏览器均支撑

offsetX/Y

offsetX/Y猎取到是触发点相对被触发dom的左上角间隔,不过左上角基准点在差别浏览器中有区分,个中在IE中以内容区左上角为基准点不包括边框,假如触发点在边框上会返回负值,而chrome中以边框左上角为基准点。

兼容性:IE一切版本,chrome,Safari均圆满支撑,Firefox不支撑

layerX/Y

layerX/Y猎取到的是触发点相对被触发dom左上角的间隔,数值与offsetX/Y雷同,这个变量就是firefox用来替换offsetX/Y的,基准点为边框左上角,然则有个前提就是,被触发的dom须要设置为position:relative或许position:absolute,否则会返回相对html文档地区左上角的间隔。

兼容性:IE6/7/8不支撑,opera不支撑,IE9/10和Chrome、Safari均支撑

screenX/Y

screenX/Y猎取到的是触发点相对显示器屏幕左上角的间隔,不随页面转动而转变。
兼容性:一切浏览器均支撑

一张图来诠释,如图所示:
《JS基本篇--相识JS的clientX、pageX、screenX等方法来猎取鼠标坐标详解》

鼠标点击位置坐标

相对于屏幕

假如是涉及到鼠标点击肯定位置相对比较简朴,猎取到鼠标点击事宜后,事宜screenX,screenY猎取的是点击位置相对于屏幕的左侧距与上边距,不斟酌iframe要素,差别浏览器下表现的还算一致。

function getMousePos(event) {
var e = event || window.event;
return {'x':e.screenX,'y':screenY}
}

相对浏览器窗口

简朴代码即可完成,然则这是还不够,由于绝大多数情况下我们愿望猎取鼠标点击位置相对于浏览器窗口的坐标,event的clientX,clientY属性离别示意鼠标点击位置相对于文档的左侧距,上边距。因而相似的我们写出了如许的代码

function getMousePos(event) {
var e = event || window.event;
return {'x':e.clientX,'y':clientY}
}

相对文档

简朴测试也没什么题目,然则clientX与clientY猎取的是相对于当前屏幕的坐标,疏忽页面转动要素,这在许多前提下很有效,但当我们须要斟酌页面转动,也就是相对于文档(body元素)的坐标时怎样办呢?加上转动的位移就能够了,下边我们尝尝怎样盘算页面转动的位移。

其实在Firefox下题目会简朴许多,由于Firefox支撑属性pageX,与pageY属性,这两个属性已把页面转动盘算在内了。

在Chrome能够经由过程document.body.scrollLeftdocument.body.scrollTop盘算出页面转动位移,而在IE下能够经由过程document.documentElement.scrollLeft document.documentElement.scrollTop

function getMousePos(event) {
var e = event || window.event;
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
var x = e.pageX || e.clientX + scrollX;
var y = e.pageY || e.clientY + scrollY;
//alert('x: ' + x + '\ny: ' + y);
return { 'x': x, 'y': y };
}

推荐阅读
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 利用REM实现移动端布局的高效适配技巧
    在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本文详细探讨了使用纯JavaScript开发经典贪吃蛇游戏的技术细节和实现方法。通过具体的代码示例,深入解析了游戏逻辑、动画效果及用户交互的实现过程,为开发者提供了宝贵的参考和实践经验。 ... [详细]
  • 本文深入探讨了JavaScript中`this`关键字的多种使用方法和技巧。首先,分析了`this`作为全局变量时的行为;接着,讨论了其在对象方法调用中的表现;然后,介绍了`this`在构造函数中的作用;最后,详细解释了通过`apply`等方法改变`this`指向的机制。文章旨在帮助开发者更好地理解和应用`this`关键字,提高代码的灵活性和可维护性。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • Webdriver中元素定位的多种技术与策略
    在Webdriver中,元素定位是自动化测试的关键环节。本文详细介绍了8种常用的元素定位技术与策略,包括ID、名称、标签名、类名、链接文本、部分链接文本、XPath和CSS选择器。每种方法都有其独特的优势和适用场景,通过合理选择和组合使用,可以显著提高测试脚本的稳定性和效率。此外,文章还探讨了在复杂页面结构中如何灵活运用这些定位技术,以应对各种挑战。 ... [详细]
author-avatar
寡凫lo单鹄官方
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有