博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简要说明一下offsetWidth的替换
阅读量:5059 次
发布时间:2019-06-12

本文共 1270 字,大约阅读时间需要 4 分钟。

   前面几个例子中用到了offsetWidth这个属性,其实还有offsetTop,offsetHeight,offsetLeft等一些属性,总的来说这些都可以表示当前对象的一些属性值,可是在某些情况下,就可能引发一些不必要的问题,比如就offsetWidth来说,当用这个属性来获取目标的宽度时,当不给目标加边框时,基本不会有什么影响,可是在实际中一般多多少少都会有一些边框,这是就显示出一些问题,offsetWidth所获取的宽度并不是在css样式中指定的宽度,而是包含了边框与padding值,所以与要获取的目标值有一定区别,这个在单个物体运动中,当用offsetWidth来获取宽度时,给物体加上边框和不加效果完全不一样。

 

比如下面这段代码:

#div1{ width:100px;height:100px;background:red;border:1px solid black;}

<script>

window.onload = function()

{  

  var oBtn =  document.getElementById("btn");

  var oDiv = document.getElementById("div1");

  oBtn.onclick = function()

  {

    setInterval(function(){

    oDiv.style.width = oDiv.offsetWidth - 1+'px';

    },30);

  };

};

</script>

<body>

  <input type="button" id="btn" value="开始运动">

  <div id="div1"></div>

</body>

 

当然这只是举个比较简单的例子,比会发现这个div的宽度不会减少,相反还会增加,此时就有边框的影响了。所以在实际中,我个人感觉还是不要或者少用这个offsetWidth等一些属性,有个简单的方法可以避免这个问题,我们可以封装一个方法来获取非行间样式,下面这段应该就可以用用:

function getStyle(obj,arr){       //两个参数,第一个是获取谁的,第二个是什么样式

if(obj.currentStyle){
return obj.currentStyle[arr]        //写多个主要是为了浏览器兼容性问题
}else{
return getComputedStyle(obj,false)[arr]; //里面有两个参数,第一个是获取谁的,第二个参数不为空就行,后面是获取样式
}
}

所以刚才那段代码就可以写成这样:

oDiv.style.width = parseInt(getStyle(oDiv,'width')) - 1 +'px';      //将获取的宽度转换成整数值

转载于:https://www.cnblogs.com/slientLove/p/5879053.html

你可能感兴趣的文章
ios封装静态库技巧两则
查看>>
Educational Codeforces Round 46 (Rated for Div. 2)
查看>>
Abstract Factory Pattern
查看>>
C# 实现Bresenham算法(vs2010)
查看>>
基于iSCSI的SQL Server 2012群集测试(一)--SQL群集安装
查看>>
list 容器 排序函数.xml
查看>>
存储开头结尾使用begin tran,rollback tran作用?
查看>>
Activity启动过程中获取组件宽高的五种方式
查看>>
java导出Excel表格简单的方法
查看>>
SQLite数据库简介
查看>>
利用堆实现堆排序&amp;优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
App.config自定义节点读取
查看>>