回调函数中的alert提前执行了是为什么

槑槑mei 2020-10-31 01:44:47


oBtn4.onclick=function(){
boxrun( oDiv3,'width',400,20,function(){
alert('aaa')
})
}


function boxrun(obj,attr,target,speed,callback){
clearInterval(obj.timrA)
var nowValue=parseInt(getComputedStyle(obj,null)[attr])
if( nowValue>target){
speed=-speed
}
obj.timrA=setInterval(function(){
var oldValue=parseInt(getComputedStyle(obj,null)[attr])
var newValue=oldValue+speed

if( (speed<0&&newValue<target)||(speed>0&&newValue>target)){
newValue=target
}
obj.style[attr]=newValue+"px"

if(newValue==target){
clearInterval(obj.timrA)
callback()&&callback
}
},30)
}

为什么newValue没到达target值时执行了alert()
...全文
549 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gqkmiss 2020-11-17
  • 打赏
  • 举报
回复
不要用alert,会阻断进程,加载一个UI的弹框来弹出
123秀敏 2020-11-17
  • 打赏
  • 举报
回复
用setTimeout方法延时一下弹窗框的时间
天际的海浪 2020-10-31
  • 打赏
  • 举报
回复
callback && setTimeout(callback, 0);
Hello World, 2020-10-31
  • 打赏
  • 举报
回复
可以用DIV模拟弹出提示框,不阻塞进程,或者延时弹出提示框 if (newValue == target) { clearInterval(obj.timrA) setTimeout(callback,30) }
Hello World, 2020-10-31
  • 打赏
  • 举报
回复
大概是浏览器更新DOM属性需要一定的时间,在更新之前弹出了提示框,导致更新中断了。 通过getComputedStyle得到的值已经是匹配的了,但元素的实际大小还未更新

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧