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

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

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://img1.sycdn.imooc.com//57e67ef40001cb1d08510438.jpg


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

http://img1.sycdn.imooc.com//57e67ed30001fe8106980405.jpg



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


正在回答

3 回答

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

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

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

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

weibo_

问题是只要oDiv.offsetLeft与iTarget不相等,移动就不会停下来,那么最后为啥会出现left=-8.55px呢
2016-10-09 回复 有任何疑惑可以回复我~
#2

WinXXP3952812 回复 weibo_

同样的问题
2016-11-29 回复 有任何疑惑可以回复我~

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

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

举报

0/150
提交
取消

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

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