简要说明一下offsetWidth的替换

   前面几个例子中用到了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‘;      //将获取的宽度转换成整数值

时间: 2024-10-24 01:40:03

简要说明一下offsetWidth的替换的相关文章

20150912 javascript事件-获取样式

<!doctype html> <html><head><meta charset="utf-8"><title>无标题文档</title><style> #div1{widht:200px;height:200px; background:#f00; border:4px solid black;}</style> <script> window.onload=function

oracle中的替换函数简要分析

replace就是一般意义上的字符串替换 replace(c1,c2[,c3]) 在字符串c1中找到字符串c2,替换成c3.若c3为空,则在c1中删除所有c2. update jd set id = replace(id,'1','2'); 含义就是将jd表中id列中的所有1换为2. translate只是一个字符替换对应的一个字符 TRANSLATE ( expr , from_string , to_string ) 简单的说就是对expr内容,用to_string中的字符逐一替换from_

loosejar原理简要分析

loosejar这个小工具可以动态分析出应用中有每个jar包的实际使用情况,详情请参阅<通过loosejar清理应用中冗余的jar包>基本原理是利用instrumentation的特性用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义.有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了.关于instrumentation的详细介绍,可以参阅这篇文章&l

Android运行时ART简要介绍和学习计划

Android在4.4就已推出新运行时ART,准备替代用了有些时日的Dalvik.不过当时尚属测试版,主角仍是Dalvik. 直到今年的Google I/O大会,ART才正式取代Dalvik.这个消息在科技界引起不小轰动,也吸引不少技术人员对它的"技术分析".可惜这些"技术分析"不过是引用了官方的数据和图表而已.这一系列文章将对ART进行真正的技术分析.老规矩,分析前先进行简要介绍和制定学习计划. 老罗的新浪微博:http://weibo.com/shengyang

SEAndroid安全机制简要介绍和学习计划

与iOS相比,Android最被人诟病的是其流畅性和安全性.然而,从4.0开始,Android不遗余力地改善其流畅性.特别是在即将发布的L版本中,用ART替换了Dalvik,相信会越来越流畅.至于安全性,Android也没有遗忘.从4.3开始,Android引入了一套基于SELinux的安全机制,称为SEAndroid,来加强系统安全性.接下来我们就对SEAndroid进行简要介绍和制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 在介绍SE

Chromium网页渲染机制简要介绍和学习计划

作为一个浏览器,快速地将网页渲染出来是最重要的工作.Chromium为了做到这一点,费尽了心机,做了大量优化工作.这些优化工作是卓有成效的,代表了当今最先进的网页渲染技术.值得一提的是,这些渲染技术不仅适用于网页渲染,也可以应用在原生系统的UI渲染上.例如,在Android系统上,我们就可以看到两者在渲染技术上的相似之处.本文接下来就对Chromium的网页渲染机制进行简要介绍,并且制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Chrom

Android应用程序UI硬件加速渲染技术简要介绍和学习计划

Android系统的流畅性一直被拿来与iOS比较,并且认为不如后者.这一方面与Android设备硬件质量参差不齐有关,另一方面也与Android系统的实现有关.例如在3.0前,Android应用程序UI绘制不支持硬件加速.不过从4.0开始,Android系统一直以"run fast, smooth, and responsively"为目标对UI进行优化.本文对这些优化进行简要介绍和制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注!

AndroidART运行时无缝替换Dalvik虚拟机的过程分析(转载)

AndroidART运行时无缝替换Dalvik虚拟机的过程分析 Android 4.4发布了一个ART运行时,准备用来替换掉之前一直使用的Dalvik虚拟机,希望籍此解决饱受诟病的性能问题.老罗不打算分析ART的实现原理,只是很有兴趣知道ART是如何无缝替换掉原来的Dalvik虚拟机的.毕竟在原来的系统中,大量的代码都是运行在Dalvik虚拟机里面的.开始觉得这个替换工作是挺复杂的,但是分析了相关代码之后,发现思路是很清晰的.本文就详细分析这个无缝的替换过程. 老罗的新浪微博:http://we

vim批量替换

(文章都是从别的地方摘抄并总结的,如有侵权,请联系管理员) vim编辑器---批量注释与反注释    在使用vim编写代码的时候,经常需要用到批量注释与反注释一段代码.下面简要介绍其操作. 方法一 块选择模式 插入注释: 用v进入virtual模式 用上下键选中需要注释的行数 按CTL+v(win下面ctrl+q)进入列模式 按大些"I"进入插入模式,输入注释符"#"或者是"//",然后立刻按下ESC(两下) 取消注释: Ctrl + v 进入块