JS笔记第八期(定时器的使用)—实现简易动画效果

一、定时器

 定时器
JS执行速度非常的快,若希望程序每间隔一段时间执行异常,可以使用定时器
setInterval() 
 定时调用,可以将函数每隔一段时间调用一次
 参数:1.回调函数,该函数每隔一段时间执行一次
             2.每次回调函数的间隔时间,单位为毫秒,会返回一个Number类型的数字,作为定时器的唯一标识,相当于编号
clearInterval()
1、可以用来关闭定时器,需要一个定时器标识作为参数
2、 若接受到的参数无效则什么都不会做

在页面上使用定时器实现一个数字1-11,每隔500毫秒切换,然后到11停止的效果:

var count=document.getElementById("count");
		var num=1;
		var timer=setInterval(function(){
			count.innerHTML=num++;
			if(num==11){
				clearInterval(timer);
			}
		},500);

二、延时调用和定时调用

 延时调用
 -延时调用一个函数不马上执行,一段时间之后再执行,只会执行一次
 -setTimeout(function(){},1000);         

延时调用和定时调用的区别

延时调用只执行一次,定时调用执行多次, 延时调用和定时调用实际上可以互相代替

三、图片定时切换

先获取几个对象

var img2=document.getElementById("img1");
		var imgArr=["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg","img/5.jpg","img/6.jpg"];
		var index=0;
		var btn01=document.getElementById("btn01");
		var btn02=document.getElementById("btn02");
		var timer;

开启定时器定时切换,每点击一次都会开启一个定时器  所以会出现连续点击多次看起来切换速度超级快的情况还暂停不了,因为暂停只能暂停最后一个定时器,所以在开启新的定时器之前,先把其他定时器关闭。

定时器设置代码:

clearInterval(timer);
		 timer=setInterval(function(){
				index++;
				if(index>=imgArr.length){
					index=0;
				}
				//index=index%imgArr.length;//也可以达到使得下标不超过数组长度的效果
				img1.src=imgArr[index];
			},500);
			
		};
		btn02.onclick=function(){
		clearInterval(timer);	
		};
		

 这里放一个作者源文件代码,直接粘贴即可运行(记得在img文件夹里面添加同名的图片):

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>定时器</title>
		<script type="text/javascript">
		window.onload=function(){
		var num=1;
		var timer=setInterval(function(){
			count.innerHTML=num++;
			if(num==11){
				clearInterval(timer);
			}
		},500);	
		/* 图片定时切换 */
		var img2=document.getElementById("img1");
		var imgArr=["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg","img/5.jpg","img/6.jpg"];
		var index=0;
		var btn01=document.getElementById("btn01");
		var btn02=document.getElementById("btn02");
		var timer;
		btn01.onclick=function(){
		clearInterval(timer);
		 timer=setInterval(function(){
				index++;
				if(index>=imgArr.length){
					index=0;
				}
				//index=index%imgArr.length;//也可以达到使得下标不超过数组长度的效果
				img1.src=imgArr[index];
			},500);
			
		};
		btn02.onclick=function(){
		clearInterval(timer);	
		};
		
		};
		</script>
	</head>
	<body>
		<!--<h1 id="count"></h1>-->
		<img id="img1" src="img/1.jpg" />
		<button id="btn01">开始</button>
		<button id="btn02">停止</button>
	</body>
</html>

四、简易动画效果

这里为了方便使用,我们采用外部引入JS文件,该JS文件里面的两个函数可以实现简易的动画效果。

外部引入的格式:

<script type="text/javascript" src="./js/简易动画.js"></script>

 刚开始作者将定时器全部由timer保存,会出现两个box无法同时跑的现象,我们将每个对象赋予不同的定时器就可以了,在开启定时器的函数前面加一个:obj.timer=steInterval(function({}),30);

以下是简易动画的JS代码:

/* 创建一个执行简单动画的函数 
	    参数:
		obj :执行动画的对象
		atter:要执行动画的样式,例如:left\top\height
		target:执行动画的目标
		speed:执行动画的速度
		callback:回调函数
		
	*/
		function move(obj,atter,target,speed,callback){
			//开启新的定时器之前关闭旧的定时器
			 clearInterval(timer);
			//获取box1原来的left值
			var current=parseInt(getStyle(obj,atter)); 
			//判断该往哪边跑
			 if(current>target){
				 speed=-speed;
			 }
			//开启定时器
			obj.timer=setInterval(function(){
				//获取box1原来的left值
				var oldValue=parseInt(getStyle(obj,atter)); 
			//在旧值的基础上增加
			var newValue=oldValue+speed;
			//判断是否大于给定值
			if((speed>0&&newValue>target)||(speed<0&&newValue<target)){
			newValue=target;
			} 
			//将新值付给box1
			obj.style[atter]=newValue+"px";
			//当元素移动到800PX,使其停止运行
			if(newValue==target){
				//动画执行完毕关闭定时器
			clearInterval(obj.timer);
			//动画执行完毕,调用回调函数,有才调,没有就不调
			callback && callback();
			} 
		},30);
	}
    //获取对象样式 obj:获取对象 name:想要的样式值
		function getStyle(obj,name){
			if(window.getComputedStyle){
				return getComputedStyle(obj,null)[name];
			}else{
				return obj.currentStyle[name];
			}
		}

 实现的效果:

全部代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>定时器应用</title>
		<style type="text/css">
		#box1{
			width: 100px;
			height: 100px;
			border: #000000 solid 1px;
			background-color: #A52A2A;
			position: absolute;
			left: 0;
		}
		#box2{
			width: 100px;
			height: 100px;
			border: #000000 solid 1px;
			background-color: #5F9EA0;
			position: absolute;
			left: 0;
			top: 200px;
		}
		#xian{
			width:0px;
			height:1000px;
			border-left: #000000 solid 1px;
			left: 800px;
			position: absolute;
			top: 0;
		}
		</style>
		<script type="text/javascript" src="./js/简易动画.js"></script>
		<script type="text/javascript">
		/* 定时器由timer保存,所有执行的都由它保存
		会出现两个box无法同时跑的现象,我们将每个对象
		赋予不同的定时器就可以了,在开启定时器的函数前面加一个
		obj.timer=steInterval(function({}),30);
		 */
		var timer;
		window.onload=function(){
	    	var box1=document.getElementById("box1");
			var box2=document.getElementById("box2");
			var btn01=document.getElementById("btn01");
			var btn02=document.getElementById("btn02");
			var btn03=document.getElementById("btn03");
			var btn04=document.getElementById("btn04");
			
			//点击按钮后。box1向右移动
			btn01.onclick=function(){
				move(box1,"left",800,10);
			};
			//点击按钮后。box1向左移动
			btn02.onclick=function(){
				move(box1,"left",0,10);
			};
			//点击按钮后。box2向右移动
			btn03.onclick=function(){
				move(box2,"left",800,30);
			};
			//测试
			btn04.onclick=function(){
				move(box2,"width",800,30,function(){
					move(box2,"height",800,30,function(){
						move(box2,"top",0,30,function(){
						move(box2,"top",200,30,function(){
							move(box2,"width",100,30,function(){
								move(box2,"height",100,30,function(){
									
								})
							})
						})	
						})
					});
				});
			};
			

		};
	
		</script>
	</head>
	<body>
		<button id="btn01">点击后box1向右移动</button>
		<button id="btn02">点击后box1向左移动</button>
		<button id="btn03">点击后box2向右移动</button>
		<button id="btn04">测试</button>
		<br /><br />
		<div id="box1"></div>
		<div id="box2"></div>
		<div id="xian" ></div>
	</body>
</html>

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值