前面的话

  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动画控制的更多相关文章

  1. jquery动画控制非css属性

    JQuery的animate()方法可以通过渐变的更改CSS属性来实现简单的动画效果, 比如 $("#box").animate({height:"300px" ...

  2. 深入学习jQuery动画队列

    前面的话 队列实现是jQuery非常棒的一个拓展,使用动画队列可以使动画更容易实现.本文将详细介绍jQuery动画队列 queue() queue()方法用来显示在匹配的元素上的已经执行的函数队列 q ...

  3. jQuery 动画效果 与 动画队列

    基础效果 .hide([duration ] [,easing ] [,complete ]) 用于隐藏元素,没有参数的时候等同于直接设置 display 属性 $('.target').hide() ...

  4. 深入学习jQuery自定义动画

    × 目录 [1]属性对象 [2]可选参数 [3]选项参数 前面的话 很多情况下,前面介绍的jQuery动画的简单效果无法满足用户的各种需求,那么就需要对动画有更多的限制,需要采取一些高级的自定义动画来 ...

  5. 深入学习jQuery的三种常见动画效果

    × 目录 [1]显隐效果 [2]高度变化 [3]淡入淡出 前面的话 动画效果是jQuery吸引人的地方.通过jQuery的动画方法,能够轻松地为网页添加视觉效果,给用户一种全新的体验.jQuery动画 ...

  6. jquery动画切换引擎插件 Velocity.js 学习01

    一.Velocity.js介绍 Velocity是一个jQuery插件,重新实现了$.animate() 来产生更高的性能(速度也比CSS动画库更快),而包括新的功能,以提高动画工作流程. Veloc ...

  7. jQuery动画与特效详解

    本文主要是讲解和学习jQuery的自动显隐,渐入渐出等. 1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,本节简单介绍jQuery的显示和隐藏. 代码如下: &l ...

  8. 从零开始学习jQuery (五) 事件与事件对象

    本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...

  9. 从零开始学习jQuery (一) 入门篇

    本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些 ...

随机推荐

  1. lua 字符串 正则表达式 转义 特殊字符

    string.gsub 函数有三个参数:目标串,模式串,替换串.基本作用是用来查找匹配模式的串,并将使用替换串其替换掉: s = string.gsub("Lua is good" ...

  2. linux下tomcat安装

    1.先安装jdk,我们这里用yum进行安装: yum -y install java-1.7.0-openjdk* 确定是否安装成功: java -version 如果显示jdk的版本信息,说明安装成 ...

  3. jquery中focus()失效怎么解决

    又学到一个新的知识! 今天在写表单验证的时候遇到一个关于获取焦点的focus()问题. 场景说明:在验证密码输入格式不对之后,弹出alert()提示框,提示密码不对,请重新输入.同时清空密码框并获得焦 ...

  4. CQOI 2016 k远点对

    题目大意:n个点,求第k远的点对的距离 KD树裸题 注意要用堆维护第k远 #include<bits/stdc++.h> #define ll unsigned long long #de ...

  5. 一张图解释SQL Server集群、镜像、复制、日志传送

    一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.

  6. 微软StockTrader应用程序

    这是一个采用 .NET Enterprise Application Server 技术的端到端示例应用程序.应用程序代码可以从 这里 下载. 代码中演示了WCF服务和移动开发,包括用Xamarin ...

  7. UI控件(UIScrollView)

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //创建一个scrollview UIScrollV ...

  8. 推荐:图片轮播插件Nivo Slider

          因为项目需要一款切换样式多一些的轮播插件,不经意找到了NivoSlider,非常好用,比bootstrap要好用,而且样式丰富.值得注意的是,这款插件是在MIT协议下免费的.        ...

  9. 配置apache和nginx的tomcat负载均衡

    概述 本篇文章主要介绍apache和nginx的相关配置,tomcat的相关安装配置我在前面有写过一篇,详细介绍通过两种配置方法配置nginx. tomcat配置参考:http://www.cnblo ...

  10. [SDK2.2]Windows Azure Storage (15) 使用WCF服务,将本地图片上传至Azure Storage (上) 服务器端代码

    <Windows Azure Platform 系列文章目录> 这几天工作上的内容,把项目文件和源代码拿出来给大家分享下. 源代码下载:Part1 Part2 Part3 我们在写WEB服 ...