javascript动画对象支持加速、减速、缓入、缓出

调用接口:
/**
 * @param elem {HTMLElement} 执行动画的HTML元素
 * @param params {JSON} 动画执行过过程中需要修改的HTML属性
 * @param duration {Number} 可选,动画执行时间,单位毫秒
 * @param easing {String} 可选,动画执行的方式,缓入easeIn、缓出easeOut
 * @param callback {Function} 可选,动画执行完成时的回调函数
 * @return 
 */
effect.animate(elem, params, duration, easing, callback);

 

使用它用不了20行代码就可以做一个产品图片减速淡出、加速淡入的切换效果点击这里查看演示效果

 

//辅助对象,读/写DOM元素属性
var attribute = {
	
	get: function(elem, attr){
		var val;	
		if(elem.currentStyle){
			if(attr === "opacity") {
                val = elem.filters.alpha[attr];
            }else {
				val = elem.currentStyle[attr];
			}
		}
		else{
			val = getComputedStyle(elem)[attr];
			if(attr === "opacity") {
				val = 100 *  val;
			}
		}

		return val;
	},
	
	set: function(elem, attr, val){
		if(attr=='opacity'){
			elem.style.filter = 'alpha(opacity='+ (val) +')';
			elem.style.opacity = (val)/100;
		}
		else{
			elem.style[attr] = val + 'px';
		}
	}
};

/*
 * 描述: tween动画算法。
 * @param Number t: 动画已经执行的时间(实际上时执行多少次/帧数)
 * @param Number b: 起始位置
 * @param Number c: 终止位置
 * @param Number d: 从起始位置到终止位置的经过时间(实际上时执行多少次/帧数)
 */
var tween = {
	
	//缓入
	easeIn: function (t, b, c, d){
		return c * (t/=d) * t + b;
	},
	
	//缓出
	easeOut: function (t,b,c,d){
		return -c * (t/=d) * (t-2) + b;
	}
	
};

//动画对象
var effect = {
	
	animate: function(elem, params, duration, easing, callback){
		
		var dt = new Date().getTime(),
			b = 0,
			c = 0,
			d = duration || 500,
			fps = 1000/60;
			
		var changes = [];
		
		for(var attr in params){
			b = parseFloat(attribute.get(elem, attr));
			c = params[attr] - b;
			
			changes.push({
			    
				attr: attr,
				
				b: b,
				
				c: c
			});
		}
		
		easing = easing || "easeOut";
		callback = callback || new Function;
		setTimeout(function(){			
			var t = new Date().getTime() - dt;
			var b, c, attr;
			for(var i=0; i<changes.length; i++){
				b = changes[i].b;
				c = changes[i].c;
				attr = changes[i].attr;
				
				attribute.set(elem, attr, tween[easing](t, b, c, d));
				if(d <= t){
					attribute.set(elem, attr, params[attr]);
					callback();
					return;
				}
			}
			
			setTimeout(arguments.callee, fps);
		}, fps);
	}
};
//by rentj1@163.com

  

 

转载于:https://www.cnblogs.com/rentj1/archive/2012/09/29/2708126.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值