JS------动画模式改变样式的封装(新手)

(这里封装的是对象,为的是之后有新的方法可以放到一起,只提取其中的方法也是可以的)

功能:

这里封装的是一个对象,用来改变元素的样式

用法:

new出来就可以了

方法一:

animation_change(ele,attr,target,[mode,[st,[sd]]])

必要参数:ele(目标元素)、attr(目标样式)、target(变化的大小)

可选参数:mode(0代表target参数给的是变化量,1代表target参数给的是目标量,2代表target参数给的是样式值,默认为0)、st(步进时间)、sd(步进距离)

(使用注意:1.变化量好理解,而目标量是以第一次调用该方法为基准0,并不是指目标样式的值的大小,最后的样式值是你需要样式的最终数值。2.方法内我设置了自锁给定时器,在定时器结束前是无法再次调用的)

//对象-----用来改变样式
function ChangeEngine(step_time,step_distance){
	//默认属性
	this.step_time=step_time||20;//每次移动的时间
	this.step_distance=step_distance||2;//每次移动的距离
	
	//方法

	//移动
	this.animation_change=function(ele,attr,target,mode,st,sd){//attr代表要修改的样式,mode=0代表距离移动,=1代表位置移动,=2代表数值移动
		//在目标元素内添加成员,用来记录进度
		if(typeof(ele["current_"+attr])=='undefined'){
			//不存在就构造
			ele["current_"+attr]=0;
		}
		if(typeof(ele["move_able_"+attr])=='undefined'){
			//不存在就构造
			ele["move_able_"+attr]=true;
		}

		//初始化
		var step_time=st||this.step_time||20;
		var step_distance=sd||this.step_distance||2;
		var element=ele;//目标元素
		var origin_position=element["current_"+attr];//记录本次移动前的位置

		var attr=attr;
		var origin_attr=parseInt(getStyle(element,attr));//起始样式大小
		var mode=mode||0;
		//设置不同模式的实际改变量
		switch(mode){
			case 0:
				var distance=target;break;
			case 1:
				var distance=target-origin_position;break;
			case 2:
				var distance=target-origin_attr;break;
			default:return;
		}
		var direction=distance>0?1:-1;
		var current=0;//记录实时进度
		//判断此时是否可移动
		if(element["move_able_"+attr]!=true){
			return;
		}else{
			//自锁
			element["move_able_"+attr]=false;
		}
		var clock=setInterval(function(){
			//判断是否到达目标位置
			if(Math.abs(current-distance)<=step_distance){
				//直接移动到指定位置
				element.style[attr]=origin_attr+distance+"px";//修改元素样式
				element["current_"+attr]=origin_position+distance;//修改对象内的位置记录
				
				//关闭定时器
				clearInterval(clock);
				//去掉自锁
				element["move_able_"+attr]=true;
                return;
			}
			current=current+step_distance*direction;//记录本次移动的进度
			element.style[attr]=origin_attr+current+"px";//修改元素样式
			element["current_"+attr]=origin_position+current;//修改对象内的位置记录
		},step_time);
	};
    //获取style标签内属性函数的封装
    function getStyle(ele,attr){
	    if(ele.currentStyle){
	    	return ele.currentStyle[attr];//IE浏览器
    	}else{
    		return getComputedStyle(ele, false)[attr];//火狐浏览器
    	}
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值