`
peter潘
  • 浏览: 10370 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

模拟jquery动画方法实现

阅读更多
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script src="jquery-1.8.3.js"></script> 
<script>

jQuery.fn.extend({

	/**
	 * 自定义动画方法
	 */
	myAnimate:function(opt,duration,easing,callback){
			
		if(!opt || typeof opt!=='object') return;
		//修正参数
		if(typeof duration ==='function'){
			callback=duration;
			easing=null;
			duration=null;
		}else if(isNaN(duration)){
			callback=easing;
			easing=duration;
			duration=null;
		}else if(typeof easing ==='function'){
			callback=easing;
			easing=null;
		}
		if(!duration && duration!=0) duration=400;
		var operate = jQuery.getAnimateOpt(duration, easing, callback); 
		
		this.queue(function(){
			//此处this指的是jquery获取回来的集合中的当前js原始对象
			var $elem=$(this);
			//一个属性一个动画对象
			jQuery.each(opt,function(name,val){
				//转换为驼峰式css属性名
				name=jQuery.camelCase(name);
				//为属性创建动画对象
				var fx=new jQuery.fx($elem,operate,name);
				//放进全局timers
				jQuery.timers.push(fx);
				//计算属性的初始值与结束值
				var start=parseFloat($elem.css(name))||0;
				var end=parseFloat(val);
				//执行动画对象
				fx.custom(start,end);
			});
		});
		
		return this;
		
	}
	
});

jQuery.timers=[];
jQuery.timerId;

/**
 * 动画方法的回调函数修正与参数封装
 */
jQuery.getAnimateOpt=function(duration, easing, callback){
	var obj = {  
		"duration": duration,  
		"easing": easing  
	}		
	obj.callback = function(){  
		callback && callback();  
		this.dequeue();    
	}
	return obj;  
}

/**
 * 动画对象
 */
jQuery.fx=function(elem,operate,name){
	this.elem=elem;
	this.operate=operate;
	this.name=name;
	this.finish=false;//标示动画是否已执行完毕
}
/**
 * 动画对象执行入口
 */
jQuery.fx.prototype.custom=function(start,end){
	this.startTime=new Date().getTime(); //代表该属性开始执行动画的时间,在step中做比较使用
	this.start=start;
	this.end=end;
	if(!jQuery.timerId){
		jQuery.timerId=setInterval(this.tick,13);
	}
}
/**
 * 动画对象轮询执行入口
 */
jQuery.fx.prototype.tick=function(){
	var fx,i=0;
	while((fx=jQuery.timers[i++])){
		//step方法返回true表示该属性动画已执行完毕
		if(fx.step()){
			//在timers中移除当前动画对象
			jQuery.timers.splice(i-1,1);
		}
	}
	if(jQuery.timers.length==0){
		clearInterval(jQuery.timerId);
		jQuery.timerId=null;
	}
}
/**
 * 动画对象真正执行函数
 */
jQuery.fx.prototype.step=function(){
	var n=new Date().getTime();
	if(n>(this.startTime+this.operate.duration)){
		//修正该属性的误差
		this.update(this.end);
		this.finish=true;
		//判断属性所属元素的属性动画是否已执行完毕,如果是,则执行回调,dequeue下一个函数
		var fx,ci,i=0,done=true;
		while((fx=jQuery.timers[i++])){
			if(fx.elem==this.elem && !fx.finish){
				done=false;
			}
		}
		if(done){
			this.operate.callback.call(this.elem);
		}		
		return true;
	}else{
		//计算属性当前值,默认使用swing算法(慢-快-慢)
		var pos=(jQuery.easing[this.operate.easing] || jQuery.easing.swing)((n-this.startTime)/this.operate.duration);//计算比例	
		var val=this.start+pos*(this.end-this.start);		
		//更新元素
		this.update(val);
		return false;
	}
}
/**
 * 更新动画元素状态
 */
jQuery.fx.prototype.update=function(val){
	//console.log(val);
	this.elem.css(this.name,val);
}
/**
 * 停止属性动画
 */
jQuery.fx.prototype.stop=function(){
	var fx,i=0;
	while((fx=jQuery.timers[i++])){
		if(fx==this){
			//在timers中移除当前动画对象
			jQuery.timers.splice(i-1,1);
		}
	}
}


//测试!!
$(function(){
	$('div#t01').myAnimate({'margin-left':600,'width':300},600,'linear').myAnimate({'opacity':.5},function(){alert('finish!')});
	$('div#t02').myAnimate({'margin-left':600,'width':300},600);
});

</script>
</head>
<body>
<div id="t01" style="background-color:green;width:200px;height:200px;">001</div>
<div id="t02" style="background-color:gray;width:200px;height:200px;">002</div>
</body>
</html>
分享到:
评论

相关推荐

    jquery模拟select效果实现

    本文将详细讨论如何使用jQuery来实现这一功能,同时提供一个自编的简单实用的模拟select效果的代码示例。 首先,让我们理解原生HTML `select` 元素的基本功能。`&lt;select&gt;` 元素用于创建一个下拉列表,用户可以从中...

    jquery动画模拟重力下落

    在这个实例中,“jquery动画模拟重力下落”是一个应用了jQuery来实现物体下落效果的项目,其核心是利用JavaScript的动态属性和时间函数来模拟物理学中的重力现象。 首先,我们要理解在网页上模拟重力下落的基本原理...

    jQuery模拟抛物线轨迹动画

    利用jQuery和HTML5可以模拟很多数学中的函数图象,比如HTML5 Canvas正弦波动画。今天我们要介绍一个用jQuery实现简单的模拟抛物线轨迹的插件,可以开始和暂停抛物线的运动,以及重新设置抛物线的参数。 下面简单...

    jQuery 模拟的鼠标动画菜单效果

    "jQuery 模拟的鼠标动画菜单效果"是一个利用 jQuery 技术实现的菜单设计,它通过鼠标悬停事件触发特定的动画效果,为用户带来独特的视觉体验。 这个菜单效果的特点在于当鼠标光标悬停在菜单项上时,色块或图标会...

    jQuery动画图片拖动排序效果

    在本文中,我们将深入探讨如何使用jQuery库来创建一个动态的、可拖动排序的图片列表,以此实现“jQuery动画图片拖动排序效果”。这个功能是通过jQuery的事件监听、DOM操作以及动画功能来实现的,它使得用户可以通过...

    jquery图片播放器模拟图像动画效果

    本主题将深入探讨如何使用jQuery来创建一个图片播放器,并实现模拟图像动画效果。这个过程涉及多个知识点,包括DOM操作、事件绑定、CSS样式控制以及动画效果的实现。 首先,要创建一个图片播放器,我们需要一个包含...

    非常酷的jquery动画立体滚动效果

    - jQuery动画控制:利用`animate()`控制子元素的3D变换属性,如`rotateX`、`rotateY`、`translateZ`等,模拟下拉时的立体旋转。 - 底部图像聚合:利用`scale`和`translate`动画,让底部图像从四周边缘向中心聚拢,...

    jquery模拟flash动画逐渐伸缩发展历程列表

    本篇文章将详细探讨标题“jquery模拟flash动画逐渐伸缩发展历程列表”所涉及的知识点,包括jQuery动画效果的实现、如何模拟Flash动画以及如何构建发展历程列表。 1. **jQuery 动画效果**:jQuery提供了多种内置的...

    基于jquery实现图片播放器模拟图像动画效果.zip

    【标题】"基于jQuery实现图片播放器模拟图像动画效果"主要涉及的是利用JavaScript库jQuery来创建一个具有动画功能的图片播放器。这个项目的核心是利用jQuery的动态效果和事件处理来实现图片的平滑切换,营造出类似...

    jquery动画制作示例图片滚动和飞行乌鸦,车窗效果,非常强大

    这个压缩包文件中的内容,"jquery动画制作示例图片滚动和飞行乌鸦,车窗效果,非常强大",显然展示了如何利用jQuery来实现一些引人注目的视觉效果。 首先,我们来看“图片滚动”效果。在网页设计中,图片滚动通常指的...

    jquery模拟

    在提供的压缩包文件`msmw_Jquery1.0`中,可能包含的是一个模拟jQuery实现的源码或示例项目,供我们参考和学习。通过阅读和分析这些代码,我们可以更深入地了解模拟jQuery的各种细节和技巧。 总之,jQuery模拟是一个...

    jQuery制作360度雷达扫描动画特效.zip

    3. **jQuery动画方法**:jQuery提供了一些内置的动画方法,如`animate()`,可以用来创建自定义的动画效果,包括改变元素的旋转角度,实现雷达扫描的视觉效果。 4. **定时器**:为了实现持续的雷达扫描,开发者可能...

    jQuery心电图动画特效_心电图走势动画特效

    在本文中,我们将深入探讨如何使用jQuery来实现一个生动的心电图动画特效,这将涉及到JavaScript编程、CSS样式以及HTML结构。心电图动画特效在许多网页设计中被用来增加视觉吸引力,尤其适用于医疗健康、健身或科技...

    jquery模拟flash动画按钮.zip

    jQuery模拟Flash动画按钮的具体实现可能包括以下步骤: 1. 创建HTML结构:设置按钮的基本样式和ID,以便于JavaScript选择器使用。 2. 编写CSS样式:定义按钮的基本外观,包括颜色、大小、边框等,并设置过渡效果。 ...

    jquery模拟flash动画型动感导航菜单

    二、jQuery动画基础 在jQuery中,动画效果主要通过`.animate()`函数来实现。这个函数允许我们自定义CSS属性的变化过程,如宽度、高度、透明度等,创建平滑的过渡效果。例如,要实现元素的滑动效果,可以指定`top`或`...

    Jquery,js的逐帧动画实现

    "Jquery,js的逐帧动画实现"这一主题涵盖了如何利用这两种强大的库来将一系列静态图像组合成流畅的动画。 首先,逐帧动画的基本原理是通过连续显示不同的图像,每张图像代表动画的一小部分动作,来模拟连续的运动。...

    用队列模拟jquery的动画算法实例

    ### 队列模拟JQuery动画算法实例知识点 1. **队列数据结构的应用** 队列是一种先进先出(FIFO)的数据结构,在模拟JQuery动画算法中,队列用于存储即将执行的动画,确保动画按照预定顺序依次执行。在给出的示例中...

    JQuery模拟系统桌面

    "jQuery模拟系统桌面"就是这样一个技术应用,它利用JavaScript库jQuery及其相关的UI组件,实现了一种类似真实操作系统桌面的效果。这篇文章将深入探讨这一主题,介绍如何使用jQuery和相关插件来构建一个模拟的Web...

    jQuery实现模拟抛物线轨迹动画特效源码.zip

    本项目“jQuery实现模拟抛物线轨迹动画特效源码”旨在利用jQuery的强大功能创建一个动态的、视觉吸引人的抛物线轨迹动画效果。下面将详细介绍这个项目中的关键知识点。 1. **jQuery基本概念**: - jQuery的核心...

Global site tag (gtag.js) - Google Analytics