JavaScript DOM对象的尺寸和位置详解

在DOM对象操作中,其尺寸和位置也是DOM的核心内容,因为js的“交互式应用”几乎少不了对DOM对象的尺寸和位置进行操作,特别是js动画效果。

一、关于DOM对象的尺寸和位置介绍

DOM对象的尺寸和位置的属性

DOM对象的属性描述
obj.scrollWidth 和 obj.scrollHeightDOM对象的内部实际部分和内边距
obj.scrollTop 和 obj.scrollLeft获取滚动条被隐藏的区域大小,也可设置定位到该区域
obj.offsetWidth 和 obj.offsetHeightDOM对象的实际自身宽度和高度
obj.offsetTop 和 obj.offsetLeft获取当前元素相对于父元素的位置
obj.clientWidth 和 obj.clientHeightDOM对象内容可视部分和内边距的宽高
obj.clientTop 和 obj.clientLeft获取元素设置的上边距和左边框的大小
obj.styleWidth 和 obj.styleHeight行内样式设置的CSS属性值
obj.style.top 和 obj.style.left设置当前元素相对于符元素的位置

二、DOM文档对象的尺寸

DOM文档对象的尺寸属性共分为4类:

  • obj.scrollWidth 和 obj.scrollHeight(DOM对象内部视为一个整体,它所占据的大小)
  • obj.offsetWidth 和 obj.offsetHeight(DOM对象自身的大小,不计算外边距)
  • obj.clientWidth 和 obj.clientHeight(DOM对象可视区域,不计算外边距、边框和滚动条)
  • obj.style.width 和 obj.style.height(DOM对象行内式CSS属性初始化的值)
1、obj.scrollWidth 和 obj.scrollHeight

==表示一个DOM文档对象的内部实际大小,包括其内边距和内容的实际大小。==比如浏览器中的某个DOM对象嵌套了另一个类似浏览器的窗口(此刻这个DOM对象的overflow属性值为auto),此刻会存在兼容性的问题,firefox和opera浏览器会增加本DOM对象的外边框大小,而ie、chrome、safari浏览器会忽略边框大小。

<!DOCTYPE html>
<html> 
<head><meta charset="UTF-8"><title>知数SEO_vx:zhishunet</title><style>#outer{width:300px;height: 300px;border: 5px solid blue;background:pink;padding: 40px;margin: 30px;overflow: auto;}#inner{width: 500px;height: 500px;border: 1px solid red;background: yellow;}</style>
</head>
<body>
<div id="outer"><div id="inner"></div>
</div>
</body>
<script>window.onload = function (){var outer = document.getElementById('outer');// DOM对象内部实际宽度:582; 实际高度:582; [40 + 1+ 500 + 1 + 40 = 582]console.log('DOM对象内部实际宽度:'+ outer.scrollWidth + '; 实际高度:' + outer.scrollHeight);// 宽度:365; 高度:365 [ 300 + 40 + 40 - 滚动条宽高 = 365]console.log('宽度:' + outer.clientWidth + '; 高度:' + outer.clientHeight);}
</script>
</html>
2、obj.offsetWidth 和 obj.offsetHeight

表示DOM对象自身宽高,包括边框、内边距和滚动条(外边距不计算在内)

3、obj.clientWidth 和 obj.clientHeight

表示DOM对象的可用宽高,包括内容可视部分和内边距,而DOM对象自身的边框和滚动条是不计算在内的
与obj.offsetWidth 和 obj.offsetHeight相比它们之间的差别也就是DOM对象自身的边框宽度和滚动条宽度

4、obj.style.width 和 obj.style.height

表示DOM对象的行业样式的属性值,如果元素css样式不是使用行业样式赋值的则这两个值分别为空字符串

三、DOM文档对象的位置

DOM文档对象的位置属性共分为4类:

  • obj.scrollTop 和 obj.scrollLeft(获取滚动条被隐藏的区域大小)
  • obj.offsetTop 和 obj.offsetLeft(获取当前DOM对象相对于父元素的偏移量)
  • obj.clientTop 和 obj.clientLeft(获取元素设置的上边距和左边距的大小)
  • obj.style.top 和 obj.style.left(设置当前DOM对象相对于父元素的偏移量)
1、obj.scrollTop 和 obj.scrollLeft

这两个属性用来获取或设置被隐藏的区域大小(DOM对象中滚动条的当前位置)
它的运用非常常见:指定特效或轮播图

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>知数SEO_vx:zhishunet</title><style>ul{width: 1200px;height: 379px;list-style: none;overflow: hidden;white-space: nowrap;padding: 0;}li{display: inline-block;padding: 0 10px;}img{width: 379px;height: 379px;}</style>
</head>
<body>
<ul><li><img src="images/1.jpg" alt=""></li><li><img src="images/2.jpg" alt=""></li><li><img src="images/3.jpg" alt=""></li><li><img src="images/4.jpg" alt=""></li><li><img src="images/5.jpg" alt=""></li><li><img src="images/6.jpg" alt=""></li><li><img src="images/7.jpg" alt=""></li>
</ul>
</body>
<script>var obj = document.getElementsByTagName('ul')[0];var widthContain = obj.scrollWidth;console.log(widthContain);  // 2825var widthItself = obj.offsetWidth;console.log(widthItself);  // 1200console.log(obj.scrollLeft);  // 0 var flag = 1;setInterval(function (){obj.scrollLeft += flag;if(obj.scrollLeft === widthContain - widthItself) flag = -1;if (obj.scrollLeft === 0) flag = 1;},10);
</script>
</html>
2、obj.offsetTop 和 obj.offsetLeft
3、obj.clientTop 和 obj.clientLeft

这两个属性用来获取DOM对象的上边距和左边距的大小
当四边大小都不想同时,可以通过计算得到下边距和右边距的大小

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>知数SEO_vx:zhishunet</title><style>#test{width: 100px;height: 100px;border-top: 1px solid #ccc;border-right: 7px solid #ccc;border-bottom: 5px solid #ccc;border-left: 3px solid #ccc;}</style>
</head>
<body>
<div id="test"><div id="aa"></div>
</div>
</body>
<script>var obj = document.getElementById('test');var widthItself = obj.offsetWidth; // 110var heightItself = obj.offsetHeight;  // 106var widthInner = obj.clientWidth;  // 100var heightInner = obj.clientHeight;  // 100var borderLeft = obj.clientLeft; // 3var borderTop = obj.clientTop; // 1alert('右边框的大小:' + (widthItself - widthInner - borderLeft)); // 7alert('下边框的大小:' + (heightItself - heightInner - borderTop));  // 5
</script>
</html>
4、obj.style.top 和 obj.style.left

四、移动端DOM对象的尺寸和位置

1、像素的概念

像素分为两类:一类是物理像素,另一类为设备独立像素
物理像素是显示屏(手机屏幕)上的最小的物理显示单元,在操作系统的调度下每个设备像素都有自己的颜色值和亮度值
独立设备像素可以认为是计算机坐标系统中的一个点,这个点代表一个可以由程序使用的虚拟像素(如css像素),然后由相关系统转换成物理像素
设备像素比是物理像素和设备独立像素的对应关系,它的值可以用公式获得: 设备像素比 = 物理像素 / 设备独立像素
为了解决像素比出现的问题需要在页面添加一条meta标签

<meta name = "viewport" content="width=devices-width,initial-scale=1">
2、移动端手势库(hammer.js)

官网地址:https://hammerjs.github.io/

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

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

相关文章

附1:k8s服务器初始化

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 关联文章&#xff1a; 《RKE快速搭建离线k8s集群并用rancher管理界面》 《附2&#xff1a;rke安装的k8s集群新增主机》 1.创建…

能替代微软AD的国产化方案,搭建自主可控的身份管理体系

随着国产化替代步伐加速&#xff0c;以及企业出于信息安全建设的需要&#xff0c;越来越多的企业和组织开始考虑将现有的微软 Active Directory&#xff08;AD&#xff09;替换为国产化的LDAP身份目录服务&#xff08;也称统一身份认证和管理&#xff09;系统。本文将介绍一种国…

Vue3 Suspense 优雅地处理异步组件加载

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

03.领域驱动设计:了解实体和值对象以及它们的区别

目录 1、概述 2、实体 1.实体的业务形态 2.实体的代码形态 3.实体的运行形态 4.实体的数据库形态 3、值对象 1.值对象的业务形态 2.值对象的代码形态 3.值对象的运行形态 4.值对象的数据库形态 5.值对象的优势和局限 4、实体和值对象的区别 5、总结 1、概述 DDD战…

容器安全工具

容器安全工具是用于保护和监控容器环境安全的工具。它们提供了一系列功能,包括容器镜像的漏洞扫描、运行时监控、事件日志记录、访问控制、运行权限管理等。以下是一些常见的容器安全工具: 1. Docker Bench Security:用于检查Docker环境配置的安全性,提供一些最佳实践建议…

腾讯云幻兽帕鲁专有服务器配置价格表,4核16G、8核32G

幻兽帕鲁服务器配置CPU内存多大合适&#xff1f;如何选择&#xff1f;最低4核8G起步&#xff0c;4核16G是官方推荐配置&#xff0c;最好是4核32G配置。阿腾云atengyun.com分享幻兽帕鲁Palworld服务器CPU内存配置及租用费用&#xff0c;如下图&#xff0c;Palworld官方推荐服务器…

QT之 QDebug 调试(一)

在QT中&#xff0c;进行调试&#xff0c;则需要在头文件地方加上 #include <QDebug> 加上之后&#xff0c;在编译之后则其输出的信息则在应用程序输出那里显示信息。 其QDebug 信息调试则如&#xff1a; qDebug() << " 需要插入的信息 "…

Deepin基本环境查看(六)【计算机、回收站、控制面板、文档、设备管理器】

Deepin基本环境查看 - 目录Deepin基本环境查看&#xff08;一&#xff09;【基本信息】Deepin基本环境查看&#xff08;二&#xff09;【内存】Deepin基本环境查看&#xff08;三&#xff09;【网络信息】Deepin基本环境查看&#xff08;四&#xff09;【硬盘/分区、文件系统、…

跨境电商盛会聚集|2024全国跨境电商展排期表,让你一目了然~

2024全国跨境电商展排期表 预订展会详询陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位&#xff09; 9I72&#xff08;后面四位&#xff09; 2024第三届 CHWE出海网全球跨境电商展&#xff08;深圳&#xff09; 2024年3月20日-22日 深圳福田会展中…

C++:引用

目录 概念&#xff1a; 引用的使用格式&#xff1a; 引用特性&#xff1a; 常引用 使用场景&#xff1a; 1、做参数 二级指针时的取别名 一级指针取别名 一般函数取别名 2、做返回值 函数返回值的原理&#xff1a; 引用的返回值使用&#xff1a; 引用和指针的对比&…

编码神仙插件Machinet AI GPT-4 Chat and Unit Tests

最近发现一个神仙插件Machinet AI GPT-4 Chat and Unit Tests&#xff0c;支持多个编译器安装使用。 我下载安装到Android Studio上&#xff0c;不需要登录直接可以使用。 可以直接提问&#xff0c;支持中文。

Socket实现模拟TCP通信粘包问题

在计算机网络通信中&#xff0c;粘包是指在传输过程中&#xff0c;发送方发送的多个小数据包被接收方粘合在一起&#xff0c;形成一个大的数据包。这种现象通常出现在使用流式传输协议&#xff08;如TCP&#xff09;进行数据传输的情况下。 具体来说&#xff0c;TCP是一种面向连…