JavaScript中的坐标

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》

​ 

✨ 前言

        在我们的日常生活中,JavaScript已经成为了一种无处不在的编程语言。它的应用范围从简单的网页动画,到复杂的前端框架,再到后端的Node.js,甚至还包括物联网设备。然而,JavaScript并非一成不变,它一直在发展,一直在添加新的特性和功能。今天,我们将探讨JavaScript中的一个重要的概念:坐标。在这篇文章中,我们将详细介绍坐标,包括它的定义、使用方法,以及如何在不支持坐标的浏览器中进行polyfill。

✨ 正文

坐标

在JavaScript中,大多数方法处理的是以下两种坐标系中的一个:

  • 相对于窗口:类似于position:fixed,从窗口的顶部/左侧边缘计算得出。我们将这些坐标表示为clientX/clientY
  • 相对于文档:与文档根(document root)中的position:absolute类似,从文档的顶部/左侧边缘计算得出。我们将它们表示为pageX/pageY

        当页面滚动到最开始时,此时窗口的左上角恰好是文档的左上角,它们的坐标彼此相等。但是,在文档移动之后,元素的窗口相对坐标会发生变化,因为元素在窗口中移动,而元素在文档中的相对坐标保持不变。

在下图中,我们在文档中取一点,并演示了它滚动之前(左)和之后(右)的坐标:

元素坐标:getBoundingClientRect方法

elem.getBoundingClientRect()方法返回最小矩形的窗口坐标,该矩形将elem作为内建DOMRect类的对象。主要的DOMRect属性有:

  • x/y:矩形原点相对于窗口的X/Y坐标
  • width/height:矩形的宽度/高度(可以为负)

此外,还有派生(derived)属性:

  • top/bottom:顶部/底部矩形边缘的Y坐标
  • left/right:左/右矩形边缘的X坐标

下面这张是 elem.getBoundingClientRect() 的输出的示意图:

elementFromPoint(x, y)

document.elementFromPoint(x, y)的调用会返回在窗口坐标(x, y)处嵌套最多(the most nested)的元素。

let elem = document.elementFromPoint(x, y);
elem.style.background = '';

        对于在窗口之外的坐标,elementFromPoint返回null。方法document.elementFromPoint(x,y)只对在可见区域内的坐标(x,y)起作用。如果任何坐标为负或者超过了窗口的width/height,那么该方法就会返回null

🔔 为什么需要派生(derived)属性?如果有了 x/y,为什么还要还会存在 top/left

从数学上讲,一个矩形是使用其起点 (x,y) 和方向向量 (width,height) 唯一定义的。因此,其它派生属性是为了方便起见。

从技术上讲,width/height 可能为负数,从而允许“定向(directed)”矩形,例如代表带有正确标记的开始和结束的鼠标选择。

负的 width/height 值表示矩形从其右下角开始,然后向左上方“增长”。

这是一个矩形,其 width 和 height 均为负数(例如 width=-200height=-100):

正如你所看到的,在这个例子中,left/top 与 x/y 不相等。

但是实际上,elem.getBoundingClientRect() 总是返回正数的 width/height,这里我们提及负的 width/height 只是为了帮助你理解,为什么这些看起来重复的属性,实际上并不是重复的。

        希望这个详细的概述能帮助你理解JavaScript中的坐标,并为你的博客文章提供一个良好的起点。如果你需要更多的信息或者对某个部分有更深入的问题,欢迎随时向我提问!

✨ 结语

        JavaScript的坐标为我们打开了一个全新的世界,让我们能够在JavaScript中处理任意大小的字符。虽然坐标在一些方面与常规的字符有所不同,但是只要我们理解了这些差异,并知道如何正确地使用坐标,我们就能够充分利用它的强大功能。无论你是正在处理大数据,还是在进行高精度计算,坐标都能够提供强大的支持。希望这篇文章能够帮助你理解和掌握JavaScript中的坐标,让你在编程的道路上更进一步。如果你有任何问题或者需要更深入的讨论,欢迎随时向我提问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438113.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为三层交换机与防火墙对接配置上网示例

三层交换机与防火墙对接上网配置示例 组网图形 图1 三层交换机与防火墙对接上网组网图 三层交换机简介配置注意事项组网需求配置思路操作步骤配置文件 三层交换机简介 三层交换机是具有路由功能的交换机,由于路由属于OSI模型中第三层网络层的功能,所以…

ERP系统在生产管理中的应用

随着市场竞争的加剧和企业业务范围的拓展,生产管理在企业运营中的地位日益凸显。为了提高生产效率、降低成本、优化资源配置,越来越多的企业开始引入ERP系统进行生产管理。云迈ERP系统为您提供全面的生产管理解决方案。 一、生产需求管理 在ERP系统中&a…

MYSQL基本查询(CURD:创建、读取、更新、删除)

文章目录 前言一、Create1.全列插入2.指定列插入3.插入否则更新4.替换 二、Retrieve1.SELECT列2.WHERE条件3.结果排序4.筛选分页结果 三、Update四、Delete1.删除数据2.截断表 五、插入查询结果六、聚合函数 前言 操作关系型数据库的编程语言,定义了一套操作关系型…

UE5在VisualStudio升级后产生C++无法编译的问题

往期的虚幻引擎项目在VS更新后,编译时会报错,这一般出现在VS升级之后,UE对于VC的编译器定位没有更新导致; 有出现如下问题: 问题1: Running I:/EPCI/Epic Games/UE_5.3/Engine/Build/BatchFiles/Build.ba…

如何优化博客的内容和用户体验

在当今数字时代,博客成为了分享知识、展示个人专业能力和吸引读者的重要工具。然而,随着越来越多的博客涌现,如何优化博客的内容和用户体验成为了一个关键的问题。本文将为你提供一些有效的技巧,帮助你优化博客的内容和提升用户体…

《少年派的奇幻漂流》观后感

《少年派的奇幻漂流》是一部充满奇幻、深度和美感的电影,由导演李安执导,基于亨利沃恩(Yann Martel)的同名小说改编而成。这部影片以惊人的视觉效果和富有哲学思考的故事而著称。 影片的视觉效果令人叹为观止。通过3D技术和出色的…

QT+VS实现Kmeans++

1、Kmeans的原理如下: (1)首先选取样本中任一数据点作为第一个聚类中心; (2)计算样本每一个数据点至现所有聚类中心的最近距离,并记录下来; (3)逐一挑选所…

基于springboot校园台球厅人员与设备管理系统源码和论文

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括校园台球厅人员与设备管理系统的网络应用,在外国管理系统已经是很普遍的方式,不过国内的管理网站可能还处于起步阶段。校园台球厅人员与设备管理系统具…

mcu专用看门狗复位芯片(如MAX706)

mcu专用看门狗复位芯片(如MAX706) 为什么要使用电压复位芯片RESET引脚WDO引脚MR引脚WDI引脚 国产替代型号应用电路1 推荐电路(用一个跳线帽使能/关闭看门狗功能,调试MCU时防止看门狗芯片随便触发复位功能),…

Linux内存管理:(十)KSM内核同页合并

文章说明: Linux内核版本:5.0 架构:ARM64 参考资料及图片来源:《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址: zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. KSM定义 KSM指Kemel SamePage M…

【C++】C++入门基础讲解(二)

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 导读 接着上一篇的内容继续学习,今天我们需要重点学习引用。 1. 引用 在C中,引用是一种特殊的变量&#xff…

OpenHarmony—不支持解构赋值

规则:arkts-no-destruct-assignment 级别:错误 ArkTS不支持解构赋值。可使用其他替代方法,例如,使用临时变量。 TypeScript let [one, two] [1, 2]; // 此处需要分号 [one, two] [two, one];let head, tail [head, ...tail]…