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

利用setTimeout重复调用函数,赋值相互干扰怎么办?

利用setTimeout重复调用函数,赋值相互干扰怎么办?

function go_to_position(x, y) { var ele = document.getElementsByTagName("p")[0]; var x_now = parseInt(ele.style.left);  var y_now = parseInt(ele.style.top); //clearTimeout(movement); if(x_now == x && y_now == y) { return; } if(x_now != x || y_now != y) { if(x_now - x > 0) { x_now -= 1; } if(x_now - x < 0) { x_now += 1; } if(y_now - y > 0) { y_now -= 1; } if(y_now - y < 0) { y_now += 1; } ele.style.left = x_now + 'px'; ele.style.top = y_now + 'px'; console.log(x_now + "," + y_now); } movement = setTimeout(function() { go_to_position(x, y); }, 5); } go_to_position(150, 241); go_to_position(300, 241); //原来的位置是(200.241) 想要先移动到(150.241) 再移动到(300.241) // 执行的时候多个setTimeout 同时执行, x赋值在150和300 来会变。导致x_now 交替执行+1 -1  //若插入clearTimeout,直接移动到最后 (300.241)的位置请问,如何达到先移动到150.241 再移动到300.241 的效果 ?如果强行要用setTimeout的话
查看完整描述

2 回答

?
cleartime

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

这个我感觉css3就可以做到吧,没必要写js

查看完整回答
反对 回复 2016-12-12
?
sntatas

TA贡献53条经验 获得超11个赞

使用clearTimeout直接移动到最后是因为setTimeout中时间间隔太小,函数没有调用完有被调用了,导致浏览器在所有函数调用完才进行渲染浏览器

setTimeout的时间调大(比如设置个300),在打开clearTimeout试试

查看完整回答
反对 回复 2016-12-10
  • 2 回答
  • 0 关注
  • 2496 浏览
慕课专栏
更多

添加回答

举报

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