我是靠谱客的博主 迅速小蝴蝶,最近开发中收集的这篇文章主要介绍看了jquery的animate动画函数,自己也用js写了一个,感觉还不错!,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 


<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=GBK">
        </head>
        <body>
	        <div id="div" style="width:70px;height:50px;background:black;left:25%;"></div>
        </body>
<script>
/*
	obj:dom对象
	prop:动画参数
	speed:执行速度 fast slow 3000等
	func:回调函数
*/
function animate(obj,prop,speed,func){
	//防止重复动画事件
	if(obj.timer) return ;
	//定义定时器执行次数和总执行时间
	var	limit=10,totalTime; 
	if(typeof speed==='number'){//如果传入的是
		totalTime = speed;
	}else if(speed==='slow'){
		totalTime = 600;
	}else if(speed==='fast'){
		totalTime = 200;
	}else{
		totalTime = 400;
	}
	
	var time = totalTime/limit;
	//获取属性值
	function getStyle(obj, prop) {
		var prevComputedStyle = document.defaultView ? document.defaultView.getComputedStyle( obj, null ) : obj.currentStyle;
		return prevComputedStyle[prop];
	}
	var n=0,cache={},display,primary_cur;//cache用来缓存,省的每次都去dom获取
	obj.timer = setInterval(function(){
		n++;//执行次数每次递增
		for(var p in prop){
			if("display"===p) {
				display = prop["display"];
				if(display!=='none'){
					obj.style['display'] = display;
				}
				delete prop["display"];
				continue;
			}
			//判断是否是可以递增的属性,如果不是则直接让它生效,并从prop中删除,删除后就不用每次任务都执行它
			var reg = /^(d)+(px$)?/;//数字和像素这样的判定为可以递增的属性
			if(!reg.test(prop[p])){
				obj.style[p] = prop[p];
				delete prop[p];
				continue;
			}
			
			var value,opacityFlag=(p == "opacity")?true:false;
			var cur = 0;
			if(cache[p+"_cur"]){//从缓存中取
				cur = cache[p+"_cur"];
				value = cache[p+"_value"];
			}else{
				value = prop[p];
				if(opacityFlag) {
					//如果本来是隐藏的则cur默认就是0
					if(getStyle(obj, 'display')!=='none'){
						cur = Math.round(parseFloat(getStyle(obj, p)) * 100);
					}
				} else {
					cur = parseInt(getStyle(obj, p));
					//处理100px的格式
					(typeof value==='string') && (value=value.replace(/px$/,""));
				}
				primary_cur=cur;
				cache[p+"_value"] = value;
			}
			
			var incre ;
			if(cache[p+'_increment']){//如果缓存中有则从中取
				incre = cache[p+'_increment'];
			}else{
				if(opacityFlag){
					incre = (value*100-cur)/limit;//计算每次变化值
				}else{
					incre = (value-cur)/limit;//计算每次变化值
				}
				cache[p+'_increment']= incre;
			}
			//缓存起来,这样就不用每次都去dom中获取了。
			cache[p+"_cur"] = cur + incre;
			
			if (opacityFlag) {
				//obj.style.filter = "alpha(opacity : '+(cur + incre)+' )";
				obj.style.opacity = (cur + incre)/100 ;
			}else {
				obj.style[p] = cur + incre + "px";
			}
		}
		//如果达到了最大执行次数,要清除定时器,并执行回调函数
		if(n==limit){
			if(display==='none'){
				obj.style['display'] = 'none';
			}
			//清除定时器
			clearInterval(obj.timer);
			obj.timer=undefined;
			func();
		}
	},time)
	
}
var div = document.getElementById("div");
animate(div,{width:'400px',height:400,opacity: 0},1000,function(){
	console.log('finished')
});

</script>
</html>

 

最后

以上就是迅速小蝴蝶为你收集整理的看了jquery的animate动画函数,自己也用js写了一个,感觉还不错!的全部内容,希望文章能够帮你解决看了jquery的animate动画函数,自己也用js写了一个,感觉还不错!所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部