JS高程12.2.3元素大小的学习笔记
《JavaScript高级程序设计》中讲述了通过JS如何控制页面中元素的大小,其中涉及到三对属性:偏移量,客户区大小,滚动大小。以前自己经常看到这三对属性,但是具体不是很清楚,容易混淆。所以想写篇文章记录一下自己的学习收获,让自己理解的更加深刻,同时也请各位前辈帮忙指正一下自己理解错误的地方。
首先元素在屏幕上的可见大小由元素的宽度,高度决定,包括所有内边距,滚动条和边框大小(不包括外边距)
1.偏移量
偏移量中包括如下四个属性:
1.offsetHeight:元素在垂直方向上占用的空间大小,以像素计,包括元素的高度,(可见的)水平滚动条的高度,上边框高度和下边框高度
2.offsetWidth:元素在水平方向上占用的空间大小,以像素计,包括元素的宽度,(可见的)垂直滚动条的宽度,左边框宽度和右边框宽度
3.offsetLeft:元素的左外边框至包含元素的左内边框之间的像素距离
4.offsetTop:元素的上外边框至包含元素的上内边框之间的像素距离
下图形象的展示了上述四个属性表示的大小和距离

注意点:偏移量属性都是只读的,而且每次访问都需要重新计算,所以尽量避免重复访问这些属性,如果需要重复访问,可以将某个属性保存在局部变量中,以提高性能。
2.客户区大小
客户区大小指的是元素内容和其内边距占据的空间大小。有关客户区大小的属性有如下两个:
1.clientWidth:元素内容区宽度加上左右内边距宽度
2.clientHeight:元素内容区高度加上上下内边距高度
下图展示了上述的属性:

注意点:1.clientWidth(clientHeight)与offsetWidth(offsetHeight)的区别是不包括边框和滚动条
2.客户区大小与偏移量一样也是只读的,每次访问也需要重新计算
3.滚动大小
1.scrollHeight:在没有滚动条的情况下,元素内容的总高度
2.scrollWidth:在没有滚动条的情况下,元素内容的总宽度
3.scrollLeft:被隐藏在内容区域左侧的像素数,通过设置这个属性可以改变元素的滚动位置
4.scrollTop:被隐藏在内容区上方的像素数,通过设置这个属性可以改变元素的滚动位置
下图展示了这些属性:

注意点:1.通常认为<html>元素是在Web浏览器的视口中滚动的元素(IE6之前版本运行在混杂模式下是<body>元素),所以带有垂直滚动条的页面总高度是document.documentElement.scrollHeight。
2.偏移量,客户区大小和滚动大小返回的值只是一个数值,不带有单位,与style属性的width/height属性不同。
3.在确定文档的总高度时(包括基于视口的最小高度时),必须取得scrollWidth/clientWidth和scrollHeight/clientHeight中的最大值,才能保证在跨浏览器的环境下得到精确的结果
在本节中涉及到的一些代码片段
1.获取某个元素相对于页面根元素的偏移量
//获取元素的左偏移量
function getElementLeft(element) {
var actualLeft=element.offsetLeft;
var current=element.offsetParent;
while(current!==null){
actualLeft+=current.offsetLeft;
current=current.offsetParent;
}
return actualLeft;
}
//获取元素的上偏移量
function getElementLeft(element) {
var actualTop=element.offsetTop;
var current=element.offsetParent;
while(current!==null){
actualLeft+=current.offsetTop;
current=current.offsetParent;
}
return actualTop;
}
2.获取浏览器视口大小
//获取浏览器视口大小
function getViewport(){
if (document.compatMode=="BackCompat") {
return {
width:document.body.clientWidth,
height:document.body.clienrHeight
};
}else{
return{
width:document.documentElement.clientWidth,
height:document.documentElement.clienrHeight
};
}
}
3.取得scrollWidth/clientWidth和scrollHeight/clientHeight中的最大值
//取得scrollWidth/clientWidth和scrollHeight/clientHeight中的最大值
var docHeight=Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight);
var docWidth=Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth);
4.重置元素的滚动位置
//重置元素的滚动位置
function scrollToTop(element){
if (element.scrollTop!=0) {
element.scrollTop=0;
}
}
JS高程12.2.3元素大小的学习笔记的更多相关文章
- 《JS高程》基本类型和引用类型的值学习笔记
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 创建方式类似:创建一个变量并为其赋值. (1)基本类型值和引用类型值比较 基本类型值 引用类型值 简单的数据段 可能由 ...
- js中窗口大小和单个元素大小的计算
1. 窗口的大小即浏览器的大小: window.innerWidth, window.innerHeight, window.outerHeight, window.outerWidth 在IE9+, ...
- js高级程序设计(第三版)学习笔记(第一版)
ecma:欧洲计算机制造商协会iso/iec:国际标准化和国际电工委员会 dom级别(10*)文档对象模型1:DOM核心(映射基于xml文档)与dom html(在dom核心基础上)2:对鼠标,事件, ...
- Docker学习总结(12)——非常详细的 Docker 学习笔记
一.Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台 Docker Hub: 用于分享.管理 Docker 容器的 Docker SaaS 平台 -- Docke ...
- React学习笔记 - 元素渲染
React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...
- js 元素大小缩放实例
元素大小缩放是一套连贯事件,按下鼠标不放,拖动鼠标 然后松开. 按下鼠标事件 当按下鼠标时,记录元素大小.鼠标按下的位置.状态位. 拖动鼠标事件 当鼠标拖动时,计算元素调用后的大小. 元素调整后大小 ...
- 吃透Javascript数组操作的正确姿势—再读《Js高程》
Javascript中关于数组对象的操作方法比较多也比较杂,正好再次捡起<Javascript高级程序设计>来读,把它们一一总结梳理了一下: 方法类别 方法名称 方法描述 参数 返回值 备 ...
- dojo/dom-geometry元素大小
在进入源码分析前,我们先来点基础知识.下面这张图画的是元素的盒式模型,这个没有兼容性问题,有问题的是元素的宽高怎么算.以宽度为例,ff中 元素宽度=content宽度,而在ie中 元素宽度=conte ...
- jquery插件之拖拽改变元素大小
该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽改变元素大小的效果,您可以根据自己的实际需求来设置被 ...
随机推荐
- ARE 212 - Problem Set 5
ARE 212 - Problem Set 5Due May 1stPart I: Theory (Optional)1. Show that the parameter estimates for ...
- MongoDB - Indexes
#explain command pp db[:zips].find(:state => 'MD').explain #List all indexes: db[:zips].indexes.e ...
- CF1093F Vasya and Array
题目链接:洛谷 以后还是要多打CF,不然就会错过这些很好的思维题了.我dp学得还是太烂,要多总结. 首先$len=1$就直接输出0. 我们考虑$dp[i][j]$表示前$i$个数的答案,而且第$i$个 ...
- 3种检测页面是否符合amp标准的方法
AMP的关键优势不仅仅在于它能让你的页面更快,还在于它的快可以被验证.有几种方法可以验证AMP文档,它们都会产生完全相同的结果,选择最适合您的开发风格的方法.除了AMP的有效性,您可能还想确认您的AM ...
- 支持Linux系统的加密狗
深思数盾 https://www.sense.com.cn/ 产品:精锐5 版本:标准版.精灵版.IE版.时钟锁 快速实现高安全度的软件保护,轻松定义多种授权模式1.防止软件盗版,防止逆向工程 通过增 ...
- python 循环 while
count = 1while count <= 5: print("大家好!") count = count + 1 结果:while 可以进行循环, count 表示计数, ...
- 『转载』判断一个正整数是不是素数,时间复杂度为O(根号n)
原文链接:https://blog.csdn.net/liangdagongjue/article/details/77895170#commentsedit PS:新手上路,实在找不到怎么转载,所以 ...
- 安装pwntools及对于解决问题方法搜索的经验总结
安装pwntools 按照网站(https://www.cnblogs.com/xiao3c/p/6799745.html) 中的教程进行安装 下载pwntools 输入命令 git clone ht ...
- HTML元素解释
<html> 与 </html> 之间的文本描述网页 <body> 与 </body> 之间的文本是可见的页面内容 <head> 与 < ...
- 查找字符在字符串中第N次出现的位置
1.查找字符串 @find 在字符串 @str 中第 (@n) 次出现的位置.没有第 (@n) 次返回 0. 返回@find在@str中第(@n)次出现的位置.没有第(@n)次返回0. ), ), ...