oDiv.offsetLeft = 190具体是如何得到的?

来源:3-1 JS缓冲动画

12只怕有心人

2016-09-24 15:34

timer = setInterval(function(){

var speed = (iTarget - oDiv.offsetLeft)/20;

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

// if(oDiv.offsetLeft == iTarget){

// clearInterval(timer);

// }else{

oDiv.style.left = oDiv.offsetLeft+speed+"px";

// }

},30)

--------------------------------------------------------------------------------------------------------

描述不是很清楚我重新整理下:

从左向右移入后进行第一轮循环时,

当前#div1 left值为-200,iTarget为0

var speed = (iTarget - oDiv.offsetLeft)/20 ;  应该就是 speed = (0-(-200))/20=10;

那么接下去的

oDiv.style.left = oDiv.offsetLeft+speed+"px";  应该就是 -200 + 10 + "px" = -190px;

就是移入动作完成后,尚未触发移出事件前,,#div1冒出界面右侧应有10px了,大部分(-190px)应该还是在屏幕左侧看不到),但视频里显示的是left为-8.55px是如何计算出来的呢?见4:46秒

http://img.mukewang.com/57e67ef40001cb1d08510438.jpg


为什么中触发移出事件后,left才得到-190.05px呢?这时iTarget是按一开始传入的-200进行计算吧?那么这时的oDiv.offsetLeft可以自己计算出来吗?offsetLeft是属性可以直接获取,但我不会计算啊. 见5:55秒

http://img.mukewang.com/57e67ed30001fe8106980405.jpg



有大侠能分析一详细的计算过程到底是怎么回事吗?


写回答 关注

3回答

  • WinXXP3952812
    2016-11-29 17:52:44

    像素有小数时会四舍五入,所以speed小于1大于0.5时还会动,10px左右的时候停止是刚好speed在0.5的分界线

  • ty淡然
    2016-09-24 19:06:18

    这是当前距左边的距离,运动中是不断变化的,所以速度也是变化的,越接近target,speed越小。

    WinXXP... 回复weibo_

    同样的问题

    2016-11-29 17:46:36

    共 2 条回复 >

  • Mia12
    2016-09-24 17:48:11

    offsetLeft是属性啊,直接获取就可以了

JS动画效果

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

113925 学习 · 1443 问题

查看课程

相似问题