jQuery - 动画



让我们学习如何使用 jQuery 的 animate() 方法在网页或其他 jQuery(Javascript)应用程序上创建自定义动画。

jQuery animate() 方法

jQuery 的 animate() 方法用于通过更改 DOM 元素的 CSS 数值属性(例如,宽度、高度、边距、填充、不透明度、顶部、左侧等)来创建自定义动画。

以下是 animate() 方法的简单语法

$(selector).animate({ properties }, [speed, callback] );
jQuery animate() 方法不能用于动画非数值属性,例如颜色或背景颜色等。尽管您可以使用 jQuery 插件 jQuery.Color 来动画此类属性。

您可以应用任何 jQuery 选择器来选择任何 DOM 元素,然后应用 jQuery animate() 方法对其进行动画处理。以下是所有参数的描述,这些参数使您可以完全控制动画:

  • 属性 (properties) − 一个必需参数,定义要进行动画处理的 CSS 属性,这是调用中唯一必需的参数。

  • 速度 (speed) − 一个可选字符串,表示三种预定义速度之一(“slow”、“normal”或“fast”)或运行动画的毫秒数(例如 1000)。

  • 回调函数 (callback) − 一个可选参数,表示在动画完成时要执行的函数。

动画先决条件

(a) - animate() 方法不会将隐藏元素作为效果的一部分显示出来。例如,给定 $(selector).hide().animate({height: "20px"}, 500),动画将运行,但元素将保持隐藏状态。

(b) - 要将 DOM 元素的位置作为动画的一部分进行操作,首先需要将其位置设置为 relativefixedabsolute,因为默认情况下,所有 HTML 元素都具有 static 位置,并且无法使用 animate() 方法移动它们。

示例

以下示例演示如何使用 animate() 方法将一个 <div> 元素向右移动,直到其 left 属性达到 250px。接下来,当我们单击按钮时,相同的 <div> 元素将返回到其初始位置。

<!doctype html>
<html>
<head>
<title>The jQuery Example</title>
<script src = "https://tutorialspoint.com/jquery/jquery-3.6.0.js"></script>
<script>
$(document).ready(function() {
   $("#right").click(function(){
      $("div").animate({left: '250px'});
   });
   $("#left").click(function(){
      $("div").animate({left: '0px'});
   });
});
</script>
<style>
   #left, #right{margin:3px;border:2px solid #666; height:30px; width:100px;cursor:pointer;}
   #box{position:relative;margin:3px;padding:12px;border:2px solid #666;  height:100px; width:180px;}
</style>
</head>
<body>
   <p>Click on Left or Right button to see the result:</p>

   <div id="box"  style="background-color:#9c9cff;">This is Box</div>
   <button id="right" style="background-color:#fb7c7c;">Right Move</button>
   <button id="left" style="background-color:#93ff93;">Left Move</button>
</body>
</html>

具有自定义速度的动画

我们可以使用不同的速度来动画 DOM 元素的不同 CSS 数值属性(例如,宽度、高度或左侧)。

示例

让我们重写上面的示例,我们将使用 1000 毫秒的速度参数来动画 <div> 的向右移动,并使用 5000 毫秒的速度参数来动画向左移动。

<!doctype html>
<html>
<head>
<title>The jQuery Example</title>
<script src = "https://tutorialspoint.com/jquery/jquery-3.6.0.js"></script>
<script>
$(document).ready(function() {
   $("#right").click(function(){
      $("div").animate({left: '250px'}, 1000);
   });
   $("#left").click(function(){
      $("div").animate({left: '0px'}, 5000);
   });
});
</script>
<style>
   #left, #right{margin:3px;border:2px solid #666; height:30px; width:100px;cursor:pointer;}
   #box{position:relative;margin:3px;padding:12px;border:2px solid #666;  height:100px; width:180px;}
</style>
</head>
<body>
   <p>Click on Left or Right button to see the result:</p>

   <div id="box"  style="background-color:#9c9cff;">This is Box</div>
   <button id="right" style="background-color:#fb7c7c;">Right Move</button>
   <button id="left" style="background-color:#93ff93;">Left Move</button>
</body>
</html>

使用预定义值的动画

我们可以使用字符串 'show''hide''toggle' 作为 CSS 数值属性的值。

示例

以下是一个示例,我们使用两个按钮将元素的 left 属性设置为 hideshow

请注意,使用这些值设置任何数值 CSS 属性都会产生相同的结果。例如,如果您将元素的宽度或高度设置为 hide,那么它将隐藏元素,无论您设置的是其宽度属性还是高度属性。
<!doctype html>
<html>
<head>
<title>The jQuery Example</title>
<script src = "https://tutorialspoint.com/jquery/jquery-3.6.0.js"></script>
<script>
$(document).ready(function() {
   $("#right").click(function(){
      $("div").animate({left: 'hide'});
   });
   $("#left").click(function(){
      $("div").animate({left: 'show'});
   });
});
</script>
<style>
   #left, #right{margin:3px;border:2px solid #666; height:30px; width:100px;cursor:pointer;}
   #box{position:relative;margin:3px;padding:12px;border:2px solid #666;  height:100px; width:180px;}
</style>
</head>
<body>
   <p>Click on Left or Right button to see the result:</p>

   <div id="box"  style="background-color:#9c9cff;">This is Box</div>
   <button id="right" style="background-color:#fb7c7c;">Right Move</button>
   <button id="left" style="background-color:#93ff93;">Left Move</button>
</body>
</html>

具有多个属性的动画

jQuery animate() 允许我们同时动画元素的多个 CSS 属性。

示例

以下是一个动画 <div> 元素多个 CSS 属性的示例。当我们单击向右移动按钮时,此 <div> 开始向右移动,直到其 left 属性值为 250px,同时元素的不透明度降低到 0.2,并且框的宽度和高度减小到 100px。接下来,当我们单击向左移动按钮时,此框将返回到其初始位置和大小。

<!doctype html>
<html>
<head>
<title>The jQuery Example</title>
<script src = "https://tutorialspoint.com/jquery/jquery-3.6.0.js"></script>
<script>
$(document).ready(function() {
   $("#right").click(function(){
      $("div").animate({left: '250px', width:'100px', height:'100px', opacity:0.2});
   });
   $("#left").click(function(){
      $("div").animate({left: '0px',width:'180px', height:'100px', opacity:1.0});
   });
});
</script>
<style>
   #left, #right{margin:3px;border:2px solid #666; height:30px; width:100px;cursor:pointer;}
   #box{position:relative;margin:3px;padding:12px;border:2px solid #666;  height:100px; width:180px;}
</style>
</head>
<body>
   <p>Click on Left or Right button to see the result:</p>

   <div id="box"  style="background-color:#9c9cff;">This is Box</div>
   <button id="right" style="background-color:#fb7c7c;">Right Move</button>
   <button id="left" style="background-color:#93ff93;">Left Move</button>
</body>
</html>

具有队列功能的动画

考虑这样一种情况:您需要应用多个动画,这意味着您需要一次又一次地调用 animate() 方法。在这种情况下,jQuery 通过先进先出 (FIFO) 队列处理这些动画请求,并允许根据您的创意创建有趣的动画。

示例

以下是一个示例,我们调用 animate() 方法 4 次,将 <div> 依次带到多个方向。

<!doctype html>
<html>
<head>
<title>The jQuery Example</title>
<script src="https://tutorialspoint.com/jquery/jquery-3.6.0.js"></script>
<script>
$(document).ready(function() {
   $("button").click(function(){
      $("div").animate({left: '250px'});
      $("div").animate({top: '100px'});
      $("div").animate({left: '0px'});
      $("div").animate({top: '0px'});
   });
});
</script>
<style>
   button {margin:3px;border:2px solid #666; height:30px; width:180px;cursor:pointer;}
   #box{position:relative;margin:3px;padding:2px;border:2px solid #666;  height:30px; width:170px;}
</style>
</head>
<body>
   <p>Click on Start Animation button to see the result:</p>

   <div id="box"  style="background-color:#9c9cff;">This is Box</div>
   <button style="background-color:#93ff93;">Start Animation</button>
</body>
</html>

jQuery 效果参考

您可以在以下页面获取所有 jQuery 效果方法的完整参考:jQuery 效果参考

广告