内容摘要:

1.显示、隐藏

2.滑动、卷动

3.淡入、淡出

4.自定义动画

5.列队动画方法

6.动画相关方法

7.动画全局属性

 发文不易,转载请注明出处~

 

一.显示、隐藏

jQuery 中显示方法为:.show(),隐藏方法为:.hide()。在无参数的时候,只是硬性的显示内容和隐藏内容。

$(\’.show\’).click(function () { //显示

  $(\’#box\’).show();

});

$(\’.hide\’).click(function () { //隐藏

  $(\’#box\’).hide();

});

PS:.hide()方法其实就是在行内设置 CSS 代码:display:none; 而.show()方法要根据原来元素是区块还是内联来决定,如果是区块,则设置 CSS 代码:display:block; 如果是内联,则设置 CSS 代码:display:inline;。

 

在.show()和.hide()方法可以传递一个参数,这个参数以毫秒(1000 毫秒等于 1 秒钟)来控制速度。并且里面富含了匀速变大变小,以及透明度变换。

$(\’.show\’).click(function () {

  $(\’#box\’).show(1000); //显示用了 1 秒

});

$(\’.hide\’).click(function () {

  $(\’#box\’).hide(1000); //隐藏用了 1 秒

});

 

除了直接使用毫秒来控制速度外,jQuery 还提供了三种预设速度参数字符串:slow、normal 和 fast,分别对应 600 毫秒、400 毫秒和 200 毫秒。

$(\’.show\’).click(function () {

  $(\’#box\’).show(\’fast\’);      //200 毫秒

});

$(\’.hide\’).click(function () {

  $(\’#box\’).hide(\’slow\’);       //600 毫秒

});

PS :不管是传递毫秒数还是传递预设字符串, 如果不小心传递错误或者传递空字符串。那么它将采用默认值:400 毫秒。

$(\’.show\’).click(function () {

  $(\’#box\’).show(\’\’);   //默认 400 毫秒

});

 

列队动画效果:

//列队动画,使用.show()和.hide()的回调函数实现

$(\’.show\’).click(function () {

  $(\’#box\’).show(\’slow\’, function () {

    alert(\’动画持续完毕后,执行我!\’);

  });

});

//列队动画,使用函数名调用自身(多个元素的时候)

$(\’.show\’).click(function () {

  $(\’div\’).first().show(\’fast\’, function showSpan() {

   $(this).next().show(\’fast\’, showSpan);

  });

});

//列队动画,使用 arguments.callee 匿名函数自调用(重复无限次执行)

$(\’.hide\’).click(function () {

  $(\’div\’).last().hide(\’fast\’, function() {

    $(this).prev().hide(\’fast\’, arguments.callee);

  });

});

 

.toggle() 方法实现显示和隐藏:

我们在使用.show()和.hide()的时候,如果需要一个按钮切换操作,需要进行一些条件判断。而 jQuery 提供给我们一个类似功能的独立方法:.toggle()。

$(\’.toggle\’).click(function () {

  $(this).toggle(\’slow\’);

});

 

二.滑动、卷动

jQuery 提供了一组改变元素高度的方法:.slideUp()、.slideDown()和.slideToggle()。顾名思义,向上收缩(卷动)和向下展开(滑动)。

$(\’.down\’).click(function () {

  $(\’#box\’).slideDown();

});

$(\’.up\’).click(function () {

  $(\’#box\’).slideUp();

});

$(\’.toggle\’).click(function () {

  $(\’#box\’).slideToggle();

});

注意:滑动、卷动效果和显示、隐藏效果一样,具有相同的参数。

 

三.淡入、淡出

jQuery 提供了一组专门用于透明度变化的方法:.fadeIn()和.fadeOut(),分别表示淡入、淡出,当然还有一个自动切换的方法:.fadeToggle()

$(\’.in\’).click(function () {

  $(\’#box\’).fadeIn(\’slow\’);

});

$(\’.out\’).click(function () {

  $(\’#box\’).fadeOut(\’slow\’);

});

$(\’.toggle\’).click(function () {

  $(\’#box\’).fadeToggle();

});

上面三个透明度方法只能是从 0 到 100,或者从 100 到 0,如果我们想设置指定值就没有办法了。而 jQuery 为了解决这个问题提供了.fadeTo()方法

$(\’.toggle\’).click(function () {

  $(\’#box\’).fadeTo(\’slow\’, 0.33);          //0.33 表示值为 33

});

PS:淡入、淡出效果和显示、隐藏效果一样,具有相同的参数。对于.fadeTo()方法,如果本身透明度大于指定值,会淡出,否则相反。

 

四.自定义动画

jQuery 提供了几种简单常用的固定动画方面我们使用。 但有些时候, 这些简单动画无法满足我们更加复杂的需求。这个时候,jQuery 提供了一个.animate()方法来创建我们的自定义动画,满足更多复杂多变的要求。

$(\’.animate\’).click(function () {

  $(\’#box\’).animate({

    \’width\’ : \’300px\’,

    \’height\’ : \’200px\’,

    \’fontSize\’ : \’50px\’,

    \’opacity\’ : 0.5

  });

});

PS:一个 CSS 变化就是一个动画效果,上面的例子中,已经有四个 CSS 变化,已经实现了多重动画同步运动的效果

 

.animate()方法必传的参数只有一个,就是一个键值对 CSS 变化样式的对象。还有两个可选参数分别为速度和回调函数。

$(\’.animate\’).click(function () {

  $(\’#box\’).animate({

    \’width\’ : \’300px\’,

    \’height\’ : \’200px\’

  }, 1000, function () {

    alert(\’动画执行完毕执行我!\’);

  });

});

到目前位置, 我们都是创建的固定位置不动的动画。 如果想要实现运动状态的位移动画,那就必须使用自定义动画,并且结合 CSS 的绝对定位功能。

$(\’.animate\’).click(function () {

  $(\’#box\’).animate({

    \’top\’ : \’300px\’,          //首先必须设置 CSS 定位

    \’left\’ : \’200px\’

  });

});

自定义动画中, 每次开始运动都必须是初始位置或初始状态, 而有时我们想通过当前位置或状态下再进行动画。jQuery 提供了自定义动画的累加、累减功能。

$(\’.animate\’).click(function () {

  $(\’#box\’).animate({

    \’left\’ : \’+=100px\’

  });

});

 

自定义实现列队动画的方式有两种:

1.在回调函数中再执行一个动画;

2.通过连缀或顺序来实现列队动画。

 

//通过依次顺序实现列队动画

1 $(\'.animate\').click(function () {
2 
3   $(\'#box\').animate({\'left\' : \'100px\'});
4 
5   $(\'#box\').animate({\'top\' : \'100px\'});
6 
7   $(\'#box\').animate({\'width\' : \'300px\'});
8 
9 });

注意:如果不是同一个元素,就会实现同步动画。

 

//通过连缀实现列队动画

 1 $(\'.animate\').click(function () {
 2 
 3     $(\'#box\').animate({
 4 
 5         \'left\' : \'100px\'
 6 
 7     }).animate({
 8 
 9         \'top\' : \'100px\'
10 
11     }).animate({
12 
13         \'width\' : \'300px\'
14 
15     });
16 
17 });               

 

//通过回调函数实现列队动画

 1 $(\'.animate\').click(function () {
 2 
 3     $(\'#box\').animate({
 4 
 5             \'left\' : \'100px\'
 6 
 7         }, function () {
 8 
 9         $(\'#box\').animate({
10     
11             \'top\' : \'100px\'
12     
13         }, function () {
14 
15             $(\'#box\').animate({
16 
17                 \'width\' : \'300px\'
18 
19             });
20 
21         });
22 
23     });
24 
25 });
26 
27                  

 

 

五.列队动画方法

之前我们已经可以实现列队动画了,如果是同一个元素,可以依次顺序或连缀调用。 如果是不同元素,可以使用回调函数。但有时列队动画太多,回调函数的可读性大大降低。 为此,jQuery 提供了一组专门用于列队动画的方法。

 

//注意连缀无法实现按顺序列队

$(\’#box\’).slideUp(\’slow\’).slideDown(\’slow\’).css(\’background\’, \’orange\’);

PS:如果动画方法,连缀可以实依次列队,而.css()方法不是动画方法,会在一开始传入列队之前。那么,可以采用动画方法的回调函数来解决。

 

//使用回调函数,强行将.css()方法排队到.slideDown()之后

$(\’#box\’).slideUp(\’slow\’).slideDown(\’slow\’, function () {

  $(this).css(\’background\’, \’orange\’);

});

 

但如果这样的话,当列队动画繁多的时候,可读性不但下降,而原本的动画方法不够清晰。所以,我们的想法是每个操作都是自己独立的方法。那么 jQuery 提供了一个类似于回调函数的方法:.queue()

//使用.queue()方法模拟动画方法跟随动画方法之后

$(\’#box\’).slideUp(\’slow\’).slideDown(\’slow\’).queue(function () {

  $(this).css(\’background\’, \’orange\’);

});

 

现在,我们想继续在.queue()方法后面再增加一个隐藏动画,这时发现居然无法实现。这是.queue()特性导致的。有两种方法可以解决这个问题,jQuery的.queue()的回调函数可以传递一个参数,这个参数是 next 函数,在结尾处调用这个 next()方法即可再连缀执行列队动画。

//使用 next 参数来实现继续调用列队动画

$(\’#box\’).slideUp(\’slow\’).slideDown(\’slow\’).queue(function (next) {

  $(this).css(\’background\’, \’orange\’);

  next();

}).hide(\’slow\’);

因为next函数是jQuery1.4版本以后才出现的, 而之前我们普遍使用的是.dequeue()方法。意思为执行下一个元素列队中的函数。

//使用.dequeue()方法执行下一个函数动画

$(\’#box\’).slideUp(\’slow\’).slideDown(\’slow\’).queue(function () {

  $(this).css(\’background\’, \’orange\’);

  $(this).dequeue();

}).hide(\’slow\’);

 

如果采用顺序调用,那么使用列队动画方法,就非常清晰了,每一段代表一个列队, 而回调函数的嵌套就会杂乱无章。

//使用顺序调用的列队,逐个执行,非常清晰

 1 $(\'#box\').slideUp(\'slow\');
 2 
 3 $(\'#box\').slideDown(\'slow\');
 4 
 5 $(\'#box\').queue(function () {
 6 
 7 $(this).css(\'background\', \'orange\');
 8 
 9     $(this).dequeue();
10 
11 })
12 
13 $(\'#box\').hide(\'slow\');

 

.queue()方法还有一个功能,就是可以得到当前动画列队的长度。当然,这个用法在普通 Web 开发中用的比较少,这里不做详细探讨。

 

jQuery 还提供了一个清理列队的功能方法:.clearQueue()。把它放入一个列队的回调函数或.queue()方法里,就可以把剩下未执行的列队给移除。

//清理动画列队

$(\’#box\’).slideDown(\’slow\’, function () {$(this).clearQueue()});

 

六.动画相关方法

很多时候需要停止正在运行中的动画,jQuery 为此提供了一个.stop()方法。它有两个可选参数:.stop(clearQueue, gotoEnd)

clearQueue :传递一个布尔值,代表是否清空当前元素未执行完的动画列队;

gotoEnd :代表是否直接将正在执行的当前动画跳转到当前动画的末状态。

如果直接使用stop()方法,则会立即停止当前正在进行的动画(记住,只是停止当前正在执行的,见《锋利jQuery 第二版》P128详解),如果接下来还有动画等待执行,则以当前状态开始接下里的动画。

//强制停止运行中的

$(\’.stop\’).click(function () {

  $(\’#box\’).stop();

});

 

//带参数的强制运行

 1 $(\'.animate\').click(function () {
 2 
 3     $(\'#box\').animate({
 4     
 5         \'left\' : \'300px\'
 6 
 7     }, 1000);  
 8 
 9     $(\'#box\').animate({
10 
11         \'bottom\' : \'300px\'
12 
13     }, 1000);
14 
15     $(\'#box\').animate({
16 
17         \'width\' : \'300px\'
18 
19     }, 1000);
20 
21     $(\'#box\').animate({
22 
23         \'height\' : \'300px\'
24 
25     }, 1000);
26 
27 });
28 
29 $(\'.stop\').click(function () {
30 
31     $(\'#box\').stop(true ,true);
32 
33 });

PS:第一个参数表示是否取消列队动画,默认为 false。如果参数为 true,当有列队动画的时候,会取消后面的列队动画。第二参数表示是否到达当前动画结尾,默认为 false。如果参数为 true,则停止后立即到达末尾处。

 

有时在执行动画或列队动画时, 需要在运动之前有延迟执行, jQuery 为此提供了.delay()方法。这个方法可以在动画之前设置延迟,也可以在列队动画中间加上。

//开始延迟 1 秒钟,中间延迟 1 秒

$(\’.animate\’).click(function () {

  $(\’#box\’).animate({

    \’bottom\’ : \’300px\’

  }, 1000);

  $(\’#box\’).delay(1000).animate({

    \’width\’ : \’300px\’

  }, 1000);

  $(\’#box\’).animate({

    \’height\’ : \’300px\’

  }, 1000);

});

 

有一个过滤器:animated,这个过滤器可以判断出当前运动的动画是哪个元素。 通过这个特点, 我们可以避免由于用户快速在某个元素执行动画时,由于动画积累而导致的动画和用户的行为不一致。(这个属性还是蛮重要的,详见《锋利JQ》P129)

//递归执行自我,无限循环播放

$(\’#box\’).slideToggle(\’slow\’, function () {

  $(this).slideToggle(\’slow\’, arguments.callee);

});

 

//停止正在运动的动画,并且设置红色背景

$(\’.button\’).click(function(){

  $(\’div:animated\’).stop().css(\’background\’, \’red\’);

});

 

For my lover,C.

And thank you , MR.Lee.

 

版权声明:本文为ttcc原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ttcc/p/3802322.html