学习日记(12)–jQuery动画

  • Post author:
  • Post category:其他




显示与隐藏

两种方式

show()和hide()
toggle()
$().show(speed, fn)
$().hide(speed, fn)

speed是一个可选参数,表示动画的速度,单位为毫秒。如果省略,则表示没有动画效果。speed有两种取值:一种是“字符串”;另外一种是“数值”。

取值 说明

“fast” 200毫秒

“normal” 400毫秒(默认值)

“slow” 600毫秒

fn也是一个可选参数,表示

动画执行完成后的回调函数

。在这里,所谓的回调函数,说白了就是

在动画执行完成后执行的一个函数。


实质上

show()

方法会把元素由display: none;还原为原来的状态(

display:block、display:inline-block

等)。

//无动画
$("#btn_hide").click(function () {
    $("img").hide();
});
$("#btn_show").click(function () {
    $("img").show();
});

上面代码其实等价于:

$("#btn_hide").click(function () {
    $("img").css("display" , "none");
});
$("#btn_show").click(function () {
    $("img"). css("display" , "block");
});

只需在括号里加入参数即可实现动画效果

toggle()
$().toggle(speed, fn)

可以使用

toggle()

方法来“切换”元素的显示状态。也就是说,如果元素是显示状态,则会隐藏起来;如果元素是隐藏状态,则会显示出来。参数设置与show()和hide()相同。



淡入与淡出

fadeIn()和fadeOut()
fadeToggle()
fadeTo()

  1. fadeIn()



    fadeOut()



    fadeIn()

    方法来实现元素的

    淡入效果

    ,可以使用

    fadeOut()

    方法来实现元素的

    淡出效果

$().fadeIn(speed, fn)
$().fadeOut(speed, fn)

参数设置与

show(),hide()

相同

区别:show()与hide():通过

改变height、width、opacity、displa

y来实现元素的显示与隐藏。看着像是慢慢缩小到消失。

fadeIn()与fadeOut():通过

改变opacity、display

来实现元素的显示与隐藏。图像淡化到消失。

2.

fadeToggle()

$().fadeToggle(speed, fn)


fadeToggle()

方法来“切换”元素的显示状态。也就是说,如果元素是

显示状态,则会淡出;如果元素是隐藏状态,则会淡入

。参数设置与toggle()相同。

3.

fadeTo()

$().fadeTo(speed, opacity, fn)

淡入效果中,透明度(opacity属性)是从0变化到1。在淡出效果中,透明度是从1变化到0的。在jQuery中,如果想要将元素透明度指定到0~1之间的某个值,可以使用fadeTo()方法。

滑上与滑下实现动态下拉菜单

slideUp()和slideDown()
slideToggle()

1.

slideUp()和slideDown()

$().slideUp(speed, fn)
$().slideDown(speed, fn)


slideUp()

方法来实现元素的滑上效果,可以使用

slideDown()

方法来实现元素的滑下效果。

 //设置一个变量flag用于标记元素状态,是“滑下”还是“滑上”
            var flag = 0;
            $("h3").click(function () {
                if (flag == 0) {
                    $("p").slideDown();
                    flag = 1;
                }
                else {
                    $("p").slideUp();
                    flag = 0;
                }
            });
 <h3>绿叶学习网简介</h3>
 <p>绿叶学习网成立于201541</p>

对于滑动动画,我们都是需要

定义一个变量来标识当前元素的滑动状态,然后根据这个变量值判断是执行滑上效果,还是滑下效果。

2.

slideToggle()

$().slideToggle(speed, fn)

使用

slideToggle()

方法来“

切换

”元素的滑动状态。也就是说,如果元素是滑下状态,则会滑上;如果元素是滑上状态,则会滑下。

对于实现上面功能只需要

  $("h3").click(function(){
                $("p").slideToggle();
  })



自定义动画

**

(1)简单动画

(2)累积动画

(3)回调函数**



1.简单动画

在jQuery中,对于自定义动画,我们都是使用

animate()

方法来实现的

$().animate(params, speed, fn)

params是一个必选参数,表示

属性值列表

,也就是元素在动画中变化的属性列表。

speed是一个可选参数,表示

动画的速度

,单位为毫秒,默认为400毫秒。如果省略,则表示采用默认速度。

fn也是一个可选参数,表示动画

执行完成后的回调函数



$(this).animate({ "width": "150px", "height": "150px" }, 1000);

jQuery本身有一个缺陷,就是使用

animate()方法时会无法识别background-color、border-color等颜色属性

。因此,我们还需要引入第三方插件jquery.color.js来修复这个bug。



2.累计动画

对于元素的宽度和高度,我们可以结合

+=和-=

这两个运算符来实现累积动画

$("#btn2").click(function () {
                $("#box2").animate({ "width": "+=100px", "height": "+=100px" }, 1000);
            })

简单动画形式只是给定了元素属性的最终值,而累积动画形式是在元素原来值的基础上增加或减少。

此外当我们多次点击【累积动画】按钮后,会发现这个动画效果会不断累加。



3.回调函数

想要在动画执行完成后再实现某些操作,我们就需要用到

animate()

方法中的回调函数。

区别:

 $(this).animate({ "width": "150px", "height": "150px" }, 1000).css("border", "1px solid red"); })

当点击的一瞬间,元素就已经被添加了边框。也就是说,

animate()

方法才刚刚执行,

css()

也一起被执行了。

$(this).animate({ "width": "150px", "height": "150px" }, 1000, function(){ $(this).css("border", "2px solid red");});

元素的动画执行完成后,再用css()方法为元素添加一条边框。



队列动画

jQuery中,队列动画,指的是元素按照一定的顺序来执行多个动画效果。

$().animate().animate().…….animate()

在jQuery中,队列动画可以是任何动画形式,包括:


(1)显示与隐藏(2)淡入与淡出(3)滑上与滑下(4)自定义动画

$(this).animate({ "width": "150px", "height": "150px"}, 1000).fadeOut(1000).fadeIn(1000);
停止动画

jQuery中,使用

stop()

方法来停止元素正在执行的动画效果。

$().stop(stopAll, goToEnd)


stopAll

表示

是否停止队列动画

。当取值为false时,

仅停止当前动画

;当取值为true时,

停止当前动画以及后面所有队列动画




goToEnd

表示是否将动画

跳转到最终效果状态。



stop()

等价于

stop(false, false)

,仅停止当前动画,

后面的动画还可以继续执行



stop(true)

等价于

stop(true,false)



停止当前动画,并且停止后面的动画



stop(true, true)

停止当前动画

直接跳转该动画最后效果,但不开始下一个动画



stop(false, true)

停止当前动画,

跳到最后一个动画,并且执行最后一个动画

$(this).animate({ "height": "150px" }, 500);
            }, function () {
                $(this).animate({ "height": "50px" }, 500); //移出时返回原状态
            })

使用

hover()

方法定义

鼠标移入和鼠标移出

时的动画效果。当我们快速地移入移出元素时,会发现一个很奇怪的bug:元素会不断地变长变短!也就是说,动画会不断执行,根本停不下来!

在jQuery中,

如果一个动画没有执行完,它就会被添加到“动画队列”中去

。在这个例子中,每一次移入或移出,都会产生一个动画,如果该动画没有被执行完,它就会被添加到动画队列中,然后没有被执行完的动画会继续执行,直到所有动画执行完毕。

解决这类bug的话,我们

只需要在移入或移出动画执行之前加入stop()方法

,就能轻松解决。

$(this).stop().animate({ "height": "150px" }, 500);
}, function () {
    $(this).stop().animate({ "height": "50px" }, 500);    //移出时返回原状态
})



延迟动画

使用**

delay()

**方法来延迟动画的执行。

$().delay(speed)
$("div").click(function () {
                $(this).animate({ "width": "150px" }, 1000)
                     .delay(2000)
                     .animate({ "height": "150px" }, 1000);
            });



判断动画状态

使用

is()

方法来判断元素是否正处于动画状态。如果不处于动画状态,则添加新的动画;如果正处于动画状态,则不添加新的动画。

if(!$().is(":animated"))
{
    //如果不处于动画状态,则添加新的动画
}


:animated

是一个伪类选择器,表示

选取所有正在执行动画的元素

$("figure").hover(function () {
                if (!$(">figcaption", this).is(":animated")) {
                    $(">figcaption", this).animate({ "bottom": "0px" }, 200);
                }
            }, function () {
                if (!$(">figcaption", this).is(":animated")) {
                    $(">figcaption", this).animate({ "bottom": "-30px" }, 200);
                }
            })
<figure>
        <img src="img/ciri.png" alt="">
        <figcaption>《巫师3》之希里</figcaption>
</figure>

这个例子中,

$(">figcaption", this)

表示选取当前元素下面的子元素figcaption,它其实可以等价于

$("figure>figcaption")。



深入理解jQuery动画

所有jQuery动画从本质上来说,都是

通过改变元素的CSS属性值

来实现的。换句话说,jQuery动画其实就是通过将元素的CSS属性从“一个值”在一定时间内平滑地过渡到“另一个值”,从而实现动画效果。

  • (1)显示与隐藏:通过改变display、opacity、width、height来实现。
  • (2)淡入与淡出:通过改变display、opacity来实现。
  • (3)滑上与滑下:通过改变display、height来实现。

    实际上,这三种动画形式原来,本质上也就一个东西——animate()!只不过jQuery把它们封装得更加简单而已。
显示与隐藏
$().hide(500);
$().animate({"width":"0", "height":"0", "opacity":"0.0", "display":"none"},500);

淡入与淡出
$().fadeOut(500);
$().animate({"opacity":"0.0", "display":"none"},500);

滑上与滑下
$().slideUp(500);
$().animate({"height":"0", "display":"none"},500);



版权声明:本文为WDNMde_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。