zoukankan      html  css  js  c++  java
  • JavaScript中width和offsetWidth的区别(动画中)

    JavaScript中width和offsetWidth的区别(动画中)

    我们先看这连个参数本身的区别,

    物体自身的宽度;

    offsetWidth:物体盒子模型的宽度,包括border pading

    HTML:

       <input type="button" value="show" onclick="show()" />
        <div id="move"></div>

    CSS:

     #move{
        height:100px;
        width:100px;
        background:green;
        border:1px solid black;
     }

    javaScript:(在注意区分,物体的运动和物体自身的变化(比如,长度,宽度 border 等等))

         //兼容性的获取 行间样式和 嵌套样式
         function getStyle(obj,name){
             if(obj.currentStyle!=undefined){
                return obj.currentStyle[name];
             }else{
                 return getComputedStyle(obj,false)[name];
             }
         }
    
         function show(){
             var obj=document.getElementById("move");
             alert(getStyle(obj,'width')); //100px 物体单纯的宽度
             alert(obj.offsetWidth);       //102px 自身宽度+border,如果有pading的话,还要加上pading
         }

    根据上面的特性;

    当我们在做物体的运动的时候,如果采用offsetWidth;结果....

         window.onload=function (){
            var obj=document.getElementById("move");
            setInterval(function (){
                //本意:让obj每个30 width减去1
                obj.style.width=obj.offsetWidth-1+'px';
                //然后实际上是;   //102-1 =101
                                //101+border(2)-1
                                //所以变成了加一
                                //如果减去的数恰好等于border 2 则原地不动
                                //如果减去的数为3 才等于我们的本意;
                         
            },30) 
         }

    总结,当我们在让物体的宽度变化的时候,只能取实际的值width,不能包含border pading 等因素

    如果使用的是offsetWidth 物体就不好设置border 和 pading,如果设置了,就要使用width了;

    同样,之前我们在物体运动的时候取的是offsetLeft,如果我们取其他参数呢? 又会出问题;

    那就涉及到定位 参照物的问题了?

  • 相关阅读:
    gdb 调试器的使用
    vi 的基本操作
    Makefile
    gcc
    动态内存分配
    Linux常用命令
    文件基本操作
    linux的启动配置文件(grub)
    Hello IT
    Val简介(来源维基百科)
  • 原文地址:https://www.cnblogs.com/mc67/p/5197161.html
Copyright © 2011-2022 走看看