jquery animate用法

最近看过一段实现天猫购物车动画效果的代码,如果说是一道数学题,也就是高一数学的水准,但是把它放进程序里面写出来可就费劲了。当然今天不去研究那个复杂的东西,我们就回顾一下并彻底弄清jquery animate动画的原理。

1 基本用法

$('...').animate(prop,speed,easing,callback)
  • prop 类似css3属性参数,是一个js对象。
  • speed 动画时间
  • easing 缓动函数,默认是swing
  • callback 动画结束的回调函数

废话不多说,直接上代码

<div id="clickme">
    Click here
</div>
<img id="book" src="js/qwe.png" alt="" width="100" height="123"
     style="position: relative; left: 10px;">

( "#clickme" ).click(function() {
  $( "#book" ).animate({
    opacity: 0.25,
    left: "+=50",
    height: "toggle"
  }, 5000, function() {
    // Animation complete.
  });
});

我们可以看到prop就是一个css属性的对象,不写easing默认是swing效果,当然你可以在5000后面写个linear,表示匀速效果。

注意height:'toggle'就是高度变为0,然后又会变回来。

我们可以将上面代码稍稍改一下:

var flag = true;
    $( "#clickme" ).click(function() {
        if(!$('#book').is(':animated')){
            $( "#book" ).animate({
                opacity: flag ? 0.25 : 1,
                left: "+=50",
                height: "toggle"
            }, 1000,function() {
                flag = !flag
            });
        }
  });

is(':animated')判断是否处于运动,如果是就不会执行此次动画。

2 step function

这个用的比较少,知道就可以了

$('#book').animate({
            opacity: .7,
            height: '200px'
        },
        {
            step: function(now, fx) {
                var data = fx.elem.id + ' ' + fx.prop + ': ' + now;
                $('body').append('<div>' + data + '</div>');
            }
        });

book opacity: 0.9999259840548598
book height: 75.03083997714178
book opacity: 0.9997733646175807
book height: 75.09443140934138
.............................
book opacity: 0.7
book height: 200

.animate()提供了一个step选项- 每步动画执行后调用的回调函数。

3 easing使用

这个是比较有用的,在开发中会碰到。

$('#clickme').click(function() {
        $('#book').animate({
            width: ['toggle', 'swing'],
            height: ['toggle', 'linear'],
            opacity: 'toggle'
        }, 5000, function() {
            $(this).after('<div>Animation complete.</div>');
        });
    });

如上代码,我们可以看到,可以设置不同属性渐变的参数,width的效果是swing,height的是linear,而opacity是后面写的linear。
jquery默认只支持swing和linear,我们如何使用其他缓动呢?

<script type="text/javascript" src="http://gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.js"></script>
在jq之后引入这个js

$('#clickme').click(function() {
        $('#book').animate({
            width: 'toggle',
            height: 'toggle'
        }, {
            duration: 5000,
            specialEasing: {
                width: 'easeInBounce',
                height: 'easeOutBounce'
            },
            complete: function() {
                $(this).after('<div>Animation complete.</div>');
            }
        });
    });

注意这种写法,duration,easing和callback都写在了个对象里。
我们可以发现,所有的动画属性都是在同时进行,并且都是花费相同的时间,如果我想分开执行呢?

4 animate使用差异

 <button id="go1">» Animate Block1</button>
<button id="go2">» Animate Block2</button>
<div id="block1">Block1</div>
<div id="block2">Block2</div>

$( "#go1" ).click(function(){
  $( "#block1" ).animate( { width: "90%" }, { queue: false, duration: 3000 })
     .animate({ fontSize: "24px" }, 1500 )
     .animate({ borderRightWidth: "15px" }, 1500 );
});
 
$( "#go2" ).click(function(){
  $( "#block2" ).animate({ width: "90%" }, 1000 )
     .animate({ fontSize: "24px" }, 1000 )
     .animate({ borderLeftWidth: "15px" }, 1000 );
});
//  这种情况是上一个执行完了才下一个

如果对上面2种写法都清楚的话,就没问题了。解释一下吧:

  • queue等于false,表示该元素下一个animate和上一个是一起执行的,就是说宽度变为90%和字体变为24px是一起执行的,所花时间不同而已。

下面给个例子结束了

<div class="rectangle">
   <div class="square-small"></div>
</div>
<button id="animation-button">Run!</button>
<span id="percentage">0</span>%

$('#animation-button').click(function() {
   var $button = $(this);

   $('.rectangle')
      .find('.square-small')
      .animate({
            left: 280
         },
         {
            duration: 2000,
            start: function() {
               $button.prop('disabled', true);
            },
            complete: function() {
               $button.prop('disabled', false);
            },
            progress: function(animation, progress) {
               $('#percentage').text(Math.round(progress * 100));
            }
         }
      );
});

大家可以自己去试一下哟。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 题目1: jQuery 能做什么? 选择网页元素 改变结果集 元素的操作:取值和赋值 元素的操作:移动 元素的操作...
    cheneyzhangch阅读 419评论 0 1
  • 隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性。但是通过css...
    老夫撩发少年狂阅读 1,081评论 0 2
  • 题目1: jQuery 能做什么? jQuery的核心功能主要有下列几个: 方便快捷获取DOM元素: 如果使用纯J...
    进击的前端_风笑影阅读 461评论 0 0
  • 1、 jQuery 能做什么? jquery是一个丰富的js库,内部对js的很多复杂的方法进行了封装和加工,比如j...
    zh_yang阅读 1,400评论 6 13
  • 怎么说呢,不知不觉两年了,该干点啥了,现在这里记录一些学习的心得,与大家一起分享一下。 首先什么是AOP,都是些老...
    violet小咔咔阅读 455评论 0 2