jquery自定义动画animate()

《1》

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="jquery-1.11.2.js"></script>
    <style type="text/css">
        .test {
            width: 30px;
            height: 30px;
            margin-right: 10px;
            float: left;
            background-color: orange;
            line-height: 30px;
            text-align: center;
        }

        #box {
            width: 100px;
            height: 100px;
            background-color: red;

            position:absolute;
        }

        #pox {
            width: 100px;
            height: 100px;
            background-color: green;
            position: absolute;
            top: 200px;
        }
    </style>
</head>
<body>
    <input type="button" class="button" value="按钮" />
    <div id="box">box</div>
    <div id="pox">pox</div>
</body>
</html>
<script type="text/javascript">
    $(function () {

        //一个CSS 变化就是一个动画效果,下面的例子中,已经有四个CSS 变化(分别是width,height,opacity,fontSize的变化)实现了多重动画同步运动的效果。(所谓多重同步运动的效果就是,这四个css属性的值在同一时间,同时变化)

        $(".button").click(function () {
            $("#box").animate({
                width: "300px",
                height: "200px",
                opacity:0.5, //透明度为0.5  注:透明度的值在0-1之间
                fontSize:"200px", //字体大小设为30px
            }) //第一个参数:是一个对象,他是键值对的css
        })

        //通过回调函数现实队列动画。(效果就是:首先#box的宽度变为300px 然后高度变为200px,然后透明度变为50%,字体大小变为150px 最后弹出一个“完毕”)
        $(".button").click(function () {
            $("#box").animate({ width: "300px"}, 1000, function(){
                $("#box").animate({height:"200px"},1000,function(){
                    $("#box").animate({opacity:0.5},1000,function(){
                        $("#box").animate({fontSize:"150px"},1000,function(){alert("完毕")})
                    });
                });
            });
        })

        //在同一个元素的基础上,使用链式调用也可以实现列队动画
        $(".button").click(function () {
            $("#box").animate({ width: "300px" }, 1000).animate({ height: "200px" }, 1000).animate({ opacity: 0.5 }, 1000).animate({ fontSize: "150px" }, 1000)
        });

        //在同一个元素的基础上,通过依次顺序实现列队动画 (如果有多个元素则不能实现,两个元素之间的动画是同步的。)
        $(".button").click(function () {
            $("#box").animate({ width: "300px" }, 1000);
            $("#box").animate({ height: "200px" }, 1000);
            $("#box").animate({ opacity: 0.5 }, 1000);
            $("#box").animate({ fontSize: "150px" }, 1000);

        })

        //如果有多个元素则不能实现 不信请看下面代码  (通过执行下面这段代码,我们发现#box 与#pox这两个元素的动画是同时执行的,属于#box的那两段动画是先执行 $("#box").animate({ width: "300px" }, 1000)然后再执行("#box").animate({ opacity: 0.5 }, 1000); 他们两个有列队动画的效果) 而属于#pox的两段动画是先执行 $("#pox").animate({ height: "200px" }, 1000)然后再执行 $("#pox").animate({ fontSize: "150px" }, 1000)他们两个有列队动画的效果。 但是 $("#box").animate({ width: "300px" }, 1000)与$("#pox").animate({ height: "200px" }, 1000); 同时执行的。 $("#box").animate({ opacity: 0.5 }, 1000)与$("#pox").animate({ fontSize: "150px" }, 1000)是同时执行的。
        //前面说了这么一大堆 其实就是:
        //#box的第一条和第三条是列队动画
        //#pox的第二条和第四条是列队动画

        //#box的第一条和#pox的第二条是同步动画
        //#box的第三条和#pox的第四条是同步动画

        $(".button").click(function () {
            $("#box").animate({ width: "300px" }, 1000);
            $("#pox").animate({ height: "200px" }, 1000);
            $("#box").animate({ opacity: 0.5 }, 1000);
            $("#pox").animate({ fontSize: "150px" }, 1000);
        })

        //那我们现在的需求是:不管你有几个元素,我都要他们依次实现列队动画效果。(测试了一下,只能用这种回调函数嵌套的方式来实现了)

        $(".button").click(function () {
            $("#box").animate({ width: "300px" }, 1000, function () {
                $("#pox").animate({ height: "200px" }, 1000, function () {
                    $("#box").animate({ height: "200px"}, 1000, function () {
                        $("#pox").animate({ fontSize: "150px" }, 1000);
                    })
                })
            })
        })

        //我们知道动画可以有列队效果。但是一个普通的css(比如改变背景颜色)如果实现与动画进行列队呢?
        $(".button").click(function () {
            $("#box").slideUp(1000).slideDown(1000).css("background", "yellow")
        })

        //本来我们是想要实现队列动画的,也就是先让#box滑动隐藏,然后再让它滑动显示,最后让它改变颜色。可是我们运行这段呢代码,我们看到第一时间就执行了css("background","yellow")这段代码。
        //通过上面的代码我们了解到 css()方法不是动画方法,会和第一个动画同时执行。也就是说非动画不能列队。

        //现在问题又来了。我现在想要实现列队动画,也想非动画和动画一起列队怎么办呢? 其实我们可以使用回调函数实现的。请看下面的代码

        $(".button").click(function () {
            $("#box").slideUp(1000).slideDown(1000, function () {
                $(this).css("background", "yellow")
            }).hide(3000);
        })

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

        $(".button").click(function () {
            $("#box").slideUp(1000).slideDown(1000).queue(function () {
                $(this).css("background", "yellow");
            })
        })

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

        //链式编程实现队列动画
        $(".button").click(function () {
            $("#box").slideUp(1000).slideDown(1000).queue(function (next) { //这个next是一个函数
                $(this).css("background", "yellow");
                next();
            }).hide(1000);
        });

        //顺序编程实现队列动画  我们看到使用顺序调用的列队,逐个执行,非常清晰
        $(".button").click(function () {
            $("#box").slideUp(1000);
            $("#box").slideDown(1000);
            $("#box").queue(function (next) {
                $(this).css("background", "yellow");
                next();
            });
            $("#box").hide(1000);
        });

        //因为next 函数是jQuery1.4 版本以后才出现的,而之前我们普遍使用的是.dequeue()方法。意思为执行下一个元素列队中的函数。
        //使用.dequeue()方法执行下一个函数动画
        //$(".button").click(function () {
        //    $('#box').slideUp('slow').slideDown('slow').queue(function () {
        //        $(this).css('background', 'orange');
        //        $(this).dequeue(); //相当于上面的那句next() 只是这里的function()括号里不像上面那样需要传递一个next函数
        //    }).hide(1000)
        //});

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

        //清理动画列队

        //假如我想在执行完第二个动画那就就不再执行了。那么只要在第二个动画的回调函数哪里添加一句$(this).clearQueue()就可以停止后面的列队动画了
        $(".button").click(function () {

            $("#box").slideUp(1000, getQueueCount).slideDown(1000, function () { $(this).clearQueue()}).queue(function (next) { $(this).css("background", "yellow"); next() }).hide(1000);
        })

        //那么如果获取列队动画的长度呢?  

        function getQueueCount() {
            alert( $("#box").queue("fx").length);  //获取当前列队的长度,fx 是默认列队的参数
        }

        $(".button").click(function () {
            $("#box").animate({
                left: "300px"    //要想使用left top bottom  right这种方向性的属性 先必须对"#box元素设置CSS 绝对定位
            })
        })

        //自定义动画中,每次开始运动都必须是初始位置或初始状态,而有时我们想通过当前位置或状态下再进行动画。jQuery 提供了自定义动画的累加、累减功能。
        $(".button").click(function () {
            $("#box").animate({
                left:"+=50px"  //每点击一次.button按钮,left就往左移动50px
            })
        })
    });
</script>

.

时间: 2024-08-09 15:08:58

jquery自定义动画animate()的相关文章

jQuery自定义动画

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>jQuery自定义动画</title> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script

自定义动画animate()

在上一节总结了一下3中类型的动画,其中show()和hide()方法会同时修改元素的多个属性,fadeOut()和fadeIn()方法只会修改元素的不透明度,而slideDown()和slideUp()方法只会改变元素的高度,但是很多情况下,需要对动画有更多控制,这些方法无法满足用户的需求,这时,jQuery中的自定义动画animate()就可以用来解决这些高级的动画问题了. 1,语法结构 首先来看一下该方法的语法结构:animate(params,speed,callback) params:

jQuery中动画animate(下)

jQuery中动画animate(下) animate在执行动画中,如果需要观察动画的一些执行情况,或者在动画进行中的某一时刻进行一些其他处理,我们可以通过animate提供的第二种设置语法,传递一个对象参数,可以拿到动画执行状态一些通知 .animate( properties, options ) options参数 duration - 设置动画执行的时间 easing - 规定要使用的 easing 函数,过渡使用哪种缓动函数 step:规定每个动画的每一步完成之后要执行的函数 prog

jQuery中动画animate(上)

jQuery中动画animate(上) 有些复杂的动画通过之前学到的几个动画函数是不能够实现,这时候就需要强大的animate方法了 操作一个元素执行3秒的淡入动画,对比一下2组动画设置的区别 $(elem).fadeOut(3000) $(elem).animate({ opacity:0 },3000) 显而易见,animate方法更加灵活了,可以精确的控制样式属性从而执行动画 语法: .animate( properties ,[ duration ], [ easing ], [ com

自定义动画animate可以操作css样式属性总结

自定义动画animate可以操作css样式属性总结 backgroundPosition * borderWidth * borderBottomWidth * borderLeftWidth * borderRightWidth * borderTopWidth * borderSpacing * marginBottom * marginLeft * marginRight * marginTop * outlineWidth * paddingBottom * paddingLeft *

jquery之动画animate底层原理猜测

jQuery中animate()方法使用时,如果想像一般的程序那样在程序进行到最后的时候执行一句条件语句变量的更变: html代码: <div id="dv"> <div id="d2"></div> </div> <button id="move">移动</button> css:div{ display:none; position:relative; left:0px;

JavaScript之jQuery-5 jQuery 动画效果(隐藏和显示、自定义动画、并发与排列效果)

一.jQuery 隐藏和显示 基本显示.隐藏效果 - show() / hide() - 作用: 通过同时改变元素的宽度和高度来实现显示或隐藏 - 用法: $obj.show(执行时间,回调函数); 执行时间:slow,normal,fast或毫秒数 回调函数:动画执行完毕之后要执行的函数 滑动式动画效果 - slideDown() / slideUp() - 作用: 通过改变高度来实现显示或者隐藏的效果 - 用法同 show() / hidden() 淡入淡出式动画效果 - fadeIn()

jquery中的三组基础动画以及自定义动画

Jquery基础三组动画 1.show(),hide(),toggle() 改变宽高透明度 2.fadeIn(),fadeout(), fadeToggle() 改变透明度(淡入,淡出效果) 3.slideDown(),slideUp(),slideToggle() 改变高度 语法: show(time,callback) time时间,单位是毫秒 回调函数,当动画执行完成后执行 自定义动画 animate 参数1:比传参数 ,样式对象 参数2:动画时间,默认 400ms (fast,norma

锋利的jQuery读书笔记---jQuery中动画

jQuery中的动画: 1.show和hide 2.fadeIn和fadeOut 3.slideUp和slideDown <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <script type="text/javascript" src="../../js/jquery-2.1.3.js">