JS运动框架中关于offsetWidth的一个小bug

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>JS运动框架中关于offsetWidth的一个小bug</title>
    <style>
    div{
      width:300px;
      height: 300px;
      background-color: pink;
      border:1px solid black;
    }
    </style>
  </head>
  <body>
    <div></div>
  </body>
   <script type="text/javascript">
   //这种情况下,我想当然的以为会出现div会慢慢变小的运动效果,但是实际上是这个div在慢慢变宽,原因在于:offsetWidth是包含了
   //border+width+margin的所有宽度,此时的div的offsetWidth是302,也就是说,最开始的width是300,30毫秒后width变成了
   //(302-1)=301px,所以会显现出变大了的效果
   setInterval(function(){
     var oDiv=document.getElementsByTagName('div');
     oDiv[0].style.width=oDiv[0].offsetWidth-1+'px';
   },30);


   //下面这个栗子是正常的,好像没有bug,原因在于速度大于物体的border值,恰好避免了bug的发生
   // var timer=null;
   // function startMove(obj,iTarget){
   //   clearInterval(timer);
   //   timer=setInterval(function(){
   //     var speed=(iTarget-obj.offsetWidth)/6;
   //     speed=speed>0?Math.ceil(speed):Math.floor(speed);
   //     if(obj.offsetWidth==iTarget){
   //       clearInterval(timer);
   //     }
   //     else{
   //       obj.style.width=obj.offsetWidth+speed+'px';
   //     }
   //   },30);
   // }
   // var oDiv=document.getElementsByTagName('div');
   // oDiv[0].οnmοuseοver=function(){
   //   startMove(this,600);
   // }
   // oDiv[0].οnmοuseοut=function(){
   //   startMove(this,300);
   // }

   </script>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值