js盒子模型

 js中提供一些属性和方法用来描述盒子的样式的

clientWidth/clientHeight

当前盒子可视区域的宽度和高度 
可视区域:内容的宽高+padding*2 
clientHeight = height+padding(top&&bottom) 
clientWidth = height+padding(left&&right) 
他们的值和内容是否溢出和是否设置了overflow:hidden没有关系

clientTop和clientLeft

只有top和left,没有其他的 
clientTop:盒子上边框的高度 
clientLeft:盒子左边框的宽度 
通过JS盒子模型获取的结果是不带单位的,而且只能是整数,(他会自动四舍五入)

offsetWidth和offsetHeight 

在clientHeight和clientWidth的基础上加上了边框的长度; 
offsetWidth=clientWidth+左右边框(border) 
offsetHight=clienthight+上下边框 
真实项目中,如果想要得到盒子的宽度和高度一般都用offsetWidth和offsetHeight,这样就包含了盒子的边框

offssetParent: 当前盒子的父级参照物(得到父级参照物元素) 

父级参照物不等价于父级元素,与父级元素没有直接关系 
父级参照物:同一平面中最外层容器是所有里层盒子的父级参照物 
一般情况下,一个页面所有元素的父级参照物都是body,body没有父级参照物;

但是一旦某些元素设置了position(relative/absolute/fixed)就会形成一个新的平面,那么其内部元素的父参照物就不在是body,而是当前元素本身

offsetTop&offsetLeft:当前元素外边框距离父级参照物的内边框的偏移量 
(标准IE8浏览器特殊性: 当前元素最外边框距离父级参照物的外边框的偏移量 ) 

实现获取页面中任何一个元素距离body的左偏移和上偏移

function offset(element) {
			// 1.首先获取当前元素的父参照物和其距离父参照物的偏移
			let parent = element.offsetParent,
				top = element.offsetTop,
				left = element.offsetLeft;
			// 2.循环依次向上查找父参照物(一直到找不到为止)
			while (parent) {
				// 加上父参照物的边框(非IE8浏览器中才加)
				if (!/MSIE 8/.test(navigator.userAgent)) {
					left += parent.clientLeft;
					top += parent.clientTop;
				}
				// 加上父参照物的偏移值
				left += parent.offsetLeft;
				top += parent.offsetTop;
				// 继续向上查找
				parent = parent.offsetParent;
			}
			// 3.把查找的结果返回
			return {
				// top:top
				top,
				left
			};
		}
window.navigator.userAgent 获取浏览器的版本号

scrollHeight&& scrollWidth

没有内容溢出:获取的结果和clientWidth、clientHeight的结果相同; 
有内容溢出:真实内容的宽度或高度,包含溢出内容的值,再加上padding或左padding的值 
scrollWidth&&scrollHeight获取的是约等于的值,由于内容溢出,每个浏览器对于行高或文字的渲染不一样,回去的结果也不一样 
是否设置overflow:hidden对最后的结果也有影响

scrollLeft&&scrollTop 

横向或竖向滚动条卷去的宽度或高度 
(在拉动滚动条时,上面的内容会被卷去,就是scrollTop)

最小值:0
最大值:scrollHight-clientHight:真实页面高度-一屏幕的高度
前面的JS盒子模型的属性都是只读属性,只能获取,不能修改;而scrollTop&&scrollLeft是可读写属性,既可以获取,也可以修改;

实现按钮点击回到页面顶部的效果

<body>
	<button id="GOTO">回到顶部</button>


	<!-- IMPORT JS -->
	<script>
		// 开始不显示回到顶部按钮,当随着滚动条滚动,卷去的高度超过了一屏幕的大小,我们再显示这个按钮
		window.onscroll = function () {
			// onscroll不论我们基于什么方式,控制了滚动条的滚动,都会触发这个事件,让绑定的方法执行
			let sT = document.documentElement.scrollTop,
				cH = document.documentElement.clientHeight;
			if (sT >= cH) {
				GOTO.style.display = 'block';
			} else {
				GOTO.style.display = 'none';
			}
		};

		GOTO.onclick = function () {
			document.documentElement.scrollTop = 0;
		};
	</script>
</body>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值