js原生中得到计算后样式

js原生中得到计算后样式

当我们在操作DOM的时候,我们采用dom对象打点的方式获得样式值时,我们只能得到行内的样式;事实上DOM为我们提供了可靠的API,以得到计算后的样式。

高级浏览器中:
以下写法等价

	window.getComputedStyle(oDiv).getPropertyValue("padding-left");
	getComputedStyle(oDiv).getPropertyValue("padding-left");
	getComputedStyle(oDiv)["padding-left"];
要注意,引号里面不是驼峰命名法:

IE6、7、8
不兼容getComputedStyle.getPropertyValue()的写法,有另外一套写法:附加在元素身上的currentStyle属性,它表现和style点语法一样,使用驼峰式访问。
以下写法的等价

	oDiv.currentStyle.paddingLeft;
	oDiv.currentStyle["paddingLeft"];

DOM已经提供给我们计算后的样式,但是还觉得不方便,所以DOM又提供给我们一些API:

ele.offsetLeft
ele.offsetTop
ele.offsetWidth
ele.offsetHeight
ele.clientWidth
ele.clientHeight

offsetLeft属性和offsetTop属性

这两个属性的兼容性非常差

IE9及以上、Chrome等高级浏览器中
一个元素的offsetLeft值,就是这个元素左边框,到自己的offsetParent对象的左边框的距离。(图片来自网络)
在这里插入图片描述
每一个元素的offsetParent属性,表示自己的“偏移参考盒子”,就叫offsetParent。这个offsetParent如何去找呢。
就是自己祖先元素中,离自己最近的已经定位的元素,如果自己的祖先元素中,没有任何盒子进行了定位,那么offsetParent对象就是body。

高级浏览器中,无论这个盒子自己是否定位,自己的offsetParent就是按照上述方法寻找。

IE8中:
与高级浏览器基本相同!但是,多算了父盒子的一条边框。

IE6、IE7
IE6、7的offsetParent对象是谁,和高级浏览器有大的不同。
情形1:自己如果没有定位属性,那么自己的offsetParent对象就是自己的祖先元素中离自己最近的有width或者有height的元素:

1	<div class="box1">
2		<div class="box2">  → 我有宽度 , offsetParent
3			<div class="box3"> → 我没有宽高 
4				<p></p>   → 我没有定位
5			</div>
6		</div>
7	</div>
8	<div class="box1">
9		<div class="box2">
10			<div class="box3"> → 我没有宽高,有定位  , offsetParent
11				<p></p>   → 我没有定位
12			</div>
13		</div>
14	</div>

情形2:自己如果有定位属性
那么自己的offsetParent就是自己祖先元素中离自己最近的有定位的元素。

数值就是自己的左外边框到offsetParent对象的左内边框的值。

总结:

IE6、7IE8IE9、IE9+、高级浏览器
offsetParent如果自己没有定位,那么就是自己父亲中有width或者有height或者有定位的元素.和高级浏览器一致自己祖先元素中,离自己最近的已经定位的元素
offsetLeft和高级浏览器一致多算一条border自己的border外到offsetParet对象的border内

offsetWidth和offsetHeight

全线兼容,是自己的属性,和别的盒子无关。
offsetWidth:width+padding+border
offsetHeight:height+padding+border

如果盒子没有宽度,那么所有浏览器都将把px值当做offsetWidth,而不是100%;
如果盒子没有高度,用文字撑的,所有浏览器都将把px值当做offsetHeight

clientWidth和clientHeight

clientWidth:width+padding
相当于比offsetWidth少了border
如果盒子没有宽度,那么那么所有浏览器都将把px值当做clientWidth,而不是100%
如果盒子没有高度,用文字撑的,IE6 clientHeight是0,其他浏览器都是数值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2 实现 js 原生轮播图的方法如下: 1. 在 Vue 组件引入轮播图需要的图片,可以使用 require/import 等方式进行引入。 2. 在 Vue 组件定义一个变量,用于存储当前轮播图的索引值。 3. 在 Vue 组件的 mounted 钩子函数,使用 setInterval 函数定时更新当前轮播图的索引值。 4. 在 Vue 组件使用计算属性或者 watch 监听当前轮播图的索引值,根据索引值切换轮播图。 5. 在 Vue 组件使用 v-for 指令渲染轮播图列表,并使用 v-bind 绑定图片地址和样式。 下面是一个简单的示例代码: ```html <template> <div class="slider"> <div class="slider-container" v-bind:style="{ 'transform': 'translateX(' + (-currentIndex * 100) + '%)' }"> <div class="slider-item" v-for="(item, index) in sliderList" v-bind:key="index"> <img v-bind:src="item.url" v-bind:alt="item.title"> <div class="slider-title">{{ item.title }}</div> </div> </div> </div> </template> <script> export default { data() { return { currentIndex: 0, sliderList: [ { url: require('@/assets/images/slider-1.jpg'), title: 'Slider 1' }, { url: require('@/assets/images/slider-2.jpg'), title: 'Slider 2' }, { url: require('@/assets/images/slider-3.jpg'), title: 'Slider 3' } ] } }, mounted() { setInterval(() => { this.currentIndex = (this.currentIndex + 1) % this.sliderList.length }, 3000) } } </script> <style scoped> .slider { width: 100%; overflow: hidden; position: relative; } .slider-container { width: 300%; display: flex; transition: transform 0.5s ease-in-out; } .slider-item { width: 33.33%; display: flex; justify-content: center; align-items: center; } .slider-item img { width: 100%; } .slider-title { position: absolute; bottom: 0; left: 0; right: 0; background: rgba(0, 0, 0, 0.5); color: #fff; padding: 10px; font-size: 14px; } </style> ``` 这是一个简单的轮播图组件示例,你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值