定时调用应用——常用动画的函数封装

一、提取函数

1.1封装一个函数搞定大部分动画效果

这个函数提取的思想就是,通过改变对象的属性,改变对象呈现,实现动画效果

/*
 * 参数
 * 	  obj要执行动画的对象
 *    attr:要执行动画的样式,比如,left,top,length
 * 	  target:执行动画的目标位置
 * 	  speed移动的速度(都为正数)
 * 	  callback:回调函数,动画执行完毕之后执行
 */
function move(obj,attr,target,speed,callback){
	
	//关闭上一个定时器,避免执行一次函数就出现一个定时器
	clearInterval(obj.timer);
	
	//获取对象原来样式值
	var current =parseInt(getStyle(obj,attr));//parseInt取字符串合法数字,getstyle返回的为数字+px
	
	//判断速度的正负值
	//比如从0到800,则speed为正,如果800向0,则speed为负
	if(current > target){
		speed =-speed;
	}
	
	//开启一个定时器,执行动画效果
	//向执行动画的对象中添加一个timer属性,用来保存自己的定时器标识
	obj.timer = setInterval(function(){
		
		//获取box1原来left值
		var oldValue =parseInt(getStyle(obj,attr));
		//在旧值的基础上增加
		var newValue = oldValue + speed;
		
		//向左移动时,需要判断newvalue是否小于target
		//向右移动时,需要判断newvalue是否大于target
		if((speed<0 && newValue<target) || (speed>0 && newValue>target)){
			newValue=target;
		}
		//将新值设置给obj,style[attr]为属性
		obj.style[attr]=newValue +"px";
		
		//当元素移动到目标点
		if(newValue == target){
			clearInterval(obj.timer);
			
			//动画完毕,调用回调函数
			//如果有回调函数,就调,没有就不调
			callback && callback();
		}
		
	},30)
}
1.2获取当前样式值函数
/**
 * 定义一个函数,用来获取指定元素的当前样式
 * 参数:
 *     - obj 要获取样式的元素
 *     - name 要获取的样式名
 */
function getStyle(obj,name){
	if(window.getComputedStyle){
		//正常浏览器的方式
		return getComputedStyle(obj,null)[name];
	}else{
		//IE8的方式
		return obj.currentStyle[name];
	}
}
1.3如何调用

实现效果:点击按钮,让box向右移动到200px停止
在这里插入图片描述
CSS代码及body代码

<style type="text/css">
	*{margin: 0; padding: 0;}
	
	#box1{
		height: 100px;
		width: 100px;
		background-color: red;
		position: absolute;
		left: 0;
	}
<style/>

<body>
	<button id="btn01">点击按钮以后box1向右移动</button>
	<br/> <br/>
	<div id="box1"></div>
	<div style="width: 0; height: 1000px; border-left: 1px black solid; position: absolute; left: 200px;top: 0;"></div>
</body>

JS代码调用函数

<script type="text/javascript">
	window.onload = function(){
	      //获取box1
		  var box1=document.getElementById("box1");
		  //获取btn01
		  var btn01 = document.getElementById("btn01");
		  //点击按钮以后,box1按钮向右移动(left增大)
		  btn01.onclick=function(){
			move(box1,"left",200,20);
		}
</script>

二、关于如何JS封装

不让程序写死的方法,总体来说

  • 1.用变量,比如:obj[name]是对象属性的意思,通过传入name得到obj的哪个属性
  • 2.求统一,比如:上面函数的speed,在函数中设置传入正数负数可以
发布了216 篇原创文章 · 获赞 98 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/shang_0122/article/details/104960462