概述
innerWidth
在原生js中该属性用于获取页面可以区域的宽度不包含滚动条的宽度,并且该属性元素并不能使用,只能是window才能有效
console.log(window.innerWidth);
console.log($(".box").get(0).innerWidth);
但是在jQuery中innerWidth是一个方法,该方法不仅window有效,而且元素也可以使用,元素使用获取到的是元素的内部宽度,也就是content区域+padding的宽度。
<div class="box">
Lorem, ipsum.
</div>
.box {
width: 200px;
height: 100px;
background: red;
}
console.log($(window).innerWidth());
console.log($(".box").innerWidth());
由此可见innerWidth在jQuery与原生中虽然名字一样但是其类型已经发生变化,在jQuery中是函数,在原生js中是一个属性,其作用也有差异,在jQUery中是获取或设置元素的宽度,在原生ks中是获取页面可以区域的宽度。
outerWidth
与innerWidth类似的还有outerWidth,其在jQUery中也同样是一个函数,用来获取或设置元素的外部宽度,该宽度包括border的宽度,如果在获取时传入参数true会获取包括margin在内的盒模型所有的宽度。
<div class="box">
Lorem, ipsum.
</div>
.box {
width: 200px;
height: 100px;
padding: 20px;
background: red;
border: 1px solid orangered;
margin: 20px;
}
console.log($(".box").outerWidth());
如此可见其计算的是content区域的宽度+padding区域的宽度+border的宽度
接下来我们传入true
console.log($(".box").outerWidth(true));
如此可见其计算的是content区域的宽度+padding区域的宽度+border的宽度+margin的宽度
但是outerWidth在原生js中获取到的是页面可视区域的宽度包括滚动条的宽度,对于元素仍然无效
console.log($(".box").get(0).outerWidth);
console.log(window.outerWidth);
此时计算的宽度包括了关东跳的宽度,该属性在jQuery中与原生js的差异相似。
offset
在jQuery中offset是一个函数,该函数返回一个对象,该对象中有top和left属性,在原生js中offsetTop和offsetLeft是分开的这是其中的一个差异。
<div class="box">
<p>
Lorem, ipsum dolor.
</p>
</div>
console.log($("p").offset());
另外,jQuery的offset计算的是元素距离页面top和left的距离,body有margin也会计算在内
* {
margin: 0;
padding: 0;
}
body {
margin: 20px;
}
.box {
width: 200px;
height: 100px;
padding: 20px;
background: red;
border: 1px solid orangered;
margin: 20px;
position: absolute;
}
p {
margin-top: 20px;
position: absolute;
}
console.log($("p").offset());
在原生js中offsetTop和offsetLeft计算的是距离offsetParent(也就是定位元素)的top和left的距离,如果元素的父元素和祖先元素中没有定位元素才计算距离页面的距离。
* {
margin: 0;
padding: 0;
}
body {
margin: 20px;
}
.box {
width: 200px;
height: 100px;
padding: 20px;
background: red;
border: 1px solid orangered;
margin: 20px;
position: absolute;
}
p {
margin-top: 20px;
}
console.log($("p").get(0).offsetTop);
此时计算的是p元素距离.box元素的top的距离如果把absolute去掉,效果如下
此时可以看出与jQuery还是有些区别的,原生js并不计算body的margin值,可以视为计算该元素到body的距离
最后
以上就是火星上花生为你收集整理的jQuery与原生js部分方法的差异innerWidthouterWidthoffset的全部内容,希望文章能够帮你解决jQuery与原生js部分方法的差异innerWidthouterWidthoffset所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复