为了账号安全,请及时绑定邮箱和手机立即绑定

left值不一样

left值不一样

周末00 2015-10-26 11:49:07
<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>缓冲1</title>     <style type="text/css">         #div1{height: 200px;           width: 200px;           background: blue;           position: relative;           left: -200px;           }         #div1 span{   position: absolute;             height: 50px;             width: 15px;             left: 200px;             top: 75px;             background-color: red;             }         *{margin: 0;padding: 0;}     </style>     <script type="text/javascript">     window.onload=function () {         var div1=document.getElementById('div1');             div1.onmouseover=function(){                 startmove(0);             }             div1.onmouseout=function(){                 startmove(-200);             }     }     var timer=null;     function startmove (itarget) {         clearInterval(timer);         timer=setInterval(function(){             var speed=(itarget-div1.offsetLeft)/20;//speed赋值后,下边接着判断             speed=speed>0?Math.ceil(speed):Math.floor(speed);             if (itarget==div1.offsetLeft) {                     clearInterval(timer);             } else{                 div1.style.left=div1.offsetLeft+speed+'px';             };         },30)     }     </script> </head> <body>     <div id="div1">         <span>分享</span>     </div> </body> </html><!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>缓冲2</title>     <style type="text/css">         #div1{height: 200px;           width: 200px;           background: blue;           position: relative;           left: -200px;           }         #div1 span{   position: absolute;             height: 50px;             width: 15px;             left: 200px;             top: 75px;             background-color: red;             }         *{margin: 0;padding: 0;}     </style>     <script type="text/javascript">     window.onload=function () {         var div1=document.getElementById('div1');             div1.onmouseover=function(){                 startmove(0);             }             div1.onmouseout=function(){                 startmove(-200);             }     }     var timer=null;     function startmove (itarget) {         clearInterval(timer);         timer=setInterval(function(){//这里speed直接赋值并且判断             var speed=speed>0?Math.ceil((itarget-div1.offsetLeft)/20):Math.floor((itarget-div1.offsetLeft)/20);             if (itarget==div1.offsetLeft) {                     clearInterval(timer);             } else{                 div1.style.left=div1.offsetLeft+speed+'px';             };         },30)     }     </script> </head> <body>     <div id="div1">         <span>分享</span>     </div> </body> </html>两种speed的赋值方式,造成两种结果:第一段代码向右移动后的left值正常,能达到0;第二段代码向右移动后的left值是-19px.
查看完整描述

2 回答

?
echo_kinchao

TA贡献600条经验 获得超86个赞

逻辑出现了问题

查看完整回答
反对 回复 2015-10-26
  • 周末00
    周末00
    两个speed我都有向上和向下取整的判断,结果应该是一样的吧,但是实际结果为什么不一样,我想不通
  • 周末00
    周末00
    错误应该是第二段,我没有给speed先赋值,但是代码怎么还能运行呢?
?
忧郁的狮子座

TA贡献6条经验 获得超0个赞

因为19除以20等于0。因此,当offsetleft小于20,比如19的时候,speed就为0了,当然就不动咯。反过来增加的话,就不会出现这种情况。

查看完整回答
反对 回复 2015-10-26
  • 忧郁的狮子座
    忧郁的狮子座
    建议把结果扩大100倍,比如speed=(offsetleft*100)/20这样的
  • 周末00
    周末00
    但是我有向上取整呀
  • 忧郁的狮子座
    忧郁的狮子座
    你这个又不是单向的,有两个过程,0->200,200->0,第一个过程没问题,第二个过程,当offsetleft减到19的时候speed就为0了,这个时候div1.style.left=div1.offsetLeft+speed+'px';还有意义吗,offsetleft一直在加0而已,offsetleft加0不变,speed也就不变,so,他俩都不变了,offsetleft永远回不去0了。
点击展开后面2
  • 2 回答
  • 0 关注
  • 1573 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信