[jQuery教程]自定义动画(十九)
前面章节主要介绍固定动画方法,本章介绍 animate() 方法可自定义动画,该方法通过 CSS 样式将元素从一个状态改变为另一个状态。通过本章学习让大家自己动手制作相应的动画。
jQuery 中动画 animate(上)
有些复杂的动画通过之前学到的几个动画函数是不能够实现,这时候就需要强大的 animate 方法了
操作一个元素执行 3 秒的淡入动画,对比一下 2 组动画设置的区别
$(elem).fadeOut(3000) $(elem).animate({ opacity:0 },3000)
显而易见,animate 方法更加灵活了,可以精确的控制样式属性从而执行动画。
语法:
.animate( properties ,[ duration ], [ easing ], [ complete ] ) .animate( properties, options )
.animate()方法允许我们在任意的数值的 CSS 属性上创建动画。2 种语法使用,几乎差不多了,唯一必要的属性就是一组 CSS 属性键值对。这组属性和用于设置.css()方法的属性键值对类似,除了属性范围做了更多限制。第二个参数开始可以单独传递多个实参也可以合并成一个对象传递了。
参数分解:
properties:一个或多个 css 属性的键值对所构成的 Object 对象。要特别注意所有用于动画的属性必须是数字的,除非另有说明;这些属性如果不是数字的将不能使用基本的 jQuery 功能。比如常见的,border、margin、padding、width、height、font、left、top、right、bottom、wordSpacing 等等这些都是能产生动画效果的。background-color 很明显不可以,因为参数是 red 或者 GBG 这样的值,非常用插件,否则正常情况下是不能只用动画效果的。注意,CSS 样式使用 DOM 名称(比如 “fontSize”)来设置,而非 CSS 名称(比如 “font-size”)。
特别注意单位,属性值的单位像素(px),除非另有说明。单位 em 和 %需要指定使用。
.animate({ left: 50, width: '50px' opacity: 'show', fontSize: "10em", }, 500);
除了定义数值,每个属性能使用’show’, ‘hide’, 和 ‘toggle’。这些快捷方式允许定制隐藏和显示动画用来控制元素的显示或隐藏。
.animate({ width: "toggle" });
如果提供一个以+= 或 -=开始的值,那么目标值就是以这个属性的当前值加上或者减去给定的数字来计算的。
.animate({ left: '+=50px' }, "slow");
duration 时间
动画执行的时间,持续时间是以毫秒为单位的;值越大表示动画执行的越慢,不是越快。还可以提供’fast’ 和 ‘slow’字符串,分别表示持续时间为 200 和 600 毫秒。
easing 动画运动的算法
jQuery 库中默认调用 swing。如果需要其他的动画算法,请查找相关的插件。
complete 回调
动画完成时执行的函数,这个可以保证当前动画确定完成后发会触发。
具体可以参考下边的代码效果:
CSS 代码:
p { color: red; } div{ width:200px; height: 100px; background-color: yellow; color:red; }
HTML 代码:
<h2>animate(上)</h2> <p>码云笔记,前端博客</p> <div id="aaron">内部动画</div> 点击观察动画效果: <select id="animation"> <option value="1">动画 1</option> <option value="2">动画 2</option> <option value="3">动画 3</option> <option value="4">动画 4</option> </select> <input id="exec" type="button" value="执行动画">
jQuery 代码:
$("#exec").click(function() { var v = $("#animation").val(); var $aaron = $("#aaron"); if (v == "1") { // 数值的单位默认是 px $aaron.animate({ width :300, height :300 }); } else if (v == "2") { // 在现有高度的基础上增加 100px $aaron.animate({ width : "+=100px", height : "+=100px" }); } else if (v == "3") { $aaron.animate({ fontSize: "5em" }, 2000, function() { alert("动画 fontSize 执行完毕!"); }); } else if (v == "4") { //通过 toggle 参数切换高度 $aaron.animate({ width: "toggle" }); } });
jQuery 中动画 animate(下)
animate 在执行动画中,如果需要观察动画的一些执行情况,或者在动画进行中的某一时刻进行一些其他处理,我们可以通过 animate 提供的第二种设置语法,传递一个对象参数,可以拿到动画执行状态一些通知。
.animate( properties, options )
options 参数
- duration – 设置动画执行的时间
- easing – 规定要使用的 easing 函数,过渡使用哪种缓动函数
- step:规定每个动画的每一步完成之后要执行的函数
- progress:每一次动画调用的时候会执行这个回调,就是一个进度的概念
- complete:动画完成回调
其中最关键的一点就是:
如果多个元素执行动画,回调将在每个匹配的元素上执行一次,不是作为整个动画执行一次
列出常用的方式:
$('#elem').animate({ width: 'toggle', height: 'toggle' }, { duration: 5000, specialEasing: { width: 'linear', height: 'easeOutBounce' }, complete: function() { $(this).after('Animation complete.'); } });
jQuery 中停止动画 stop
动画在执行过程中是允许被暂停的,当一个元素调用.stop()方法,当前正在运行的动画(如果有的话)立即停止
语法:
.stop( [clearQueue ], [ jumpToEnd ] ) .stop( [queue ], [ clearQueue ] ,[ jumpToEnd ] )
stop 还有几个可选的参数,简单来说可以这 3 种情况:
- .stop(); 停止当前动画,点击在暂停处继续开始;
- .stop(true); 如果同一元素调用多个动画方法,尚未被执行的动画被放置在元素的效果队列中。这些动画不会开始,直到第一个完成。当调用.stop()的时候,队列中的下一个动画立即开始。如果 clearQueue 参数提供 true 值,那么在队列中的动画其余被删除并永远不会运行;
- .stop(true,true); 当前动画将停止,但该元素上的 CSS 属性会被立刻修改成动画的目标值。
简单的说:参考下面代码
$("#aaron").animate({ height: 300 }, 5000) $("#aaron").animate({ width: 300 }, 5000) $("#aaron").animate({ opacity: 0.6 }, 2000)
- stop():只会停止第一个动画,第二个第三个继续;
- stop(true):停止第一个、第二个和第三个动画;
- stop(true ture):停止动画,直接跳到第一个动画的最终状态。
码云笔记 » [jQuery教程]自定义动画(十九)