动画:通过使用定时器把一次执行完的动作分成多次执行,达到一个动画的效果
延迟定时器settimeout
a.settimeout(function(){ console.log("这是一个定时器,一秒以后触发") },1000) //里面有两个参数,第一个参数放执行函数,第二个参数放延迟多长时间执行这个定时器,单位1000=1s;
定时器setInterval
a.timer=setInterval(function(){
console.log("这是一个定时器,每隔30毫秒触发一次");
},30)
//里面有两个参数,第一个参数放执行函数,第二个参数是每隔多长时间执行一次;
定时器的注意事项
1.在使用定时器的时候一定要加上 clearInterval(timer);清除掉原有的定时器,不然就造成在定时器还未执行完成的时候,又重复调用,会出现效果错乱!
非匀速运动动画,以及步长的计算方法
1.步长是会慢慢变小,直到慢慢趋近0;
function animate(obj,target){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
//步长开始大,慢慢变小
//(target-obj.offsetleft)/10
//offsetleft=0; target=500; 500/10=50;
//offsetleft=50;target=500; 450/10=45;
//offsetleft=95;target=500; 405/10=40.5;
//letf=obj.offsetlet+(target-obj.offsetleft)/10;
var step=(target-obj.offsetLeft)/10;
if(obj.offsetLeft==target){
clearInterval(obj.timer);
}
obj.style.left=obj.offsetLeft+step+"px";
},30)
}
animate(box,600);
回调函数
<script>
//回调函数,回头再调用的函数
// var btn=
// //这个函数就是回调函数
// btn.onclick=function(){
// }
//fn相当于function(){
//console.log("这是一个回调函数,2s后进行调用")
//}
function demo(fn){
setTimeout(function(){
fn()
},2000)
}
demo(function(){
console.log("这是一个回调函数,2s后进行调用")
})
</script>