js dom操作 pageX,pageY,offsetX,offsetY,clientX/Y,screenX/Y 介绍使用

news/2024/11/9 15:41:13

什么是DOM?

DOM,文档对象模型(Document Object Model)。DOM是 W3C(万维网联盟)的标准,DOM定义了访问HTML和XML文档的标准。在W3C的标准中,DOM是独于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。

W3C DOM由以下三部分组成:

- 核心DOM - 针对任何结构化文档的标准模型
- XML DOM - 针对 XML 文档的标准模型
- HTML DOM - 针对 HTML 文档的标准模型

在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,不同的浏览器下会有不同的结果甚至是有的浏览器下没结果。
现在咱们web开发使用原生操作dom节点都比较少,因为现在的框架都是属于虚拟dom,原生操作dom节点我感觉很繁琐
不知道的话自己下去搜搜

js dom 操作节点移动

方法介绍

js鼠标或坐标属性

  • event.pageX/Y
  • event.offsetX/y
  • event.X/Y
  • event.clientX/Y

clientX/Y

clientX/Y获取到的是触发点相对浏览器可视区域左上角距离,不随页面滚动而改变。

pageX/Y

pageX/Y获取到的是触发点相对文档区域左上角距离,会随着页面滚动而改变

offsetX/Y

offsetX/Y获取到是触发点相对被触发dom的左上角距离,不过左上角基准点在不同浏览器中有区别,其中在IE中以内容区左上角为基准点不包括边框,如果触发点在边框上会返回负值,而chrome中以边框左上角为基准点。

screenX/Y

screenX/Y获取到的是触发点相对显示器屏幕左上角的距离,不随页面滚动而改变。

图解

clipboard.png

函数获取各种坐标方法

  1. 补充一下获取dom的方法

    • 通过ID获取 document.getElementById(elementId)
    • 通过name属性 document.getElementsByName(elementName)
    • 通过标签名 document.getElementsByTagName
    • 通过类名 document.getElementsByClassName
    • 通过选择器获取一个元素document.querySelector('类名')
    • 通过选择器获取一组元素document.querySelectorAll
  2. 获取坐标

    <div class="box">
      <div class="children" id="move"></div>  
    </div>
    var dom = document.getElementById('move');
    function down (e) {
        e = e || window.event;
      console.log(e.pageX, 'pageX')
      console.log(e.offsetX, 'offsetX')
      console.log(e.clientX, 'clientX')
      console.log(e.screenX, 'screenX')
      console.log(e.x, 'e.x')
    }
    dom.onmousedown = down

见证奇迹的时刻到啦

  1. 让div class 为 children 的dom节点左右移动
    div(left/right)= div(clientX现在的)-(clientX原有的 - div(原来的left))
    链接描述

clipboard.png

  1. 让div class 为 children 的dom节点上下活动,原理其实和往左移动一样,这就不给图了
    链接描述
  2. 两种代码合起来就可以上下移动
    链接描述

改变鼠标指针(自认为)

  • 上指针 n-resize
  • 左下针 sw-resize
  • 左上针 nw-resize

图片描述

链接描述

改变div盒子大小这里就给演示左右变化

  • 向左改变大小
  • 向右改变大小

图片描述

链接描述

缺点 如果做其他图行变化或是拖拽的话,比如菱形,不规则图形等是非常的麻烦,因为css画出的不规则图形很繁琐,不易变化
如果用canvas主要的难点就是如果你画很多的图形,不好给定位用户选择的是哪个,而且canvas移动的话是需要重新绘制的,最最重要的一点
是数学要比较好,比如勾股定理啊。。。不懂!!!

http://www.niftyadmin.cn/n/4615970.html

相关文章

BIO_set_md

用openssl的engine机制实现chiper,digest的替换遇到问题了&#xff0c;到底EVP是怎么样调用init,updata,final以及init,updata,final应该如何实现呢&#xff1f; ---------------------------------消息摘要算法 简单接口 简单接口使用一个函数调用就可以完成消息摘要计算&…

Struts2 实例

https://my.oschina.net/jerrypan/blog/621192

静态SDRAM和动态SDRAM的区别

SDRAM有一个同步接口&#xff0c;在响应控制输入前会等待一个时钟信号&#xff0c;这样就能和计算机的系统总线同步。时钟被用来驱动一个有限状态机&#xff0c;对进入的指令进行管线(Pipeline)操作。这使得SDRAM与没有同步接口的异步DRAM相比&#xff0c;可以有一个更复杂的操…

MyGui 3.01编译

1、需要安装的组件 FreeType 下载地址&#xff1a; 二进制包&#xff1a;http://sourceforge.net/projects/gnuwin32/files/freetype/2.3.5-1/freetype-2.3.5-1-setup.exe/download SDK及源码&#xff1a;http://sourceforge.net/projects/gnuwin32/files/freetype/2.3.5-1/fre…

一些时下很潮词的翻译

伪球迷 biased fans紧身服 straitjacket团购 group buying奉子成婚 shortgun marriage婚前性行为 premartial sex开博 to open a blog家庭暴力 family volience问题家具 problem furniture炫富 flaunt wealth决堤 breaching of the dike上市 list share soccer gambling桑拿…

HTML标签之label标签的坑

之前写过一个项目&#xff0c;要用到label标签&#xff0c;页面中有&#xff0c;弹窗也有。 遇到的问题&#xff1a;点击弹窗的label选中的确是页面的框。 原因&#xff1a;页面中的数据和弹窗的数据一致&#xff0c;导致label标签中的for的值重复了&#xff0c;所以才会出现此…

汽车导航系统应用富士通FRAM铁电存储器MB85R2001

MB85R2001是一种富士通FRAM芯片&#xff0c;由262,144字8位非易失性存储单元组成&#xff0c;这些单元使用铁电工艺和硅栅CMOS工艺技术创建。能够保留数据&#xff0c;而无需使用SRAM所需的备用电池。MB85R2001中使用的存储单元可用于1010次读/写操作&#xff0c;与Flash存储器…

指针字符串

指针字符串 用指针遍历字符串中字符, 上面的例子是用指针指向字符串中的首个字符,下面的例子是用指针直接指向字符串; (上面的例子的做法是先定义一个字符串数组,用于存放字符串,然后将数组首地址传给指针p,让指针p指向字符串数组的首个字符地址); C中string.h头文件中包含的st…