`
yiminghe
  • 浏览: 1460460 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jquery Fx 源码简析

阅读更多

相对于 Extjs Fx 模块的处理 , Jquery Fx 的处理显得紧凑,灵活,不像 Extjs 严格的分层,将基础操作,中央定时队列抽象出来,然后再对具体元素,具体属性进行动画效果,Jquery 不严格区分,将对元素属性的操作以及定时队列管理糅合在一起,代码显得更精悍。


DOM动画处理的关键是对目标元素得目标 css 属性进行随时间设置不同的值,造成动画的效果,具体设计包括两个方面:


1。中央定时队列引入,将所有元素的所有不同属性变化导入中央队列,避免定时器分散设置与不同元素,性能提高

2。抽象出不同 css 属性随时间变化得公共计算,css 属性以及变化值做为变量处理。

 

 

Jquery 实践:


关建为 animate 方法

 

animate: function( prop, speed, easing, callback )
 

其他定义好的操作 

 

slideDown,slideUp,slideToggle,fadeIn,fadeOut,show,hide
 

都是对于 animate 函数的具体变量设置调用。


animate 参数的 prop 为 属性的结合,形式为 :

 

[{
height:endValue
},
{
width:endValue
}]
 

其中 endValue 为动画结束的结果数字或者 jquery 预定义的一些常量 show ,hide ,toogle ...


在animate 函数中,对参数prop中的每个 css 属性计算开始,结束以及持续时间,对应每个元素以及元素的每个变化css属性构造出 jquery.fx类型 对象 ,由该对象调用其 custom 方面来具体实施动画效果。

 

fx: function( elem, options, prop ){
		this.options = options;
		this.elem = elem;
		this.prop = prop;

		if ( !options.orig )
			options.orig = {};
	}

 

框架图:

 

custom 方法 就如同之前分析,构造出回调函数,放入中央队列等待处理,关键点 :


1:利用闭包,创造出内部函数,可以由中央计时器调用修改其特定元素特定css属性对应的jquery.fx的内部状态

//内部函数,由中央计时控制调用更新内部状态	
function t(gotoEnd){
			return self.step(gotoEnd);
		}

		t.elem = this.elem;
 

2:维护中央队列定时器,需要时才创建 timer。(与extjs 不同,中央队列耦合于动画操作)

if ( t() && jQuery.timers.push(t) && !timerId ) {
			timerId = setInterval(function(){
				var timers = jQuery.timers;

				for ( var i = 0; i < timers.length; i++ )
					if ( !timers[i]() )
						timers.splice(i--, 1);

				if ( !timers.length ) {
					clearInterval( timerId );
					timerId = undefined;
				}
			}, 13);
 

3:  根据当前时间与结束时间(由speed可得)的比例,以及用户设置的css属性值的最终结果来计算当前css属性的具体值

       3.1  两种比例计算方法, linear 与 swing

easing: {
		linear: function( p, n, firstNum, diff ) {
			return firstNum + diff * p;
		},
		swing: function( p, n, firstNum, diff ) {
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
		}
	},
 

       3.2  css 属性值的更新注意 opacity ,

 

step: {

		opacity: function(fx){
			jQuery.attr(fx.elem.style, "opacity", fx.now);
		},

		_default: function(fx){
			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
			else
				fx.elem[ fx.prop ] = fx.now;
		}
	}

 


4.easing 的插件扩展方式


jquery自带了两种easing (即为如何从初值随着时间变化过度到终值的过程):

 

easing: {
		linear: function( p, n, firstNum, diff ) {
			return firstNum + diff * p;
		},
		swing: function( p, n, firstNum, diff ) {
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
		}

 

如果要自定义easing,则实现一个函数(接口),参数解释:


p : 当前动画进行到的进度,范围为0 ~ 1

n : 动画从开始已经逝去的时间 (很少使用)

firstNum: 动画属性值的初始值

diff: 当前动画时刻属性值和属性终值的差值


另外还有第五个参数

duration: 设置的动画的持续时间


一般只要使用 p,firstNum,diff 参数即可。


关键是要保证返回值当 p=0 时返回 firstNum 即为初值,当 p=1 时返回 firstNum+diff 即为终值


比如 二次函数,越往后变化越剧烈:

 

jQuery.extend(jQuery.easing, { 
  'quadratic': function(p,n,firstNum,diff,duration) {
    return p* p* diff + firstNum;
  }
});

 

使用:

 

animate: function( prop, speed, easing, callback ) 

 中的 easing 参数中填入 quadratic 即可。

 

 

 

 

  • 大小: 61.5 KB
0
0
分享到:
评论

相关推荐

    jQuery源码 jQuery源码 jQuery源码

    jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码...

    2023年最新整理优质源码之圣诞节雪花飘落jQuery特效源码.rar

    2023年最新整理优质源码之圣诞节雪花飘落jQuery特效源码 2023年最新整理优质源码之圣诞节雪花飘落jQuery特效源码 2023年最新整理优质源码之圣诞节雪花飘落jQuery特效源码 2023年最新整理优质源码之圣诞节雪花飘落...

    jquery源码(1.4)

    jquery最新源码jquery最新源码jquery最新源码

    JQUERY博客源码 JQUERY博客源码

    **jQuery博客源码详解** jQuery,作为一款广泛使用的JavaScript库,极大地简化了DOM操作、事件处理、动画设计和Ajax交互。这个"JQUERY博客源码"可能是为了展示如何利用jQuery来构建一个功能丰富的博客系统。下面,...

    jQuery 教程 源码+实例+注释

    jQuery 教程 源码+实例+注释jQuery 教程 源码+实例+注释jQuery 教程 源码+实例+注释jQuery 教程 源码+实例+注释

    Jquery1.2.6 源码分析

    Jquery1.2.6源码分析及源码文件 博文链接:https://jljlpch.iteye.com/blog/234218

    [pdf]Jquery1.2.6源码分析

    jQuery 是一个非常优秀的 JS 库,与 Prototype,YUI,...但是 jQuery 源码不像其它的类库那样,它有 点晦涩,难懂。这就是本源码分析的原因,让所有使用 jQuery 的读者,能快速 上手 jQuery的源码,并在开发中得心应用。

    Jquery源码分析 源码

    《jQuery源码分析》 jQuery,作为一款广泛使用的JavaScript库,极大地简化了DOM操作、事件处理、动画制作以及Ajax交互。深入理解其源码对于提升JavaScript编程技能和优化前端性能至关重要。本文将从核心概念、设计...

    Jquery1.2.6源码分析+源代码

    **jQuery 1.2.6 源码分析** jQuery 是一个广泛使用的 JavaScript 库,它简化了 HTML 文档遍历、事件处理、动画以及 Ajax 交互等任务。本篇文章将深入探讨 jQuery 1.2.6 版本的源码,揭示其背后的实现原理,帮助...

    JQuery源码详细中文注释_Jquery源码分析_

    《jQuery源码深度解析》 jQuery,作为一款广泛使用的JavaScript库,因其简洁的API和强大的功能,深受开发者喜爱。本文将深入探讨jQuery 1.2.6版本的源码,结合其中的中文注释,帮助读者理解其内部机制,提升...

    jquery api, jquery ui api, jquery源码分析

    **jQuery API** jQuery 是一款广泛使用的 JavaScript 库,它的出现极大地简化了网页的 ...通过学习jQuery API、jQuery UI API以及源码分析,开发者不仅可以提升开发效率,还能编写出更高效、更优雅的JavaScript代码。

    jquery-1.11源码

    《深入解析jQuery 1.11源码》 jQuery,作为JavaScript库的杰出代表,以其简洁易用的API,极大地简化了DOM操作、事件处理、动画制作和Ajax交互。jQuery 1.11版本是其1.x系列的一个稳定版本,为开发者提供了强大的...

    锋利的jquery实例源码

    《锋利的jQuery》是一本深入讲解jQuery技术的电子书籍,其实例源码提供了丰富的实践素材,对于学习和理解jQuery的特性和应用有着极大的帮助。jQuery作为JavaScript的一个超集,以其简洁、高效的API设计,极大地简化...

    JavaScript+jQuery程序设计 源码

    通过分析和实践这个"JavaScript+jQuery程序设计 源码",学习者不仅能巩固JavaScript和jQuery的基础知识,还能提升实际项目开发经验,尤其是处理网页交互和动态效果的能力。同时,这也将有助于理解和应用更多高级特性...

    JqueryUI 源码

    - **动画实现**:学习`ui.fx.js`,理解jQuery UI如何实现复杂的动画效果。 - **主题生成**:探索`themes`目录,理解如何通过SASS或LESS预处理器构建和定制主题。 5. **源码优化与扩展** - **性能优化**:了解...

    谈谈jQuery之Deferred源码剖析

    ### jQuery之Deferred源码剖析知识点 #### 一、Deferred和Promise简介 jQuery的Deferred对象是jQuery在ES6的Promise概念出现之前的一种实现,它允许开发者将异步操作的结果通过链式调用的方式处理,避免了传统的...

    Day09【JQuery】源码及综合案例

    【jQuery 源码解析与综合案例】 jQuery 是一个广泛使用的 JavaScript 库,它极大地简化了 JavaScript 的 DOM 操作、事件处理、动画效果以及Ajax交互。这个“Day09【JQuery】源码及综合案例”主题将深入探讨 jQuery ...

    jquery框架及源码

    **jQuery框架及源码** jQuery是一款广泛应用于网页开发的JavaScript库,它简化了HTML文档遍历、事件处理、动画设计和Ajax交互等任务。自2006年发布以来,jQuery迅速成为开发者首选的JavaScript工具,因其简洁的API...

    jQuery源码详细分析中文注释

    《jQuery源码详细分析中文注释》是一份深入解析jQuery库源码的宝贵资源,它为开发者提供了理解这个广泛使用的JavaScript库内部工作机制的机会。jQuery以其简洁的API和强大的功能深受前端开发者的喜爱,但其背后的...

Global site tag (gtag.js) - Google Analytics