html5 offsetx,原生HTML5关于Div对象的.clientLeft、.offsetLeft、.clientX、.offsetX区分

article/2025/11/9 0:45:20

本篇主要介绍clientLeft、offsetLeft、clientX、offsetX这四种元素属性的区别,首先我们要理解清楚它们的概念:

clientLeft:该元素对象的左边框宽度。

clientWidth:该元素对象的左内边框至右内边框的距离。

offsetLeft:该元素左外边框至窗口左边界的距离。

offsetWidth:该元素左外边框至右外边框的距离。

我们可以参考下图所示:

c330f84fa33ca2f99edfada0011b90c2.png

上图测试源码为:

body {

margin-left: 0px;

margin-top: 0px;

}

#myDiv {

margin-left: 50px;

margin-top: 50px;

border: 5px solid darksalmon;

background-color: #FFE;

}

var jqdiv = $("#myDiv")[0];

console.log(jqdiv.clientLeft); // 5

console.log(jqdiv.clientWidth); // 100

console.log(jqdiv.offsetLeft); // 50

console.log(jqdiv.offsetWidth); // 110

在实现移动或拖动功能时,我们可以通过下列代码动态改变他们的位置:

jqdiv.offset({

top: 10,

left: 10

});

这里最重要的一点区别是,上面的4个对象属性都相对于标签元素;而

clientX、offsetX则是相对于鼠标事件对象,即需要触发鼠标事件才会有clientX、offsetX。

clientX:当事件被触发时鼠标指针相对于窗口左边界的水平坐标。

offsetX:当事件被触发时鼠标指针相对于所触发的标签元素的左内边框的水平坐标。

我们可以参考下图所示,A点被点击,当触发鼠标点击事件时:

f0141472b8df208542f00626388e573e.png

上图测试源码为:

body {

margin-left: 0px;

margin-top: 0px;

}

#myDiv {

margin-left: 50px;

margin-top: 50px;

border: 5px solid darksalmon;

background-color: #FFE;

}

$("#myDiv").bind("click", function(vt) {

console.log(vt.clientX); // 43+5+50 = 98

console.log(vt.offsetX); // 43

});

我们回到前面的offsetLeft这个属性,该属性有些歧义,有些网友是这样解释的:当前对象的外边框到它上层对象的内边框之间的距离。我们做个测试,看下图:

89703f4b79250012fafba8e68fb8a38e.png

上图测试的源码为:

body {

margin-left: 0px;

margin-top: 0px;

}

#myDiv {

margin-left: 50px;

margin-top: 50px;

border: 5px solid darksalmon;

background-color: #FFE;

}

#parentDiv {

margin-left: 50px;

border: 5px solid darksalmon;

background-color: #FFFFEE;

}

console.log($("#myDiv")[0].offsetLeft); // 50+5+50 = 105

为了验证正确性,我还换了不同的浏览器,通过测试可得出:offsetLeft是该元素左外边框至窗口左边界的距离。

(注)本篇介绍了clientLeft、offsetLeft、clientX、offsetX,根据本文介绍的特点,同理就可不难理解clientTop、offsetTop、clientY、offsetY的概念

(注)还有两个值很重要的值:一个是scrollTop,另一个是scrollLeft

第一个代表页面利用滚动条滚动到下方时,隐藏在滚动条上方的页面的高度;

第二个代表页面利用滚动条滚动到右侧时,隐藏在滚动条左侧的页面的宽度;

正确获取当前鼠标点击坐标算法:

Mouse.x = parseInt(event.clientX); //event表示鼠标事件

Mouse.y = parseInt(event.clientY);

var rect = elem.getBoundingClientRect(); //elem表示当前所点击到的显示对象,如canvas

Mouse.x += elem.scrollLeft - elem.clientLeft - rect.left;

Mouse.y += elem.scrollTop - elem.clientTop - rect.top;


http://chatgpt.dhexx.cn/article/fxMYhrYI.shtml

相关文章

html5 offsetx,event对象中offsetX,clientX,pageX,screenX的区别

1、offsetX offset意为偏移量,是事件对象距左上角为参考原点的距离。以元素盒子模型的内容区域的左上角为参考点。不包括border。 2、clientX 事件对象相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条 3、pageX 事件对象相对于整个文档的坐标以像素…

彻底搞懂 offsetX、scrollX、clientX 的区别

无论在 iOS 还是前端开发中,关于如何定位一个元素是必须要掌握的知识,而在前端中,元素定位比较难理解,我们今天一起学习下。 在 DOM 设计中,主要通过这些 API 来确定某个元素的具体位置。 offsetTop, offsetLeft, offs…

Java数组赋值时内存中的变化

java中的方法区存放的是编译后的文件 xxx.class文件当创建数组对象时,数组对象会存放在堆里面,数据也存在于堆。当给数组赋值时,方法会进栈,然后拿着数组的地址去堆里面寻找数据并赋值

Java数组:用fill()方法给数组赋值

Arrays类可以在指定位置进行数值填充,但是只能使用同一个数值进行填充: Arrays.fill(Object[] a,Object value);a表示数组,value表示填充的值 例1 public static void main(String[] args) {int[] a new int[6];//声明创建一个数组System.o…

Java数组练习--数组随机赋值

随机数生成:使用Math.random()方法,即: [ 0 , 1 ) → [ 0 , 1 ) 30 → [0 ,30) [0 ,30) 1 → [1,31) 取整后范围是[1,30] 此题目要点是,赋值之后的数组元素,要与之前赋值元素的值比较&#xff…

java 数组的创建 与 赋值

1.2.2 数组类型 基本类型的数组有3种赋值形式,如下所示: 第1种和第2种都是预先知道数组的内容,而第3种是先分配长度, 然后再给每个元素赋值。第3种形式中,即使没有给每个元素赋值,每个元素也都有一个默认值…

java 数组批量赋值_「数组赋值」java编程-定义数组并赋值 - seo实验室

数组赋值 package day03; public class TestArray { public static void main(String [] args) { int [] b; b new int[] {88,99,66}; //分步定义数组,先定义数组名,然后再为数组赋值 int [] d {88,99,100}; //直接定义数组,同时赋值 Syste…

java数组循环动态赋值_Java数组

Java语言数组遍历教程 Java语言数组遍历详解 语法 for(int i = 0;i< 数组名称.length;i++){数组名称[i]; } 说明 我们在程序中,定义了一个变量 i,用 i 的值和数组的长度值比较,因为数组的索引是从 0 开始的,所以我们遍历的数值只能够小于 数组名称.length。 数组存储的结…

Java数组的赋值机制

数组的两种赋值的方式 引用传递&#xff0c;赋的是地址 数组的值是放在JVM的堆里&#xff0c;当定义一个数组时会在JVM里的栈中&#xff0c;放置堆的地址&#xff0c;来指向JVM对应的 堆 。在对数组进行赋值的时候&#xff0c;默认情况下是引用传递&#xff0c;即把堆的地址给…

Java二维数组赋值

Java二维数组是指由多个一维数组组成的数组结构。它可以看作是一个表格&#xff0c;其中行表示数组中的第一个维度&#xff0c;列表示第二个维度。 可以使用两个方括号&#xff08;[ ] [ ]&#xff09;来声明和访问Java二维数组中的元素。 例如&#xff0c;以下代码声明了一个包…

java数组赋值_java中给数组赋值的方法

1、数组操作中&#xff0c;可以使用等于()赋值 注意&#xff1a;此时新数组只是指向原数组的存储空间&#xff0c;并没有重新申请新的空间。 实例&#xff1a;public class ArrayTest{ public static void main(String args[]){ // 1 int[] anew int[4]; a[0]1; a[1]2; a[2]3; …

Java数组变量赋值

一、问题&#xff1a;Java数组变量赋值是值传递还是址传递&#xff1f; 1.1 结论&#xff1a;java变量赋值是址传递 1.2 验证过程&#xff1a; ​ public class Test {public static void main(String[] args) {int[] arryA {1, 2, 3};int[] arryB {4, 5, 6, 7};arryA ar…

java 数组赋值_java中为数组赋值的方法

java中为数组赋值的方法 发布时间&#xff1a;2020-06-25 14:31:36 来源&#xff1a;亿速云 阅读&#xff1a;184 作者&#xff1a;Leah 这期内容当中小编将会给大家带来有关java中为数组赋值的方法&#xff0c;文章内容丰富且以专业的角度为大家分析和叙述&#xff0c;阅读完这…

【自学Java】Java语言数组赋值

Java语言数组赋值 Java数组赋值教程 在 Java 语言 中&#xff0c;给 数组 赋值&#xff0c;就相当于给每个位置上的对应的位置填充数据。 Java语言数组赋值详解 Java 中的数据赋值分为动态化赋值和静态化赋值两种赋值方式。动态化赋值指的是先定义数组&#xff0c;然后指定…

Java数组赋值数组复制(拷贝)

Java数组赋值&数组复制(拷贝) 数组赋值数组复制 1⃣️数组赋值 值传递(基本数据类型)与引用传递(数组)区别 值传递&#xff1a;基本数据类型赋值&#xff0c;赋给变量的值就是具体的数据&#xff0c;而且相互不受影响&#xff1b; int a 10; int b a; // b的变化不会影…

LATEX换行

LATEX 换行 \ newpage \maketitle 表示 begin{document} 前面的标题在这里显示 begin{document} 中的文本才显示

latex换行后(\\)如何继续缩进两格?

LaTeX 中正常换行不要使用 \&#xff0c;直接回bai车两下&#xff0c;即du在两段中间空一行&#xff0c;这样就会自动另zhi起一段并且缩dao进了。 也可以在段落前面加上 \par &#xff0c;例如 \par 第一段。\par 第二段。 就可以将它们分段了&#xff0c;如果想要在强制换行…

Latex: 表格中 自动换行居中

1、在导言区添加宏包&#xff1a; \usepackage{makecell}2、环境&#xff1a;tabular 命令&#xff1a; \makecell[居中情况]{第1行内容 \\ 第2行内容 \\ 第3行内容 ...} \makecell [c]{ResNet101\\ (11.7M)}参数说明&#xff1a; [c]是水平居中&#xff0c;[l]水平左居中&am…

.tex文件中通过空行实现LaTeX换行输出

【LaTeX换行输出代码示例】 \documentclass{article} \begin{document}Happy \TeX ing. Hello \LaTeX.Happy \TeX ing.Hello \LaTeX. \end{document} 【输出结果】

latex multirow 内换行

latex 多行合并要用到 \multirow&#xff0c; 若合并后的内容还想换行&#xff0c;就要用到其他命令了&#xff1a; 方法一&#xff1a; 使用 \shortstack 举例&#xff1a; \usepackage{booktabs} \usepackage{multirow} \begin{table}[!ht] \begin{tabular}{clrrrrrr} \…