No.013 JavaScript获取和修改CSS样式

(以下所有内容仅用以记录学习过程中的个人理解,如有错误欢迎指出)

1. 获取/修改内联样式

通过JS获取/修改元素的内联样式

语法为元素.style.样式名 = "样式值"

需要注意的是,-号在JS中不合法,所以诸如background-color的样式名,在JS中要写成驼峰式,如backgroundColor

下面为一实例:

<style>
	#box1{
		height: 200px; width: 200px;
		background-color: yellowgreen;
	}
</style>
<script>
	window.onload = function(){
		var btn1 = document.getElementById("btn1");
		var box1 = document.getElementById("box1");
		btn1.onclick = function(){
			box1.style.height = "150px";
			box1.style.width = "150px";
			box1.style.backgroundColor = "blue";
		}
	}
</script>
<body>
	<button id="btn1">点击变化</button>
	<div id="box1"></div>
</body>

实现效果如下:
实现效果
点击按钮之后,代码中实际改变的部分是:

<div id="box1" style="height: 150px; width: 150px; background-color: blue;"></div>

可知,该方法是直接在元素标签内通过style属性修改样式,而不是修改CSS样式。同时内联样式优先级较高,所以在修改后会立即显示。

但如果在CSS样式中设置了!important,则设置的样式优先级最高,不会受到内联样式改变的影响。

<style>
	#box1{
		height: 200px; width: 200px;
		background-color: yellowgreen !important;
	}
</style>

背景颜色设置!important,点击后不会被修改。
实现效果1

2. 获取当前样式

通过JS获取元素的当前样式只读,不能修改。

语法在IE浏览器中为元素.currentStyle.样式名 = "样式值"。如果没有当前样式,则返回指定样式的默认值

其他浏览器中为getComputedStyle(元素名, 伪元素/null)方法,该方法会返回一个封装了指定元素样式的对象。如果没有当前样式,则返回指定元素样式的真实值。(支持IE8以上)

为了方便,一般把这两个封装成一个函数,通过判断浏览器种类使用不同方式:

function getStyle(obj, name){
	if(window.getComputedStyle){ //判断
		//其他浏览器,有getComputedStyle()方法
		return getComputedStyle(obj, null)[name];
	}else{
		//IE浏览器,没有getComputedStyle()方法
		return obj.currentStyle[name];
	}
}

3. 获取文档内容宽高

主要内容如下图:
document文档宽高属性
(看着还是很让人眼瞎的)

详细讲解可参考:http://blog.poetries.top/2016/12/13/js-props/

3.1 client

只读,不能修改。

clientWidth / clientHeight

语法为元素.clientWidth/元素.clientHeight,它获取到的都是不带单位的数字,可以进行计算,获取到的宽高包括内容区和内边距

总结:(高度同理)

  1. padding无滚动条:
    clientWidth= 盒子的width
  2. padding无滚动条:
    clientWidth= 盒子的width+ 盒子的padding×2;
  3. padding有滚动条:
    clientWidth= 盒子和width+ 盒子的padding×2 - 滚动轴宽度。

clientTop / clientLeft

语法为元素.clientTop/元素.clientLeft,它获取到的数值就是外边框的宽高。

总结:(高度同理)

  1. clientTop= border-top
  2. clientLeft= border-left

3.2 offset

只读,不能修改。

offsetWidth / offsetHeight

语法为元素.offsetWidth/元素.offsetHeight,它获取到的宽高包括外边框、内边距和内容区

总结:(高度同理)

  1. paddingborder无滚动:
    offsetWidth= clientWidth= 盒子宽度;
  2. paddingborder无滚动:
    offsetWidth
    = 盒子宽度 + 盒子padding×2 + 盒子边框×2
    = clientWidth+ 边框宽度×2;
  3. paddingborder有滚动,且滚动是显示的:
    offsetWidth
    = 盒子宽度 + 盒子padding×2 + 盒子边框×2
    = clientWidth+ 滚动轴宽度 + 边框宽度×2。

offsetTop / offsetLeft

它们获取到的数值为相对于其开启定位的父元素的偏移量。

3.3 scroll

只读,不能修改。

scrollWidth / scrollHeight

语法为元素.scrollWidth/元素.scrollHeight,它获取到的宽高不包括两侧滚动轴

总结:(高度同理)

  1. 无滚动轴时:
    scrollWidth= clientWidth= 盒子宽度 + 盒子padding×2;
  2. 有滚动轴时:
    scrollWidth= 实际内容的宽度 + 盒子padding×2。

scrollTop / scrollLeft

语法为元素.scrollTop/元素.scrollLeft,它获取到的数值是拖动滚动条时元素被卷起来的高度,简单来说,就是滚动条拖动了多长,它的值就是多少。

与前面不同,它是可读写的。

3.4 滚动条与阅读条款

在日常生活中,一些阅读条款需要保证用户阅读完才允许进行注册等后续行为。

我们可以通过对滚动条的拖动事件进行判断从而保证条款内容阅读到底。

以下有两个等式:

  1. scrollWidth- scrollLeft== clientWidth,成立时说明水平滚动条拖动到底;
  2. scrollHeight- scrollTop== clientHeight,成立时说明垂直滚动条拖动到底。

可以把以上两条等式用于JS的判断条件中。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值