基于js中style.width与offsetWidth的区别(详解)


Posted in Javascript onNovember 12, 2017

作为一个初学者,经常会遇到在获取某一元素的宽度(高度、top值...)时,到底是用 style.width还是offsetWidth的疑惑。

1. 当样式写在行内的时候,如 <div id="box" style="width:100px">时,用 style.width或者offsetWidth都可以获取元素的宽度。

但是,当样式写在样式表中时,如 #box{ width: 100px; }, 此时只能用offsetWidth来获取元素的宽度,而style.width所返回的值为空。

2. style.width 获取的元素宽度只是div的宽度,不包括border、和padding所占的宽度,且宽度值是带单位px的。

offsetWidth 获取的元素宽度为width+border+padding的值(不包括margin),且返回值只为一个数值,不带单位。

如下面的例子所示:

<head>
    <script>
      window.onload = function(){
        var box = document.getElementById('box');
        console.log(box.style.width); 
        console.log(box.offsetWidth); 
       }
</script>
  </head>
  <body>
    <div id="box" style="width:300px; height: 300px; padding:3px; margin: 1px; border: 1px solid red;"></div>
  </body>

控制台输出的第一个结果为:  300px

控制台输出的第二个结果为:  308      注:300+ 3x2 +1x2 = 308, 且不带单位

3. style.width 也可以在js中用来设置元素的宽度,而offsetWidth不可以。

如下面的例子所示:

<script>
      window.onload = function(){
        var box = document.getElementById('box');
        box.style.width = '200px';
        console.log(box.offsetWidth);
        console.log(box.style.width);
        box.offsetWidth = '400px';
        console.log(box.offsetWidth);
        console.log(box.style.width);
      }
    </script>
  </head>
  <body>
    <div id="box" style="width:300px; height: 300px; padding:3px; margin: 2px; border: 1px solid red;"></div>
  </body>

控制台输出的结果分别为 208     200px     208      200px

也就是说通过style.width 设置宽度成功,而 通过offsetWidth设置宽度失败。

以上这篇基于js中style.width与offsetWidth的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS打开层/关闭层/移动层动画效果的实例代码
May 11 Javascript
文本框回车提交与禁止提交示例
Sep 27 Javascript
你未必知道的JavaScript和CSS交互的5种方法
Apr 02 Javascript
jQuery ajax调用WCF服务实例
Jul 16 Javascript
jQuery实现列表的全选功能
Mar 18 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
Feb 17 Javascript
搞定immutable.js详细说明
May 02 Javascript
通过扫描二维码打开app的实现代码
Nov 10 Javascript
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
Aug 01 Javascript
jquery实现吸顶导航效果
Jan 08 jQuery
JavaScript中的类型检查
Feb 03 Javascript
浅谈webpack下的AOP式无侵入注入
Nov 12 #Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 #Javascript
JS实现小球的弹性碰撞效果
Nov 11 #Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 #jQuery
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 #Javascript
JS Input里添加小图标的两种方法
Nov 11 #Javascript
fetch 使用及如何接收JS传值
Nov 11 #Javascript
You might like
Sony CFR 320 修复改造
2020/03/14 无线电
自动跳转中英文页面
2006/10/09 PHP
PHP中的array数组类型分析说明
2010/07/27 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
使用pdb模块调试Python程序实例
2015/06/02 Python
Python3.6正式版新特性预览
2016/12/15 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
python将list转为matrix的方法
2018/12/12 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
final, finally, finalize的区别
2012/03/01 面试题
大一学生职业生涯规划
2014/03/11 职场文书
2014最新实习证明模板
2014/10/02 职场文书
跳高加油稿
2015/07/21 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
2022年四月新番
2022/03/15 日漫