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

求教大神 !!!

想知道为什么速度没有向下、向上取整时,不会完全移出、移入啊?

正在回答

3 回答

假设-200  》 0的过程,

speed = ( iTarget  - oDiv.offsetLeft )/20

随着移动的过程,oDiv.offsetLeft 值会越来越大,-200   ...  -100  ..   -50  ..  -20    ...  -10

对应的值speed就越来越小,200/20  100/20   50/20  20/20   10/20   5/20

很明显,后面的值是0<speed<1的   而且speed越来越小,

所以在
oDiv.style.left = oDiv.offsetLeft + speed +"px";  中就无法达到目标值,

所以采取向上取整的形式把speed=0.*的情况都取值为1,

1 回复 有任何疑惑可以回复我~

我的理解是 speed 没有取整时,当 oDiv.offsetLeft 越来越接近 iTarget , 由 speed = ( target - oDiv.offsetLeft)/20 可以看出 speed 的值会趋向于无穷小,没有了速度,也就不会完全移入移出。不过如果是这样的话,speed的值取不到0,div1就不会停止移动,只会无限逼近目标距离,这样显然是不可能的。评论里有人说这里浏览器会采取四舍六入五成双的方式自动取整,虽然不懂是怎么取整的,但只要能够取整,speed 的值就能取到0,也就可以停下来了。

0 回复 有任何疑惑可以回复我~
#1

微笑向陽安之若素 提问者

谢谢(≧ω≦)/
2017-02-23 回复 有任何疑惑可以回复我~
#2

微笑向陽安之若素 提问者

谢谢(≧ω≦)/
2017-02-23 回复 有任何疑惑可以回复我~

  speed = (iTarget - icur) / 20;

        speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

我的理解是速度没有向上向下去取整时,speed将会带有小数,

obj.style[attr] = icur + speed + 'px';当attr为width时,就会执行这句话,然后会把当时的值赋值给它。然后因为每隔一定的事件会刷新一次,然后会重新执行上诉过程 ,导致width值变大,最后就会导致不会完全移出、移入。

0 回复 有任何疑惑可以回复我~
#1

微笑向陽安之若素 提问者

…… 没听懂 不过谢谢你。
2017-02-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JS动画效果
  • 参与学习       113925    人
  • 解答问题       1443    个

通过本课程JS动画的学习,从简单动画开始,逐步深入各种动画框架封装

进入课程

求教大神 !!!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信