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

JS动画效果

vivian Web前端工程师
难度初级
时长 2小时 8分
学习人数
综合评分9.60
537人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.4 逻辑清晰
要自己弹一弹
上头说的补上一个else来改flag的值为true是有问题的,只要最后一个到达了就会清除了 同样是有bug!
为毛我都回调函数不执行。。。
一招在手,天下我有的feel
几经折腾后发现里面的局部变量和全局变量有点搞头!
haha</textarea><textarea>haha
1. flag要放在for-in里面
2. if(flag){...} 要放在for-in外面,setInterval里面。

求赞,谢谢

最新回答 / MarvelYao
clearInterval(timer),应该是obj.timer调试看看动画过程是否正确取值和设置值flag在里面的时候,外面的判断取不到flag的值,obj.timer关不掉。效果看起来当然一样,跟第一问差不多。
function startMove(obj,goal){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var speed=(goal-obj.offsetWidth)/8
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if (goal==obj.offsetWidth) {
clearInterval(obj.timer);}
else{obj.style.width=obj.offsetWidth+speed+'px';}
},30)}
window.onload=function(){
var Oli=document.getElementsByTagName("li");
for (var i = 0; i < Oli.length; i++) {
Oli[i].timer=null;
Oli[i].onmouseover=function(){
startMove(this,400);
}
Oli[i].onmouseout=function(){
startMove(this,200);
}
}
}
<style type="text/css">
*{ margin: 0; padding: 0; list-style: none; }
ul li{ background: #7abcf2; width: 200px; height: 80px; margin: 15px; }
</style>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
这个功能用jq的fadeTo会简单点吧,只要算下渐变的时间就好
zdiv.fadeTo(1000, 0.3)

已采纳回答 / qq_Moderato_0
传参数fn时,不能用this了,可以在外边 var that = this,不然里面this的指向会变成window。
课程须知
1.您至少已经具备JavaSript的知识。2.您已经具备一些开发经验。
老师告诉你能学到什么?
1.使用定时器实现简单动画。2.如何一步步封装库。2.培养编程的思想。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消