Skip to content

jQuery 动画和效果

jQuery 提供了丰富的内置动画效果,可以让网页元素产生平滑的过渡和视觉效果。这些动画功能简化了复杂的 JavaScript 动画编程,使开发者能够轻松创建吸引人的用户界面。本章将详细介绍 jQuery 的动画和效果功能。

基本动画方法

1. show() 和 hide() 方法

显示和隐藏元素的基本方法:

javascript
// 显示元素
$('#myElement').show();

// 隐藏元素
$('#myElement').hide();

// 带动画效果的显示和隐藏
$('#myElement').show(1000); // 1000毫秒内显示
$('#myElement').hide('slow'); // 慢速隐藏
$('#myElement').show('fast'); // 快速显示

// 带回调函数的动画
$('#myElement').hide(1000, function() {
    console.log('元素隐藏完成');
});

2. toggle() 方法

切换元素的显示和隐藏状态:

javascript
// 切换显示和隐藏
$('#myElement').toggle();

// 带动画效果的切换
$('#myElement').toggle(1000);

// 带回调函数的切换
$('#myElement').toggle('slow', function() {
    console.log('切换完成');
});

滑动动画

1. slideDown() 方法

以滑动方式显示元素:

javascript
// 滑动显示元素
$('#myElement').slideDown();

// 带时间参数的滑动显示
$('#myElement').slideDown(1000);

// 带回调函数的滑动显示
$('#myElement').slideDown('slow', function() {
    console.log('滑动显示完成');
});

2. slideUp() 方法

以滑动方式隐藏元素:

javascript
// 滑动隐藏元素
$('#myElement').slideUp();

// 带时间参数的滑动隐藏
$('#myElement').slideUp(1000);

// 带回调函数的滑动隐藏
$('#myElement').slideUp('fast', function() {
    console.log('滑动隐藏完成');
});

3. slideToggle() 方法

切换元素的滑动显示和隐藏:

javascript
// 切换滑动显示和隐藏
$('#myElement').slideToggle();

// 带时间参数的切换
$('#myElement').slideToggle(1000);

// 带回调函数的切换
$('#myElement').slideToggle('slow', function() {
    console.log('滑动切换完成');
});

淡入淡出动画

1. fadeIn() 方法

以淡入方式显示元素:

javascript
// 淡入显示元素
$('#myElement').fadeIn();

// 带时间参数的淡入显示
$('#myElement').fadeIn(1000);

// 带回调函数的淡入显示
$('#myElement').fadeIn('slow', function() {
    console.log('淡入显示完成');
});

2. fadeOut() 方法

以淡出方式隐藏元素:

javascript
// 淡出隐藏元素
$('#myElement').fadeOut();

// 带时间参数的淡出隐藏
$('#myElement').fadeOut(1000);

// 带回调函数的淡出隐藏
$('#myElement').fadeOut('fast', function() {
    console.log('淡出隐藏完成');
});

3. fadeToggle() 方法

切换元素的淡入和淡出:

javascript
// 切换淡入和淡出
$('#myElement').fadeToggle();

// 带时间参数的切换
$('#myElement').fadeToggle(1000);

// 带回调函数的切换
$('#myElement').fadeToggle('slow', function() {
    console.log('淡入淡出切换完成');
});

4. fadeTo() 方法

将元素淡入到指定的不透明度:

javascript
// 淡入到指定不透明度
$('#myElement').fadeTo(1000, 0.5); // 1000毫秒内淡入到50%不透明度

// 带回调函数的淡入
$('#myElement').fadeTo('slow', 0.3, function() {
    console.log('淡入到指定不透明度完成');
});

自定义动画

animate() 方法

创建自定义动画效果:

javascript
// 基本语法
$(selector).animate({params}, speed, callback);

// 移动元素
$('#myElement').animate({
    left: '250px',
    top: '100px'
}, 1000);

// 改变尺寸
$('#myElement').animate({
    width: '300px',
    height: '200px'
}, 'slow');

// 改变多个 CSS 属性
$('#myElement').animate({
    opacity: '0.5',
    left: '250px',
    height: '150px',
    width: '150px'
}, 2000);

// 使用相对值
$('#myElement').animate({
    left: '+=150px',
    top: '+=50px'
}, 1000);

// 使用预定义值
$('#myElement').animate({
    height: 'toggle'
}, 1000);

队列动画

jQuery 动画会自动排队执行:

javascript
// 动画队列示例
$('#myElement')
    .animate({ left: '250px' }, 1000)
    .animate({ top: '100px' }, 1000)
    .animate({ width: '200px' }, 1000)
    .animate({ height: '200px' }, 1000);

动画选项

animate() 方法支持更多选项:

javascript
// 使用选项对象
$('#myElement').animate({
    width: '300px',
    height: '200px'
}, {
    duration: 2000,
    easing: 'swing', // 或 'linear'
    complete: function() {
        console.log('动画完成');
    },
    step: function(now, fx) {
        console.log('动画步骤:' + now);
    }
});

动画控制

1. stop() 方法

停止当前动画:

javascript
// 停止当前动画
$('#myElement').stop();

// 停止当前动画并跳到结束状态
$('#myElement').stop(true);

// 停止所有动画并跳到结束状态
$('#myElement').stop(true, true);

2. finish() 方法

停止所有动画并跳到结束状态:

javascript
// 完成所有动画
$('#myElement').finish();

3. delay() 方法

延迟执行动画:

javascript
// 延迟执行动画
$('#myElement')
    .delay(1000)
    .fadeIn(1000)
    .delay(2000)
    .fadeOut(1000);

动画缓动函数

jQuery 提供了两种内置的缓动函数:

1. swing(默认)

开始和结束时较慢,中间较快:

javascript
$('#myElement').animate({
    left: '250px'
}, 1000, 'swing');

2. linear

匀速动画:

javascript
$('#myElement').animate({
    left: '250px'
}, 1000, 'linear');

3. 自定义缓动函数

通过插件可以使用更多缓动函数:

javascript
// 需要引入 jQuery UI 或其他缓动插件
$('#myElement').animate({
    left: '250px'
}, 1000, 'easeInOutQuad');

完整示例

以下是一个展示 jQuery 动画和效果的完整示例:

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jQuery 动画和效果示例</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        .container {
            border: 1px solid #ccc;
            padding: 20px;
            margin: 10px 0;
        }
        .animation-box {
            width: 100px;
            height: 100px;
            background-color: #3498db;
            margin: 20px 0;
            position: relative;
            cursor: pointer;
        }
        .control-panel {
            margin: 10px 0;
            padding: 10px;
            background-color: #f8f9fa;
            border-radius: 5px;
        }
        button {
            margin: 5px;
            padding: 8px 15px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
        .demo-element {
            padding: 10px;
            margin: 10px 0;
            background-color: #e9ecef;
            border-radius: 4px;
        }
    </style>
</head>
<body>
    <h1>jQuery 动画和效果示例</h1>
    
    <div class="container">
        <h2>基本显示/隐藏动画</h2>
        <div class="demo-element" id="basicElement">
            基本显示/隐藏元素
        </div>
        <div class="control-panel">
            <button id="showBasic">显示</button>
            <button id="hideBasic">隐藏</button>
            <button id="toggleBasic">切换</button>
        </div>
    </div>
    
    <div class="container">
        <h2>滑动动画</h2>
        <div class="demo-element" id="slideElement">
            滑动动画元素
        </div>
        <div class="control-panel">
            <button id="slideDown">滑下显示</button>
            <button id="slideUp">滑上隐藏</button>
            <button id="slideToggle">滑动切换</button>
        </div>
    </div>
    
    <div class="container">
        <h2>淡入淡出动画</h2>
        <div class="demo-element" id="fadeElement">
            淡入淡出动画元素
        </div>
        <div class="control-panel">
            <button id="fadeIn">淡入显示</button>
            <button id="fadeOut">淡出隐藏</button>
            <button id="fadeToggle">淡入淡出切换</button>
            <button id="fadeTo">淡入到50%</button>
        </div>
    </div>
    
    <div class="container">
        <h2>自定义动画</h2>
        <div class="animation-box" id="customElement"></div>
        <div class="control-panel">
            <button id="moveElement">移动元素</button>
            <button id="resizeElement">改变尺寸</button>
            <button id="colorElement">改变颜色</button>
            <button id="complexAnimation">复杂动画</button>
            <button id="stopAnimation">停止动画</button>
            <button id="resetElement">重置元素</button>
        </div>
    </div>
    
    <div class="container">
        <h2>动画队列</h2>
        <div class="animation-box" id="queueElement"></div>
        <div class="control-panel">
            <button id="startQueue">开始队列动画</button>
            <button id="delayQueue">延迟队列动画</button>
            <button id="stopQueue">停止队列动画</button>
        </div>
    </div>
    
    <script>
        $(function() {
            // 基本显示/隐藏动画
            $('#showBasic').click(function() {
                $('#basicElement').show(1000);
            });
            
            $('#hideBasic').click(function() {
                $('#basicElement').hide(1000);
            });
            
            $('#toggleBasic').click(function() {
                $('#basicElement').toggle(1000);
            });
            
            // 滑动动画
            $('#slideDown').click(function() {
                $('#slideElement').slideDown(1000);
            });
            
            $('#slideUp').click(function() {
                $('#slideElement').slideUp(1000);
            });
            
            $('#slideToggle').click(function() {
                $('#slideElement').slideToggle(1000);
            });
            
            // 淡入淡出动画
            $('#fadeIn').click(function() {
                $('#fadeElement').fadeIn(1000);
            });
            
            $('#fadeOut').click(function() {
                $('#fadeElement').fadeOut(1000);
            });
            
            $('#fadeToggle').click(function() {
                $('#fadeElement').fadeToggle(1000);
            });
            
            $('#fadeTo').click(function() {
                $('#fadeElement').fadeTo(1000, 0.5);
            });
            
            // 自定义动画
            $('#moveElement').click(function() {
                $('#customElement').animate({
                    left: '+=100px',
                    top: '+=50px'
                }, 1000);
            });
            
            $('#resizeElement').click(function() {
                $('#customElement').animate({
                    width: '+=50px',
                    height: '+=50px'
                }, 1000);
            });
            
            $('#colorElement').click(function() {
                $('#customElement').animate({
                    backgroundColor: '#e74c3c'
                }, 1000);
            });
            
            $('#complexAnimation').click(function() {
                $('#customElement')
                    .animate({ left: '200px' }, 500)
                    .animate({ top: '100px' }, 500)
                    .animate({ width: '150px' }, 500)
                    .animate({ height: '150px' }, 500)
                    .animate({ opacity: '0.5' }, 500);
            });
            
            $('#stopAnimation').click(function() {
                $('#customElement').stop();
            });
            
            $('#resetElement').click(function() {
                $('#customElement').stop(true, true).removeAttr('style');
            });
            
            // 动画队列
            $('#startQueue').click(function() {
                $('#queueElement')
                    .animate({ left: '300px' }, 1000)
                    .animate({ top: '100px' }, 1000)
                    .animate({ width: '200px' }, 1000)
                    .animate({ height: '200px' }, 1000);
            });
            
            $('#delayQueue').click(function() {
                $('#queueElement')
                    .delay(500)
                    .animate({ left: '300px' }, 1000)
                    .delay(500)
                    .animate({ top: '100px' }, 1000)
                    .delay(500)
                    .animate({ width: '200px' }, 1000);
            });
            
            $('#stopQueue').click(function() {
                $('#queueElement').stop();
            });
            
            // 为动画元素添加点击事件
            $('.animation-box').click(function() {
                $(this).animate({
                    backgroundColor: '#9b59b6'
                }, 300).animate({
                    backgroundColor: '#3498db'
                }, 300);
            });
        });
    </script>
</body>
</html>

通过本章的学习,你应该掌握了如何使用 jQuery 创建各种动画和效果。在下一章中,我们将学习 jQuery 的 AJAX 功能和异步请求处理。