首页 > 其他分享 >MoseEvent 中的几种坐标系

MoseEvent 中的几种坐标系

时间:2024-08-15 15:49:38浏览次数:6  
标签:event const MoseEvent 屏幕 几种 坐标 图层 坐标系 页面

本文主要内容:

  • screenX 和 screenY,
  • clientX 和 clientY / x 和 y
  • pageX 和 pageY
  • layerX 和 layerY

在处理鼠标事件(MouseEvent)时,了解不同的坐标系是非常重要的。常见的坐标系包括屏幕坐标(screen)、客户端坐标(client)、页面坐标(page)、图层坐标(layer),以及偏移坐标(offset)。这些坐标系各自有不同的用途,理解它们的区别有助于我们更精确地处理用户交互事件。本文将深入探讨这些坐标系的含义及其应用场景。

1. 屏幕坐标(Screen Coordinates)

屏幕坐标表示鼠标相对于整个屏幕的位置。无论网页在浏览器窗口中的位置如何,屏幕坐标始终相对于屏幕的左上角。它常用于需要了解鼠标在屏幕上绝对位置的场景,如跨屏幕的UI元素定位。

// 获取屏幕坐标
const screenX = event.screenX;
const screenY = event.screenY;

2. 客户端坐标(Client Coordinates)

客户端坐标是相对于浏览器窗口可视区域的坐标系,表示鼠标相对于浏览器窗口左上角的位置。客户端坐标不会受到页面滚动的影响,这使其非常适合用于描述事件在浏览器窗口内的位置,例如在处理窗口内的拖拽操作时。

// 获取客户端坐标
const clientX = event.clientX;
const clientY = event.clientY;

在某些情况下,xy 属性也可用于获取客户端坐标,它们是 clientXclientY 的简写形式。

3. 页面坐标(Page Coordinates)

页面坐标是相对于整个文档页面的坐标系。与客户端坐标不同,页面坐标会受到页面滚动的影响,表示鼠标在整个页面文档中的位置。它适用于需要考虑整个页面布局的场景,如定位页面中的特定元素。

// 获取页面坐标
const pageX = event.pageX;
const pageY = event.pageY;

4. 图层坐标与偏移坐标(Layer Coordinates & Offset Coordinates)

图层坐标(layerX 和 layerY)表示事件相对于事件触发元素的图层(可能是一个特定的 DOM 元素)的坐标。偏移坐标(offsetX 和 offsetY)则表示事件相对于事件目标元素内部的坐标。在现代浏览器中,这两者通常是相同的,因为 layerXlayerY 已逐渐被 offsetXoffsetY 取代。

// 获取偏移坐标(等同于图层坐标)
// offset 坐标是相对于 padding 开始的
// 如果设置了 `box-sizing: border-box` 则 offset 坐标几乎等于 layer 坐标
const offsetX = event.offsetX;
const offsetY = event.offsetY;

差异与使用建议

  1. 参考系

    • screen 坐标是相对于整个屏幕的左上角。
    • client 坐标是相对于浏览器窗口的左上角。
    • page 坐标是相对于整个页面的左上角。
    • offset 坐标是相对于事件目标元素的左上角,通常等同于 layer 坐标。
  2. 滚动影响

    • page 坐标会随着页面的滚动而变化。
    • screenclientoffset 坐标不会受到页面滚动的影响。
  3. 图层交互

    • offset 坐标用于处理具有多个图层的网页元素,如弹出菜单或模态窗口,帮助确定事件发生的具体图层。
    • layer 坐标在早期用于同样的目的,但已逐渐被 offset 坐标取代。
  4. 应用场景

    • screen 坐标适用于全屏UI元素定位。
    • client 坐标适用于窗口内事件定位。
    • page 坐标适用于全页面事件处理。
    • offset 坐标适用于处理复杂的图层结构。

结论

在处理鼠标事件时,选择合适的坐标系是关键。
screenXscreenY 适合用于绝对屏幕位置需求,
clientXclientY 适合在窗口内进行定位,
pageXpageY 适用于涉及页面滚动的情境,
offsetXoffsetY 则是处理复杂图层和嵌套结构的最佳选择。
在现代开发中,优先使用 offsetXoffsetY,因为它们已成为标准,能够更广泛地兼容各类浏览器。

通过了解这些坐标系的差异和应用场景,我们可以更精准地处理用户交互事件,从而提升用户体验。

标签:event,const,MoseEvent,屏幕,几种,坐标,图层,坐标系,页面
From: https://www.cnblogs.com/guojikun/p/18361122

相关文章

  • 线程池创建的几种方式
    线程池的创建⽅法总共有7种,但总体来说可分为2类:通过ThreadPoolExecutor创建的线程池;通过Executors创建的线程池前置步骤publicclassThreadTaskimplementsRunnable{Loggerlogger=LoggerFactory.getLogger(ThreadDemo.class);privateStringtaskN......
  • Qt/C++地图坐标纠偏/地球坐标系/火星坐标系/百度坐标系/互相转换/离线函数
    一、前言说明为什么需要地球坐标纠偏这个功能,因为国家安全需要,不允许使用国际标准的地球坐标系,也并不是咱们这边这样,很多国家都是这样处理的,就是本国的地图经纬度坐标都是按照国家标准来的,所以就需要一个转换。国内主要有三种坐标系,国际标准用的地球坐标系WGS-84,国家标准用的火星......
  • java几种常见漏洞种类及处理方案
    一、SQLInjection(SQL注入漏洞)1.使用参数化查询(PreparedStatements)参数化查询是防止SQL注入最有效的方法之一。它确保用户输入的数据作为参数传递,而不是作为SQL命令的一部分。在Java中,可以使用PreparedStatement来实现这一点。示例代码:Stringsql="SELECT*FROMusers......
  • 主线程等待所有其他线程执行完毕,然后再继续执行主线程的逻辑,有以下几种方法可以实现:
    ##1.使用`Thread.join()``Thread.join()`方法会让主线程等待被调用线程执行完毕之后再继续执行。####示例代码:```javapublicclassMain{publicstaticvoidmain(String[]args){//创建3个线程Threadthread1=newThread(()->{Syste......
  • 在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
    在Kubernetes(K8s)中,Service是一种抽象,它定义了一组逻辑上相同的服务实例(即Pod)以及访问它们的策略。Service可以将外部客户端的流量路由到后端的一个或多个Pod。Kubernetes提供了几种不同类型的Service,每种都有其特定的用途:ClusterIP描述:这是默认的Service类型。Cl......
  • SpringBoot接收参数的几种常用方式
    目录1、路径变量(PathVariables)1.1、接口定义1.2、APIPost测试1.3、详细解释1.4、不写括号里的id的影响1.4.1、情况11.4.2、情况21.4.3、情况3(错误情况)2、请求参数(RequestParameters)2.1、接口定义2.2、APIPost测试2.3、详细解释2.4、`@RequestParam`应用举......
  • vue父子组件传值有几种方式?
    在Vue.js中,组件间通信是构建复杂应用的关键。子组件与父组件之间的通信以及父组件向子组件传递数据都有多种方式。下面是常见的几种方法:父组件向子组件传递数据Props描述:这是最常见的方法,通过定义props,父组件可以将数据直接传递给子组件。推荐度:强烈推荐,这是最符合Vue单......
  • 无人机定位技术中的坐标系(全局、局部、机体)
    无人机定位技术中的坐标系在讨论无人机飞行时,涉及的全局、局部和机体三种要素主要反映了不同层次的控制策略和决策过程。我们可以逐一分析这三种要素在无人机飞行中的作用,以明确它们是否都需要全部参与。全局参与:全局参与主要指的是无人机系统在进行飞行任务时所依据的整体......
  • SpringBoot 使用策略+工厂模式的几种实现方式
    SpringBoot使用策略+工厂模式的几种实现方式  1.方式一:  2.方式二:使用Spring依赖注入   用过Spring的肯定也离不开这个注解,通过这个注解可以帮我们自动注入我们想要的Bean。除了这个基本功能之外,@Autowired还有更加强大的功能,还可以注入指定类型的数组,Lis......
  • 012.Vue3入门,class属性的几种绑定方法
    1、代码如下:<template><h3>class绑定</h3><div:class="{'active':isActive,'text-danger':hasError}">Class样式绑定1</div><div:class="classObject">Class样式绑定2</div><div......