搜索
首页web前端js教程轻松改善jQuery动画

Easily Improving jQuery Animations

核心要点

  • jQuery 的 animate() 函数虽然实用,但并非高性能动画引擎,可能导致内存消耗和帧率低的问题。然而,对于不熟悉 CSS 动画或寻求跨浏览器兼容性的开发者来说,它仍然是一个可行的选择。
  • CSS 动画通常比 jQuery 的动画更快、更高效,这主要归功于 GPU 加速。但是,它们也有一些局限性,包括与旧版 Internet Explorer 的兼容性问题,以及依赖百分比而不是时间来确定动画持续时间,这可能会使调整变得复杂。
  • Velocity.js 是一个 jQuery 插件,它可以在无需大幅更改代码的情况下显着提高 jQuery 动画的性能。通过将 $.animate() 替换为 $.velocity(),开发者可以获得更高的帧率并保持 jQuery 的链式调用特性。

我们都曾使用 jQuery 的 animate() 函数在网页上创建出色的效果。然后,随着 CSS3 的引入和兴起,有人告诉我们我们的代码很糟糕。他们建议我们放弃所有基于 jQuery 的动画(以及通常基于 JavaScript 的动画),转而使用基于 CSS 的动画。这种变化迫使我们处理许多浏览器(不)兼容性问题和功能缺失;更不用说无法在旧版 Internet Explorer 上运行它们了。这种痛苦是合理的,因为 CSS 动画比 JavaScript 动画更快。至少他们这么告诉我们的。这是真的吗? jQuery 的 animate() 函数真的那么慢吗?有没有一种方法可以轻松地增强它而无需更改我们的代码?答案是肯定的。在本文中,我们将了解创建动画的两种方法的一些局限性,然后我们将了解如何使用 jQuery 代码获得更好的性能。

jQuery 的问题是什么?

我们都了解并喜爱 jQuery(实际上有些人并不喜欢)。这个旨在简化 HTML 客户端脚本的库帮助了全世界数十万(并非真实数据)开发者。它使 HTML 文档遍历和操作、事件处理、Ajax 以及更多操作变得轻而易举,减轻了处理所有浏览器的不兼容性和错误的负担。在其功能中,jQuery 还允许创建动画和效果。借助它,我们可以对 CSS 属性进行动画处理、隐藏元素、淡出元素以及其他类似效果。但是,jQuery 的设计目标从来都不是成为一个高性能的动画引擎,它也从未打算支持真正复杂、消耗 CPU/GPU 的动画。作为这一事实的佐证,jQuery 的内存消耗经常会触发垃圾回收,从而在执行动画时造成问题。此外,jQuery 在幕后使用 setInterval() 而不是 requestAnimationFrame()(阅读更多关于 requestAnimationFrame() 的信息)来运行动画,这无助于产生高帧率。由于这些因素,“最了解的人” 提倡使用 CSS 来创建我们的动画和效果。

CSS 动画和过渡

让我们明确一点:CSS 动画优于 jQuery 动画。在谈到动画时,jQuery 的速度可能比 CSS 慢几倍。CSS 动画和过渡具有由 GPU 硬件加速的优势,这在移动像素方面非常出色。尤其是在性能至关重要的场合(例如移动设备)中,这一因素似乎是一个巨大的改进。这太棒了,不是吗?事实是,所有这些都有局限性和问题。第一个限制是并非所有 CSS 属性都可以通过 GPU 进行改进。因此,认为使用 CSS 动画总是会获胜的假设是错误的。另一个问题是 CSS 动画不可移植,至少在您可能定位的所有浏览器中并非如此。例如,过渡在 Internet Explorer 9 及以下版本中不起作用。更糟糕的是,CSS 中的动画目前基于百分比而不是时间(秒或毫秒)。这意味着,除非您使用 Sass 或 Less 等预处理器,否则在完成动画后更改动画持续时间可能会非常痛苦。最后,CSS 动画需要键入大量供应商前缀。是的,我们可以委托一个工具来处理它们,但这只是另一件需要担心的事情。

除了之前的考虑之外,还有其他一些充分的理由不应忽视 jQuery 动画。它们更多地与技能不足有关,而不是技术的弱点本身,但仍然值得一提。如果一个开发者习惯于使用 jQuery 创建动画,那么很有可能该开发者无法使用 CSS 来执行相同的任务。也许开发者需要很长时间才能在 CSS 中创建相同的效果,以至于付出努力不值得获得好处。或者,开发者可能不想学习另一种技术来创建高度可定制的动画。这没有什么可羞愧的。每个人在一个特定领域都有自己的局限性。这里的重点是我们希望使用 jQuery 创建的动画具有更好的性能,这样我们就无需将其转换为 CSS 动画。幸运的是,确实存在解决方案。

改进 jQuery 的 animate() 函数

解决 jQuery 动画问题的答案叫做 Velocity.js。Velocity.js 是 <q cite="https://github.com/julianshapiro/velocity">一个 jQuery 插件,它重新实现了 $.animate() 以产生更高的性能(使 Velocity 也比 CSS 动画库更快),同时包含了改进动画工作流程的新功能。</q> 与使用旧版 IE 的 jQuery 1.X 不同,Velocity 与 IE8 兼容。对于大多数项目来说,这应该不是一个主要问题。此时您可能想知道使用 Velocity.js 会如何影响代码库。答案是“以一种非常荒谬的方式”。为了集成 Velocity.js,我们所要做的就是下载它并将其包含在我们想要使用的网页中。最后一步是将每次出现的 $.animate() 替换为 $.velocity()无需更改任何参数!此更改就像在我们选择的文本编辑器或 IDE 中执行搜索和替换一样简单。完成后,我们的动画性能将立即得到提升。这很棒,因为我们可以重用我们的知识,而不会对代码库产生太大影响。此外,由于它是一个保持链式调用的 jQuery 插件,我们可以继续创建 jQuery 典型的“方法调用链”。

结论

在本文中,我描述了一些影响基于 jQuery 动画的问题。我们讨论了为什么 CSS 动画在过去几年中被大力推广以替代 jQuery。然后,我强调了 CSS 的一些局限性以及在性能方面的一些缺点。最后,我简要地向您介绍了 Velocity.js,这是一个 jQuery 插件,它允许您几乎无需更改源代码即可提高 JavaScript 动画和效果的性能。本文只是对 jQuery、CSS 和 JavaScript 动画之间比较的介绍。如果您想深入研究此主题,我强烈建议您阅读 GSAP 作者和 Velocity.js 作者撰写的以下文章:- 揭穿神话:CSS 动画与 JavaScript- CSS 与 JS 动画:哪个更快?

关于改进 jQuery 动画的常见问题

如何减慢 jQuery 动画的速度?

可以通过增加动画的持续时间来减慢 jQuery 动画的速度。持续时间在 .animate() 方法中以毫秒为单位指定。例如,如果您想将动画减慢到持续 5 秒,则应编写 $(selector).animate({params}, 5000);。数字越大,动画越慢。

jQuery 动画中缓动起什么作用?

jQuery 动画中的缓动是指动画在其持续时间内不同点处的进度速度。jQuery 提供两种内置的缓动方法:“swing” 和 “linear”。“Swing” 是默认的缓动方法,它使动画在开始和结束时进度较慢,在中间进度较快。“Linear” 另一方面,确保动画在整个过程中速度恒定。

如何提高 jQuery 动画的性能?

提高 jQuery 动画性能的方法有很多。一种方法是在可能的情况下使用 CSS 过渡,因为它们通常比 jQuery 动画性能更好。另一种方法是限制同时运行的动画数量。您还可以使用 requestAnimationFrame 方法,该方法允许浏览器优化动画,从而实现更流畅的动画。

如何停止正在运行的 jQuery 动画?

您可以使用 .stop() 方法停止正在运行的 jQuery 动画。此方法会停止选定元素上当前正在运行的动画。例如,$(selector).stop(); 将停止选定元素上的动画。

如何在 jQuery 中链接多个动画?

您可以通过在同一元素上简单地调用多个动画方法来链接多个 jQuery 动画。例如,$(selector).fadeIn().slideUp(); 将首先淡入选定元素,然后向上滑动它们。jQuery 确保动画按调用的顺序执行。

如何一次在 jQuery 中同时为多个属性设置动画?

您可以通过将包含要为其设置动画的属性的对象传递给 .animate() 方法来一次在 jQuery 中同时为多个属性设置动画。例如,$(selector).animate({height: "300px", width: "200px"}); 将同时为选定元素的高度和宽度设置动画。

如何在 jQuery 动画中使用回调函数?

jQuery 动画中的回调函数是在动画完成后执行的函数。您可以将回调函数作为第二个参数传递给 .animate() 方法。例如,$(selector).animate({params}, function(){ /* 动画完成后要执行的代码 */ });

如何在 jQuery 中创建自定义动画?

您可以使用 .animate() 方法在 jQuery 中创建自定义动画。此方法允许您为任何 CSS 属性设置动画。例如,$(selector).animate({left: " =50px"}); 将使选定元素向右移动 50 像素。

如何在 jQuery 动画中使用 queue 和 dequeue 方法?

jQuery 中的 queue 和 dequeue 方法用于控制动画的执行。queue 方法允许您将新的动画添加到要对选定元素执行的动画队列中。dequeue 方法允许您删除并执行队列中的下一个函数。

如何在 jQuery 动画中使用 .delay() 方法?

jQuery 中的 .delay() 方法用于延迟队列中后续项目的执行。它通常用于延迟动画。例如,$(selector).delay(500).fadeIn(); 将使 fadeIn 动画延迟 500 毫秒。

以上是轻松改善jQuery动画的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
在JavaScript中替换字符串字符在JavaScript中替换字符串字符Mar 11, 2025 am 12:07 AM

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

构建您自己的Ajax Web应用程序构建您自己的Ajax Web应用程序Mar 09, 2025 am 12:11 AM

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

10个JQuery Fun and Games插件10个JQuery Fun and Games插件Mar 08, 2025 am 12:42 AM

10款趣味横生的jQuery游戏插件,让您的网站更具吸引力,提升用户粘性!虽然Flash仍然是开发休闲网页游戏的最佳软件,但jQuery也能创造出令人惊喜的效果,虽然无法与纯动作Flash游戏媲美,但在某些情况下,您也能在浏览器中获得意想不到的乐趣。 jQuery井字棋游戏 游戏编程的“Hello world”,现在有了jQuery版本。 源码 jQuery疯狂填词游戏 这是一个填空游戏,由于不知道单词的上下文,可能会产生一些古怪的结果。 源码 jQuery扫雷游戏

如何创建和发布自己的JavaScript库?如何创建和发布自己的JavaScript库?Mar 18, 2025 pm 03:12 PM

文章讨论了创建,发布和维护JavaScript库,专注于计划,开发,测试,文档和促销策略。

jQuery视差教程 - 动画标题背景jQuery视差教程 - 动画标题背景Mar 08, 2025 am 12:39 AM

本教程演示了如何使用jQuery创建迷人的视差背景效果。 我们将构建一个带有分层图像的标题横幅,从而创造出令人惊叹的视觉深度。 更新的插件可与JQuery 1.6.4及更高版本一起使用。 下载

Matter.js入门:简介Matter.js入门:简介Mar 08, 2025 am 12:53 AM

Matter.js是一个用JavaScript编写的2D刚体物理引擎。此库可以帮助您轻松地在浏览器中模拟2D物理。它提供了许多功能,例如创建刚体并为其分配质量、面积或密度等物理属性的能力。您还可以模拟不同类型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流浏览器。此外,它也适用于移动设备,因为它可以检测触摸并具有响应能力。所有这些功能都使其值得您投入时间学习如何使用该引擎,因为这样您就可以轻松创建基于物理的2D游戏或模拟。在本教程中,我将介绍此库的基础知识,包括其安装和用法,并提供一

使用jQuery和Ajax自动刷新DIV内容使用jQuery和Ajax自动刷新DIV内容Mar 08, 2025 am 12:58 AM

本文演示了如何使用jQuery和ajax自动每5秒自动刷新DIV的内容。 该示例从RSS提要中获取并显示了最新的博客文章以及最后的刷新时间戳。 加载图像是选择

如何在浏览器中优化JavaScript代码以进行性能?如何在浏览器中优化JavaScript代码以进行性能?Mar 18, 2025 pm 03:14 PM

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),