前端入门(自留)——jquery动画的延迟与停止

113 阅读1分钟

相关知识

jquery方法作用参数举例
delay设置动画队列中两次动画之间的间隔时间(delay函数后的动画被延迟)毫秒数$("#img").delay(2000).fadeIn()
stop停止当前正在运行的动画(即直接完成该动画最终效果),执行下一个动画stopAll:是否清除动画队列
 * false(默认),只停止当前动画,立即执行下一动画
 * true,立即停止整个动画队列
goToEnd:是否立即完成当前动画(是否将当前动画的CSS属性值跳转到目标值)
 * false(默认)下一动画从停止时刻的属性值开始变化
 * true,当下一动画从前一动画的目标值开始变化
$("#img").fadeOut(5000).stop()
finish停止当前动画,删除当前绑定元素的动画队列中的所有动画,并使所有排队的动画的CSS属性跳转到他们的目标值queueName: 动画队列名称,默认为fx$("#img").animate({...}).animate({...}).finish()

效果

  • 延迟动画(delay):动画开始立即右移变大,1s后下移,0.5s后左移变小,1s后上移,0.5s后收起,1s后展开

animate-delay01.gif

  • 停止动画(stop):动画同上,当点击按钮时,停止当前动画直接达到目标值,进行下一步动画

animate-delay02.gif

  • 移除动画(finishOne):点击按钮时,立刻停止并清除第一张图片的动画效果

animate-delay03.gif

  • 移除动画(finishTwo)
    • 先点击finishOne,清除第一张图片的动画效果,再点击finishTwo清除第二张图片的动画效果 animate-delay04.gif
    • 点击按钮时,立刻停止并清除两张图片的动画效果 animate-delay05.gif

注意事项

当点击“finishOne”停止第一张图片的动画,立刻点击“delay动画”,第一张图片会立刻执行新的动画,第二张图片会在第一轮动画执行完成后再执行新一轮的动画,这会导致两张图片动画顺序的不一致。此时点击“stop停止动画”,会对两张图片都有效果。

代码

<!DOCTYPE html>
<html lang="en">

![animate-delay03.gif](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5edc0fd5b7284eb19a8e9bb24bf1522c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzQyNjU4NjY1OTI4:q75.awebp?rk3s=f64ab15b&x-expires=1771501611&x-signature=1jALS8utZeFZpPxEu3ogRCCEPQo%3D)
![animate-delay02.gif](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5e9b0b89a37c4d3db6f1659926068409~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzQyNjU4NjY1OTI4:q75.awebp?rk3s=f64ab15b&x-expires=1771501611&x-signature=%2Bn%2F1N3DxjnfHJGmD%2B82%2FLRQfIQQ%3D)
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jquery-动画停止与延时</title>
    <script type="text/javascript" src="../js/jquery-3.7.1.js"></script>
    <style type="text/css">
        img{
            width: 150px;
            height: 150px;
            margin: 20px;
            position: relative;
        }
    </style>
</head>

<body>
    <div class="button-box">
        <input type="button" value="delay动画" id="delayBtn">
        <input type="button" value="stop停止动画" id="stopBtn">
        <input type="button" value="finishOne" id="finishOneBtn">
        <input type="button" value="finishTwo" id="finishTwoBtn">
    </div>
    <div id="showImg">
        <img src="../images/jquery-animateDelay/1.jpg" alt="">
        <img src="../images/jquery-animateDelay/2.jpg" alt="">
    </div>
    <script type="text/javascript">
        // 延迟动画
        $("#delayBtn").click(function(){
            // 动画队列
            // 右移变大
            $("#showImg img").animate({
                left: '100px',
                width: '+=50px',
                height: '+=100px'
            })
            // 下移
            .delay(1000).animate({
                top: '200px'
            })
            // 左移变小
            .delay(500).animate({
                left: '0px',
                width: '-=50px',
                height: '-=100px'
            })
            // 上移
            .delay(1000).animate({
                top: '0px'
            })
            // 收起
            .delay(500).slideUp("slow")
            // 展开
            .delay(1000).slideDown("fast");
        });

        // stop停止当前正在运行的动画,执行队列中下一个动画
        // 可以清除delay效果
        $("#stopBtn").click(function(){
            $("#showImg img").stop(false,true);
        });

        // finish停止当前动画(第一张图片),并清空动画队列
        $("#finishOneBtn").click(function(){
            $("#showImg img:first").finish();
        })

        // finish停止当前动画(两张图片),并清空动画队列
        $("#finishTwoBtn").click(function(){
            $("#showImg img").finish();
        })
    </script>
</body>

</html>