`

学习记录jQuery的animate函数

阅读更多

很久之前就对jQuery animate的实现非常感兴趣,不过前段时间很忙,直到前几天端午假期才有时间去研究。

jQuery.animate的每种动画过渡效果都是通过easing函数实现的。jQuery1.4.2中就预置了两个这样的函数:

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;
}
}

从参数名隐约可以推测出firstNum是初始值。要是你的数学学得比较好,你可以发现linear函数是直线方程;要是你的物理学得比较好,你可以发现它是匀速运动的位移方程(我数学和物理都没学好,是别人提醒我的……)。那么diff和p就是速度和时间了。前端UI分享

再看看jQuery.animate的原型:

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

各参数的说明如下:

  • prop:一组包含作为动画属性和终值的样式属性和及其值的集合。
  • speed:动画时长。
  • easing:要使用的擦除效果的名称。
  • callback:动画完成时执行的函数。

元素的当前样式值(firstNum)可以获取,动画时长(p)就是duration,最终样式值是prop。理论上说,动画速度(diff)是可以算出来的。但是这又必然需要另一个函数进行运算。这样做明显是不明智的。再看看调用easing函数的相关代码(位于jQuery.fx.prototype.step中):

var t = now();
...
var n = t - this.startTime;
this.state = n / this.options.duration;
...
this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);

可以发现,p参数的值也就是this.state的值,从上下文得知它实际上是动画的时间进度。而firstNum和diff的参数值都是写死的,分别是0和1。这下easing函数的秘密完全被解开,p、firstNum、diff都是百分率而非实际数值,easing函数的返回值也就是位移的进度。diff的值是1,也就是以1倍的速度运行动画。算出位移进度后,通过“初始值+(最终值-初始值)×进度”就可以算出当前位移值:

this.now = this.start + ((this.end - this.start) * this.pos);前端UI分享

通过setInterval每隔一定时间(jQuery中是13ms)进行一次位移运算,直到当前时间与初始时间的差值大于动画时长,这就是jQuery.animate的执行过程。

按照常规思路,动画的实现方式是这样的:通过setInterval每隔一定时间给某个值增加特定数值,直到这个值达到限制值。这样做的主要问题是,不同浏览器的运行速度不同,从而导致动画速度有差异,一般是IE下比较慢,Firefox下比较快。而jQuery.animate是以当前时间来决定位移值,某个时刻的位移值总是固定的,因而动画速度不会有差异。

分享到:
评论

相关推荐

    一个简单的图片放大效果基于jquery animate函数

    在本文中,我们将深入探讨如何使用jQuery的animate函数来实现一个简单的图片放大效果。jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画效果等任务,使得网页开发更加便捷。在这个案例中,我们...

    原生js实现jquery函数animate()动画效果的简单实例

    本文将介绍如何使用原生JavaScript实现类似jQuery中的animate()方法的动画效果。在前端开发中,jQuery提供了一套非常方便的API来实现动画效果,但随着Web标准的发展和性能优化需求的提高,原生JavaScript的方法逐渐...

    jQuery的animate函数学习记录

    jQuery的`animate`函数是其强大的动画功能的核心,允许开发者创建复杂的、平滑的CSS属性变化效果。在本文中,我们将深入探讨`animate`函数的工作原理,特别是涉及到的`easing`函数,以及如何利用它们来实现不同类型...

    jquery animate分页按钮.zip

    首先,我们要理解jQuery Animate函数的基本用法。Animate是jQuery库中的一个强大功能,它可以用于创建平滑、定制化的动画效果。通过指定CSS属性的变化,如宽度、高度、透明度等,Animate能够帮助开发者创造出各种...

    jQuery animate滑动收缩展开时间轴大事记发展历程

    jQuery的animate()函数是其强大的动画工具之一,它允许开发者创建自定义的平滑过渡效果,不仅限于简单的淡入淡出或滑动。通过animate(),我们可以控制CSS属性,如宽度、高度、透明度等,以实现各种滑动收缩和展开...

    jquery数字跳动插件Animate Number.zip

    它通过jQuery的animate方法扩展了基本的数字动画能力,添加了数属性和阶跃函数,使得动画效果更为生动且富有表现力。 1. **数属性**:这个插件支持设置数字的递增或递减速度、起始和结束值、动画持续时间等参数。...

    jquery animate图片模向滑动示例.rar

    jquery animate() 用于创建自定义动画的函数。这个函数的关键在于指定动画形式及结果样式属性对象。这个对象中每个属性都表示一个可以变化的样式属性(如"height"、"top"或"opacity")。 注意:所有指定的属性必须用...

    jquery animate图片模向滑动示例

    首先,`jQuery Animate` 是 `jQuery` 库中的一个核心函数,它允许开发者自定义动画效果,包括改变 CSS 属性如位置、透明度等。在图片模向滑动的例子中,`animate` 通常用于改变图片容器的 `left` 或 `transform` ...

    利用jQuery的动画函数animate实现豌豆发射效果

    标题和描述中提到了使用jQuery的animate函数实现豌豆发射效果,这涉及到jQuery库中的animate函数的使用方法。jQuery是一个非常流行的JavaScript库,它提供了丰富的方法来操作DOM(文档对象模型),处理事件,以及...

    jquery animate分页标签按钮鼠标悬停滑动展开分页按钮

    在本主题中,我们将聚焦于如何使用jQuery的animate函数来实现一种动态效果:当鼠标悬停在分页标签按钮上时,这些按钮会滑动展开。这将增加交互性和视觉吸引力。 jQuery是一个轻量级、高性能的JavaScript库,提供了...

    jqueryanimate图片无缝滑动javascript网页特效

    通过学习和实践"jQuery Animate图片无缝滑动"特效,开发者不仅能掌握JavaScript和jQuery的动画技术,还能深入了解网页布局、事件处理以及用户体验优化等方面的知识。对于网页设计师和前端开发者来说,这是一种实用且...

    jquery animate图片无缝滑动

    **jQuery Animate 图片无缝滑动** 在网页设计中,图片滑动效果是一种常见的动态展示方式,能够吸引用户的注意力并提升用户体验。`jQuery Animate`是jQuery库中的一个强大功能,用于创建平滑的动画效果。在这个场景...

    免费jquery animate小用例

    `animate()`是jQuery提供的一个核心函数,用于创建平滑的动画效果。在这个"免费jquery animate小用例"中,我们将深入探讨`animate()`的使用方法及其背后的原理。 `animate()`函数允许开发者自定义元素的各种CSS属性...

    jquery animate网站banner动画效果.zip

    jQuery是一个强大的JavaScript库,它的animate函数允许开发者平滑地改变HTML元素的CSS属性,如位置、大小、颜色等。这个函数提供了一种简便的方式来创建复杂的动画效果,而无需深入理解原生JavaScript的复杂性。...

    jquery-animateNumber-0.0.14

    《jQuery animateNumber插件详解与应用》 在Web开发中,动态效果的运用极大地提升了用户体验,数字动画就是其中一种常见的视觉表现形式。今天我们将聚焦于一个名为“jquery-animateNumber”的插件,它允许开发者...

    jquery animate图片模向滑动.rar

    本文将深入探讨如何利用jQuery的animate函数来创建一个简单的横向图片滑动特效,适用于制作图片相册或产品展示区。 首先,jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理和动画等功能。animate()是...

    jQuery animate事件卷轴打开动画效果

    jQuery的animate函数允许开发者自定义元素的CSS属性,如位置、大小、颜色等,并在指定时间内平滑地改变这些属性,从而创建出各种复杂的动画效果。它的基本语法如下: ```javascript $(selector).animate({params}, ...

    jQueryAnimate3d是一款炫酷的鼠标滑过图片3D透视特效jQuery插件

    jQueryAnimate3d是一款专为网页设计师和开发者设计的高效、炫酷的JavaScript插件,它主要专注于实现鼠标滑过时的3D透视特效。这款插件基于jQuery库,利用其强大的DOM操作能力和事件处理功能,使得在网页上创建动态、...

    jquery animate图片模向滑动

    `animate()`函数是jQuery中用于创建自定义动画的核心方法,它可以改变CSS属性值,包括位置、大小、颜色等。 首先,让我们理解`jQuery animate()`的基本语法: ```javascript $(selector).animate({ property1: ...

Global site tag (gtag.js) - Google Analytics