在 Web开发的圈子里,开发者常常认为CSS动画是一种高性能web动画技术,如果想让网页加载的更快一些,就应该用纯CSS动画。其实这种观点是错误的, 很多开发者早就放弃了javascript的动画,迫使自己使用复杂的CSS样式来实现相同效果的UI交互。他们完全忽视了javascript带来的更 好的交互性。

但事实是基于javascript的动画效果通常和基于css的动画一样快,有些甚至更快一些。CSS动画通常被觉得比较快,因为我们总是拿它和jQuery动画相比,其实慢的是jQuery的$.animate(),然而javascript的动画库避免了DOM操作,常常比jQuery快20倍左右。

所以,让我们一起粉碎那个谣言,写一些真实的例子,来评估一下javascript动画的性能。

为什么要使用JavaScript?

把属性转换到样式中的时候用CSS非常方便,而且在不使用其它库的情况下,它们也能提供出色的表现。但是当你使用CSS来实现复杂的设计时,它们变的非常麻烦。

总而言之,CSS一定会限制你的设计。但是如果你使用javascript,就可以从逻辑上解决这些问题。javascript的动画引擎提供如下功能:

  • 跨浏览器的 SVG 支持
  • 基于物理学的动画加载
  • 时间轴控制,
  • Bezier translations

提示:如果你对javascript的展示效果比较感兴趣,可以读一下Julian Shapiro的 “CSS vs. JS Animation: Which Is Faster?”和Jack Doyle的 “Myth Busting: CSS Animations vs. JavaScript.” 。如果想看一些演示,可以看看 performance pane 和 “Library Speed Comparison” 。

Velocity 和 GSAP

两个最常用的javascript动画库是 Velocity.js 和 GSAP。这些库在使用jQuery的时候并没有性能损耗,因为它们都没有使用jQuery的动画栈。

如果你在页面中必须使用jQuery,你可以用Velocity和GSAP来代替你的jQuery $.animate()。比如

$element.animate({ opacity:0.5});

可以写成:

$element.velocity({ opacity:0.5}).

这两个库也当然也可以在没有jQuery的时候使用:

    /* Working without jQuery */Velocity(element,{ opacity:0.5},1000);// Velocity     TweenMax.to(element,1,{ opacity:0.5});// GSAP

像上面的例子一样,即全不使用jQuery,Velocity也保留了和jQuery的$.animate()类似的语法。

GSAP和它相反,通过面向对象的设计,更方便了对静态方法的调用。你可以对动画进行全面的控制。

在这两种解决方案中,你都不会用到jQuery的对象元素,但是如果是要操作原始的DOM结点呢?你可以通过

    document.getElementByID     document.getElementsByTagName     document.getElementsByClassNamedocument.querySelectorAll

这些类似于jQuery’s  selector的实现。下面我们会对这些方法进行简单的介绍。

杜绝jQuery

提示:如果你需要了解jQuery的$.animate(),可以看看 Velocity’s documentation.。

让我们看看querySelectorAll的功能::

    document.querySelectorAll("body");// Get the body elementdocument.querySelectorAll(".squares");// Get all elements with the "square" classdocument.querySelectorAll("div");// Get all divsdocument.querySelectorAll("#main");// Get the element with an id of "main"document.querySelectorAll("#main div");// Get the divs contained by "main"

向代码展示的一样,你可以通过querySelectorAll简单的进行对CSS的选择。它会在数组中返回所有匹配的元素:

    /* Get all div elements. */var divs = document.querySelectorAll("div");/* Animate all divs at once. */Velocity(divs,{ opacity:0.5},1000);// VelocityTweenMax.to(divs,1,{ opacity:0.5});// GSAP

因为我们没有使用jQuery的对象元素,你可能会好奇我们应该怎么把动画链接起来,其实我们可以这样做:

    $element // jQuery element object.velocity({ opacity:0.5},1000).velocity({ opacity:1},1000);

在 Velocity中,你可以像这样简化你的代码:

    /* These animations automatically chain onto one another. */Velocity(element,{ opacity:0.5},1000);Velocity(element,{ opacity:1},1000);

这样来处理动画就不会存在性能上的浪费。你会发现它javascript的性能真的和CSS差不多,而且操作更方便。

极客标签 - 专业和精准的分享,关注你感兴趣的极客,社区提供超棒的精品教程,互动授课

了解前端技术,请访问极客互动课程库和代码录播

原文来自:放弃使用jQuery实现动画

放弃使用jQuery实现动画相关推荐

  1. (转)GitHub 被微软收购后的 52 天,改版并放弃了 jQuery!

    上个月,『全球最大同性交友平台』GitHub 被微软以 75 亿美元(折合人民币 480 亿)的价格正式收购,这一事件引发诸多程序员担忧: 微软收购之后,Github 是否会将不再开源? 为防范于未然 ...

  2. GitHub:为什么我们最终选择放弃了 jQuery

    [CSDN编者按]7月17日,GitHub改版并放弃了jQuery, 这对于GitHub来说,绝对是一件可以载入公司史册的大事. 今天的文章中,四位参与改版和弃用JQuery的GitHub工程师,将介 ...

  3. GitHub 被微软收购后的 52 天,改版并放弃了 jQuery !

    上个月,『全球最大同性交友平台』GitHub 被微软以 75 亿美元(折合人民币 480 亿)的价格正式收购,这一事件引发诸多程序员担忧: 微软收购之后,Github 是否会将不再开源? 为防范于未然 ...

  4. js进阶 13-5 jquery队列动画如何实现

    js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...

  5. Lazy Line Painter – 很有趣的 jQuery 路径动画插件

    Lazy Line Painter 是基于 Raphaël(一个用于在网页中绘制矢量图形的 Javascript 库)的 jQuery 路径动画插件,能够把线条图案转换为吸引眼球的路径动画模式. 您可 ...

  6. HTML5动态圆形导航,jQuery带动画特效的圆形导航菜单特效

    这是一款jQuery带动画特效的圆形导航菜单特效.该导航菜单在被点击时,会以动画的方式移动到屏幕中间,并展开为一个圆形菜单,效果非常炫酷. 使用方法 在页面中引入jquery和TweenMax.js的 ...

  7. jQuery Easing 动画效果扩展--使用Easing插件,让你的动画更具美感。

    jQuery  Easing 是一款比较老的jQuery插件,在很多网站都有应用,尤其是在一些页面滚动.幻灯片切换等场景应用比较多.它非常小巧,且有多种动画方案供选择,使用简单,而且免费. 引入Eas ...

  8. html数字变换插件,轻量级jquery数字动画插件

    jquery.countup.js是一款轻量级jquery数字动画插件.该数字动画插件可以在页面滚动时,将指定的数字从0开始计数增加动画. 该数字动画插件可以控制动画的延迟时间和动画过渡时间.它依赖于 ...

  9. 第一百七十二节,jQuery,动画效果

    jQuery,动画效果 学习要点: 1.显示.隐藏 2.滑动.卷动 3.淡入.淡出 4.自定义动画 5.列队动画方法 6.动画相关方法 7.动画全局属性 一.显示.隐藏 jQuery 中显示方法为:. ...

最新文章

  1. CSS之 background-color: rgba(255,0,0,opacity number)
  2. spring boot 1.5.4 之监控Actuator(十四)
  3. 薪资涨幅60%,直通一线互联网公司的秘密......
  4. 安卓CheckBox实现单选
  5. [HDU3336]Count the string(KMP+DP)
  6. LeetCode 1670. 设计前中后队列(deque)
  7. html游戏图标库,又一款开源图标库 CSS.GG,值得一用
  8. 网络专业人士笔记(超级珍藏)
  9. 获取屏幕宽度、浏览器宽度、网页高度,宽度信息
  10. win7自带计算机,win7系统自带的计算器不见了的解决方法
  11. mysql护眼参数,VS2013设置护眼背景颜色
  12. Eclipse插件Target Management (RSE)
  13. 最新版本供需指标介绍,自动识别有价值的K线,超级好用
  14. Dynamo Revit 钢箱梁、混凝土箱梁、桥墩、盖梁建模的相关经验
  15. ❤️Java中经纬度换算❤️
  16. centos6 安装完epel 解决yum的问题
  17. Method of posterior probabilities generation for ordinal classification
  18. 为什么在做微服务设计的时候需要DDD?
  19. 淘宝手机所在地查询接口
  20. 超螺旋滑模控制(STA)

热门文章

  1. 如何用Chrome自带的截屏功能截取超过一个屏幕的网页
  2. 条件变量pthread_cond_wait()和pthread_cond_signal()详解
  3. snappy 在linux安装及使用
  4. java -Djava.library.path -Djava.ext.dirs 的区别
  5. 软件之最大全电子书免费版
  6. 【Binary Tree Level Order Traversal】cpp
  7. 【DeepLearning】Exercise:Sparse Autoencoder
  8. iOS网络编程-iCloud键值数据存储编程实例
  9. MyBatis 3 自动生成 主键 针对不同的数据库(oracle/sqlserver/mysql)
  10. NYOJ 30 Gone Fishing JAVA+解析