图解clientWidth,offsetWidth,scrollWidth,scrollTop
新手看到这几个属性,很头疼,参考了网上一些文章,加上自己实践,给出对这几个属性的解释
我把代码贴上来,方便大家验证
在chrome浏览器中,不知为什么图片容器高度比图片高度多了4px,把图片设置为block或者是容器的fontSize设置为0可解决这个问题。
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.div1 {
position: absolute;
top: 180px;
left: 180px;
width: 500px;
height: 500px;
background: #E91616;
overflow: auto;
z-index: 10;
border: 20px solid green
} .img1 {
position: absolute;
top: 200px;
left: 200px;
opacity: 0.5;
}
</style>
</head> <body>
<div class="div1">
<!-- 容器比图片多4px -->
<!-- 设置img为块级元素 -->
<!-- 或者是设置容器元素的fontSize为0 -->
<img style="display: block" src="../common/baiduPicture/8.jpg" alt="">
</div>
<img class="img1" src="../common/baiduPicture/8.jpg" alt="">
</body> </html>
图片是这个
页面效果,我放了两张图片,下面半透明的那张是完整显示,方便和框中的不完整的做对比。
水平方向上
1是clientWidth,2是offsetWidth,3是scrollWidth
不能我说是就是,要想办法验证一下
验证clientWidth
从图上看,clientWidth + 滚动条的宽度 应该恰好等于div1的contentBox的宽度
而滚动条宽度可以用(注意要先清除body的margin)
window.innerWidth - document.body.clientWidth
来获取,我的结果是,滚动条宽度为17px
获取div1的clientWidth,483
获取divcontentBox的width,500(我在chrome下审查元素,显示的是483px,有偏差,在firefox下就显示的是500)
正好相等
验证offsetWidth
从图上看,offsetWith应该等于 clientWidth + 滚动条宽度 + 两边border宽度
获取offsetWith,540
样式中border是20
540 = 483 + 17 + 40,相等
验证scrollWidth
从图上看,scrollWidth应该等于图片宽度
获取scrollWidth,709
图片宽度也是709
两者相等
大家可以自己验证一下
垂直方向上
4是clientHeight,5是offsetHeight,6是scrollHeight
验证方法和上面一样。
scrollTop
我们在向下滚动 滚动条的时候,可以看成是里面内容在向上移动,而scrollTop就是图片向上移动的距离。
按照这个说法,当滚动条在从最上面滚动到最下面的时候(如下图所示),图片的底线就是半透明图片的底线的位置,移动到,div1水平滚动条顶线的位置
所以,应该有
图片向上偏移的距离(scrollTop) = 图片的高度 - div1的clientHeight
图片的高度是987
div1的clientHeight是483
div1的scrollTop是504
等式成立
完
如果错误,欢迎讨论!
图解clientWidth,offsetWidth,scrollWidth,scrollTop的更多相关文章
- js获取浏览器基本信息:document.body.clientWidth/clientHeight/scrollWidth/scrollTop。(转)
js获取浏览器基本信息:document.body.clientWidth/clientHeight/scrollWidth/scrollTop. 分类: js.jquery.ext.js技术2011 ...
- clientWidth,offsetWidth,scrollWidth区别
<html> <head> <title>clientWidth,offsetWidth,scrollWidth区别</title> </head ...
- JS中关于clientWidth offsetWidth scrollWidth 的区别及意义
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- JS中关于clientWidth offsetWidth scrollWidth 等的含义
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- js中的clientWidth offsetWidth scrollWidth等的含义
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- JQuery中width和JS中JS中关于clientWidth offsetWidth scrollWidth 等的含义
JQuery中: width()方法用于获得元素宽度: innerWidth()方法用于获得包括内边界(padding)的元素宽度: outerWidth()方法用于获得包括内边界(padding)和 ...
- clientWidth offsetWidth scrollWidth
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- JS中关于clientWidth offsetWidth scrollWidth 等的区别
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- JS中关于clientWidth offsetWidth scrollWidth 等的含义的详细介绍
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对 ...
随机推荐
- flex弹性布局学习
一.介绍 flex( flexible box:弹性布局盒模型),是2009年w3c提出的一种可以简洁.快速弹性布局的属性.主要思想是给予容器控制内部元素高度和宽度的能力.目前已得到以下浏览器支持: ...
- el表达式里面fn的用法
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp31 头部加入标签库 <%@ taglib prefix=" ...
- tomcat学习笔记
1.安装和运行[必须] * 解压apache-tomcat-6.0.35.zip * 位置:不能包含中文和空格 * 运行: %tomcat%/bin/startup.bat * 测试 * http:/ ...
- Node.js之eventproxy详解
安装 npm install eventproxy --save 调用 var EventProxy = require('eventproxy'); 异步协作 多类型异步协作 此处以页面渲染为场景, ...
- 团队作业4---第一次项目冲刺(ALpha)版本 第七天
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 a.完成所有基础功能 b.正在进行测试调试 四.困难与问题 1.随着测试出现了大大小小的一些BUG,但是由于原来写的时候思维定 ...
- swing-窗体添加背景图片的2种方法
在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍.1.利用JLabel加载图片利用JLabel自带的setIcon(Icon icon)加载icon,并设置 ...
- Swing-JMenu菜单用法-入门
菜单是Swing客户端程序不可获取的一个组件.窗体菜单大致由菜单栏.菜单和菜单项三部分组成,如下图所示: 由图可见,对于一个窗体,首先要添加一个JMenuBar,然后在其中添加JMenu,在JMenu ...
- 201521123051《Java程序设计》第十三周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- 201521123053《Java程序设计》第十周学习总结
---恢复内容开始--- 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 在java多线程程序中,所有线程都不允许抛出未捕获的checked excepti ...
- 201521123102 《Java程序设计》第11周学习总结
1. 本周学习总结 2.书面作业 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问)## 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步 ...