7-5 动画接口
本节编程练习不计算学习进度,请电脑登录imooc.com操作

动画接口

jQuery 动画其实原理上本身是不复杂的。量变产生质变,参杂了大量的设计技巧,同时通过扩展大量的便捷方式加大了逻辑上的难度,我们这章深入的认识下 jQuery 的 API 的具体的含义以及实现上的一些细节。

jQuery 动画是通过 animate 这个 API 设置执行的,其内部也是按照每一个 animate 的划分封装了各自动画组的行为,包括数据过滤、缓动公式、一些动画默认参数的设置、元素状态的调整、事件的处理通知机制、执行等等,换句话说,我们可以把 animate 看作一个对象,对象封装自己的一系列属性与方法,jQuery 可以支持连续动画,那么 animate 与 animate 之间的切换就是通过队列 queue,这个之前就已经详细的解释过了。

动画的参数

jQuery的内部的方法都是针对 API 的处理范围设计的,我们看看 Animation 方法的支持情况:

.animate( properties [, duration ] [, easing ] [, complete ] )
.animate( properties, options )

简单的来说,就是把一对的参数丢到 animate 方法里面,然后 animate 就开始执行你参数规定的动画了,那么动画每执一次就会通过回调通知告诉开发者,具体有 complete/done/fail/always/step 接口等。

理解定义(代码参考右边)

book.animate({
    opacity: 0.25,
    left: '50',
    height: 'toggle'
}, {
    duration :1000,
    specialEasing: {
        height: 'linear'
    },
    step: function(now, fx) {
        console.log('step')
    },
    progress:function(){
        console.log('progress')
    },
    complete:function(){
        console.log('动画完成')
    }
})

首先,动画的参数都是最终值,都是相对数据。

如上 div 元素的起始:

初步理解 API 的一些设置后,我们下一节研究下动画的变换算法。

任务

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
  5. <!-- // <script type="text/javascript" src="../jquery-2.1.1.js"></script> -->
  6. <script src="http://code.jquery.com/jquery-latest.js"></script>
  7. <title></title>
  8. </head>
  9. <body>
  10.  
  11. <div id="clickme">点击观察动画执行</div>
  12. <div id="book" alt="" style="background:red;position: relative; left: 50px;width:200px;height:100px;"></div>
  13. <ul></ul>
  14.  
  15. <script type="text/javascript">
  16.  
  17. var $ul = $('ul')
  18.  
  19. function show(data) {
  20. $ul.append('<li>' + data + '</li>');
  21. }
  22.  
  23. $('#clickme').click(function() {
  24.  
  25. var book = $("#book")
  26.  
  27. book.animate({
  28. opacity: 0.25,
  29. left: '+=50',
  30. height: 'toggle'
  31. }, {
  32. duration :200,
  33. specialEasing: {
  34. height: 'linear'
  35. },
  36. step: function(now, fx) {
  37. show('step')
  38. },
  39. progress:function(){
  40. show('progress')
  41. },
  42. complete:function(){
  43. show('动画完成')
  44. }
  45. })
  46. });
  47.  
  48. </script>
  49. </body>
  50. </html>
下一节