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

关于else if 的疑问

我用传统 js 方法编写小球动画时发现三个球球速一个比一个快,而且不能回滚,第三个球一直在原位震动,后来发现是因为我把代码里的 else { if... else...}当成了 else if.. else...,但我不知道这二者有什么区别,为什么最后动画结果不一样?

错误代码:

function animation(ball, distance, cb){
		setTimeout(function(){
			var marginLeft = parseInt(ball.style.marginLeft, 10);
	    	if (marginLeft === distance){
	    		cb && cb();
	    	    } 
	    	else if (marginLeft < distance){
	            marginLeft++;
	    	} 
	    	     else {
	    		marginLeft--;
	    	}
	             ball.style.marginLeft = marginLeft + 'px';
	             animation(ball, distance, cb);
	    	}, 13)
	}

正确代码:

function animation(ball, distance, cb){
		setTimeout(function(){
			var marginLeft = parseInt(ball.style.marginLeft, 10);
	    	if (marginLeft === distance){
	    		cb && cb();
	    	    } 
	    	else{ if (marginLeft < distance){
	            marginLeft++;
	    	} 
	    	     else {
	    		marginLeft--;
	    	}
	             ball.style.marginLeft = marginLeft + 'px';
	             animation(ball, distance, cb);
	         }
	    	}, 13)
	}

求解答

正在回答

2 回答

你这个if 和else if 和else不管怎么判断  多会一直调用自己本身,这是关键,你可以理解一下,当marginLeft==distance的时候函数还能调用本身的结果是什么,无限的cb()被调用,cb也就是ball2,ball3的函数, N个cb意味着ball2,ball3的marginLeft 增长速度爆炸。左右晃是因为ball3 改变distance的原因,他同时在执行两个判断,旧distance和新distance的判断

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

当条件不满足 if时 就会执行else if里面的代码。所以当第一个 求 滚动到初始位置之前 一直执行 elseif.

至于抖动是因为 小球滚动动到 9Px位置时,下一次又执行else if 又向前滚动,来回循环 所一看家的是抖动

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

举报

0/150
提交
取消
进击Node.js基础(二)
  • 参与学习       76755    人
  • 解答问题       226    个

本教程带你攻破 Nodejs,让 JavaScript流畅运行在服务器端

进入课程

关于else if 的疑问

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