深入学习jQuery动画控制
前面的话
jQuery动画可以使用fade、hide、slide等方法实现基本动画效果,可以使用animate实现自定义动画,甚至可以使用queue实现动画队列。但是,却缺少了对动画控制的介绍。动画产生后,描述动画状态、进行动画延迟、操作动画暂停等都是很重要的功能。本文将详细介绍jQuery动画控制
动画状态
当用户快速在某个元素多次执行动画时,会造成动画累积的现象。这时,就需要引入动画状态这个概念。判断元素是否处于动画状态中,如果处于,则不添加新动画
is(':animated')
使用is(':animated')方法来判断元素是否处于动画状态
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">按钮一</button>
<button id="btn2">按钮二</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn1').click(function(event){
$('#box').animate({'left':'+=100px'});
});
$('#btn2').click(function(event){
if(!$('#box').is(':animated')){
$('#box').animate({'left':'+=100px'});
}
});
</script>
停止动画
【stop()】
stop()方法用于停止匹配元素当前正在运行的动画
stop([queue][,clearQueue][,jumpToEnd])
stop()方法可以接受3个可选参数,第一个参数queue表示停止动画队列的名称;第二个参数clearQueue表示是否清空队列中的动画,默认值为false;第三个参数jumpToEnd表示是否当前动画立即完成,默认值为false
【1】当stop()方法不接受任何参数时,将立刻停止当前动画
对于hover动画效果来说,经常出现用户把光标移入元素时出发触发动画效果,但当前动画没有结束时,用户已经将光标移出元素。这样移入移出过快会导致动画效果延迟
此时,只要在光标移入、移出动画之前加入stop()方法就可以结束当前动画,并立即执行队列中下一个动画
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue">未设置stop的hover动画效果</div>
<div id="box1" style="position:relative;height: 100px;width: 300px;background-color: lightgreen">设置stop的hover动画效果</div>
<script>
$('#reset').click(function(){
history.go();
})
$('#box').hover(function(event){
$(this).animate({'width':'400px'})
},function(){
$(this).animate({'width':'300px'})
});
$('#box1').hover(function(event){
$(this).stop().animate({'width':'400px'})
},function(){
$(this).stop().animate({'width':'300px'})
});
</script>
【2】stop()参数clearQueue表示是否清空队列中的动画,默认值为false
当设置该参数为true时,则不仅停止当前动画,而且会清空队列中动画
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn">开始动画</button>
<button id="btn1">停止当前动画</button>
<button id="btn2">停止当前及后续动画</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px'},1000).animate({'width':'200px'},1000);
$('#box').animate({'left':'0'},1000).animate({'width':'100px'},1000);
});
$('#btn1').click(function(event){
$('#box').stop();
})
$('#btn2').click(function(event){
$('#box').stop(true);
})
</script>
【3】stop()参数jumpToEnd表示是否当前动画立即完成,默认值为false
当该参数设置为true时,当前动画立即完成
stop()相当于stop(false,false)表示停止执行当前动画,后续动画接着进行
stop(true,false)表示停止执行当前动画,后续动画不再进行
stop(false,true)表示当前动画立即完成,后续动画接着进行
stop(true,true)表示当前动画立即完成,后续动画不再进行
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<input id="btn" type="button" value="开始动画">
<button>stop()</button>
<button>stop(true,false)</button>
<button>stop(false,true)</button>
<button>stop(true,true)</button>
<input id="reset" type="button" value="恢复">
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px'},1000).animate({'width':'200px'},1000);
$('#box').animate({'left':'0'},1000).animate({'width':'100px'},1000);
});
$('button').click(function(event){
jQuery.globalEval("$('#box')." + $(this).html());
})
</script>
【finish()】
finish()方法是另一种停止动画的方法,它可以停止当前正在运行的动画,删除所有排队的动画,并完成匹配元素所有的动画
finish([queue])
finish()方法可以接受一个可选参数queue表示停止动画队列的名称
finish()方法和stop(true,true)很相似,stop(true,true)将清除队列,并且目前的动画跳转到其最终值。但是,不同的是,finish()会导致所有排队的动画的CSS属性跳转到他们的最终值
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<input id="btn" type="button" value="开始动画">
<button>finish()</button>
<button>stop(true,true)</button>
<input id="reset" type="button" value="恢复">
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn').click(function(event){
$('#box').animate({'left':'100px'},1000).animate({'width':'200px'},1000);
$('#box').animate({'left':'0'},1000).animate({'width':'100px'},1000);
});
$('button').click(function(event){
jQuery.globalEval("$('#box')." + $(this).html());
})
</script>
动画延迟
delay()方法可以用来设置一个延时来推迟执行队列中后续的项
delay(duration[,queueName])
duration是delay()方法的必须参数,用于设定下个队列推迟执行的时间,持续时间是以毫秒为单位的,默认值为'normal',代码400毫秒的延时;'fast'和'slow'分别代表200和600毫秒的延时
queueName是delay()方法的可选参数,它是一个队列名的字符串,默认是动画队列fx
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">开始动画</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn1').click(function(event){
$('#box').animate({'left':'300px'}).delay(500).animate({'width':'100px'});
});
</script>
全局控制
【jQuery.fx.off】
jQuery.fx.off属性可以用来对jQuery动画进行全局控制,默认为undefined,当这个属性设置为true的时候,调用时所有动画方法将立即设置元素为他们的最终状态,而不是显示效果
当然,动画可以通过设置这个属性为false重新打开
[注意]由于该属性是全局性的,因此在没有动画正在运行或停止所有动画时,此属性的变化才能生效
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">开始动画</button>
<button id="btn2">开闭动画</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn1').click(function(event){
$('#box').animate({'left':'300px'},1000).animate({'width':'100px'},1000);
});
$('#btn2').click(function(){
$.fx.off = !$.fx.off;
});
</script>
【jQuery.fx.interval】
jQuery.fx.interval属性可以改变动画的频率,以毫秒为单位
这个属性可以设置动画每秒运行帧数,默认是13毫秒。该属性值越小,在速度较快的浏览器中,动画执行的越流畅,但是会影响程序的性能并且占用更多的CPU资源
[注意]由于该属性是全局性的,因此在没有动画正在运行或停止所有动画时,此属性的变化才能生效
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<button id="btn1">开始动画</button>
<button id="btn2">改变动画频率</button>
<button id="reset">恢复</button>
<div id="box" style="position:relative;height: 100px;width: 300px;background-color: lightblue"></div>
<script>
$('#reset').click(function(){
history.go();
})
$('#btn1').click(function(event){
$('#box').animate({'left':'300px'},1000).animate({'width':'100px'},1000);
});
$('#btn2').click(function(){
$.fx.interval = 100;
});
</script>
深入学习jQuery动画控制的更多相关文章
- jquery动画控制非css属性
JQuery的animate()方法可以通过渐变的更改CSS属性来实现简单的动画效果, 比如 $("#box").animate({height:"300px" ...
- 深入学习jQuery动画队列
前面的话 队列实现是jQuery非常棒的一个拓展,使用动画队列可以使动画更容易实现.本文将详细介绍jQuery动画队列 queue() queue()方法用来显示在匹配的元素上的已经执行的函数队列 q ...
- jQuery 动画效果 与 动画队列
基础效果 .hide([duration ] [,easing ] [,complete ]) 用于隐藏元素,没有参数的时候等同于直接设置 display 属性 $('.target').hide() ...
- 深入学习jQuery自定义动画
× 目录 [1]属性对象 [2]可选参数 [3]选项参数 前面的话 很多情况下,前面介绍的jQuery动画的简单效果无法满足用户的各种需求,那么就需要对动画有更多的限制,需要采取一些高级的自定义动画来 ...
- 深入学习jQuery的三种常见动画效果
× 目录 [1]显隐效果 [2]高度变化 [3]淡入淡出 前面的话 动画效果是jQuery吸引人的地方.通过jQuery的动画方法,能够轻松地为网页添加视觉效果,给用户一种全新的体验.jQuery动画 ...
- jquery动画切换引擎插件 Velocity.js 学习01
一.Velocity.js介绍 Velocity是一个jQuery插件,重新实现了$.animate() 来产生更高的性能(速度也比CSS动画库更快),而包括新的功能,以提高动画工作流程. Veloc ...
- jQuery动画与特效详解
本文主要是讲解和学习jQuery的自动显隐,渐入渐出等. 1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,本节简单介绍jQuery的显示和隐藏. 代码如下: &l ...
- 从零开始学习jQuery (五) 事件与事件对象
本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...
- 从零开始学习jQuery (一) 入门篇
本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些 ...
随机推荐
- 总结js的一些复制方法
1.复制对象: var item1={XXX}; var item2=$.extend(true,{},item1);//深度克隆对象(jQuery方法). lodash也有相关方法:https:// ...
- Shader实例:NGUI制作网格样式血条
效果: 思路: 1.算出正确的uv去采样过滤图,上一篇文章说的很明白了.Shader实例:NGUI图集中的UISprite正确使用Shader的方法 2.用当前血量占总血量的百分比来设置shader中 ...
- NSCache和NSURLCache、网络缓存优化
本文目录 一种缓存优化方案 响应头'Last-Modified'和请求头'If-Modified-Since' 'Keep-Alive'响应头和不离线的URLSession 'Expires'响应头 ...
- cocos2dx 实现flappybird
前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h ...
- 【转】Polya定理
转自:http://endlesscount.blog.163.com/blog/static/82119787201221324524202/ Polya定理 首先记Sn为有前n个正整数组成的集合, ...
- GIT和SVN之间的区别及基本操作对比
1)GIT是分布式的,SVN不是: 这是GIT和其它非分布式的版本控制系统,例如 SVN,CVS等,最核心的区别.如果你能理解这个概念,那么你就已经上手一半了.需要做一点声明,GIT并不是目前第一个或 ...
- 【转】Web测试方法
看到好文章,拿过来给大家分享分享! 一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&am ...
- 在 IIS 7.5 中,应用程序池有两种运行模式:集成模式和经典模式。
应用程序池模式会影响服务器处理托管代码请求的方式. 如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道来处理请求. 如果托管应用程序在采用经 ...
- 如何修改SQL SERVER服务器的端口
sql server的服务器端口默认是1433,设置服务器端口的位置在这里: 这里的端口,默认是1433,我把它改成了65499 修改端口之后,客户端如何连接? 下面是SSMS的连接方式: 下面是一个 ...
- JAVA演算法---約瑟夫問題
1 public class Josephus { public static int[] arrayOfJosephus( int number, int per) { 3 int[] man = ...