锋利的jQuery-4--停止动画和判断是否处于动画状态(防止动画加入队列过多的办法)
1.停止元素的动画:stop([cleanQueue, gotoEnd]):第一个参数代表是否要清空未执行完的动画队列,第二个参数代表是否直接将正在执行的动画跳转到末状态。
无参数stop():立即停止当前的动画,如果接下来还有动画则以当前状态开始接下来的动画。
举例:为元素绑定hover事件之后,如果光标移入移出的速度太快,导致移入的动画还没执行完,就移出光标,则移出的动画效果就会被放到队列,等移入的动画完成后在执行。因此如果光标的移入移出速度太快,就会导致动画效果与移动光标不一致的情况。
此时如果在移入移出动画之前加入stop(),就能解决这个问题了。
$("div").hover(function(){
$(this).stop().animate({"height":"300px", "width":"300px"}, 200);
}, function(){
$(this).stop().animate({"height":"100px", "width":"100px"}, 200);
});
如果遇到组合动画:
$("div").hover(function(){
$(this).stop().animate({"height":"300px"}, 200) //如果在此时触发了光标的移出事件,将执行下边的动画,而非光标移出的动画,以为stop()是立即停止当前的动画进入下一个动画。
.animate({"width":"300px"}, 200);
}, function(){
$(this).stop().animate({"height":"100px"}, 200)
.animate({"width":"100px"}, 200);
});
此时需要用stop的第一个参数,设置为true,程序会把当前元素接下来尚未执行的动画队列都清空。
$("div").hover(function(){
$(this).stop(true).animate({"height":"300px"}, 200) //如果在此时触发了光标的移出事件,会直接停止当前的动画,并且清空了后边的动画,这样就会执行光标移出的动画了。
.animate({"width":"300px"}, 200);
}, function(){
$(this).stop(true).animate({"height":"100px"}, 200)
.animate({"width":"100px"}, 200);
});
第二个参数gotoEnd可以让当前的动画直接达到结束时刻的状态,通常用于后一个动画需要基于前一个动画的末状态的情况。
stop(false, true) : 当前的动画直接达到末状态。
stop(true, true) : 当前的动画直接达到末状态并清空当前对象的动画队列。
注意:jQuery只能设置正在执行的动画的最终状态,不能直接达到未执行动画的最终状态。
$("div").animate({"width" : "200px"}, 200)
.animate({"height" : "200px"}, 200)
.animate({"opacity", "0.2"}, 200);
无论怎么设置stop()值,均无法在改变"width"或者"height"时,将此div的元素末状态改为300*150大小,并且透明度0.2。既stop只能改变当前正在执行的动画。
2.判断元素是否处于动画状态:
在使用animate()方法的时候,要避免动画积累导致动画与用户行为不一致的情况,需要判断当前元素是否正在执行动画。
if(! $(element).is(":animated") ){ //判断元素是否处于动画状态
//如果当前元素没有执行动画,...
}
锋利的jQuery-4--停止动画和判断是否处于动画状态(防止动画加入队列过多的办法)的更多相关文章
- jQuery停止动画和判断是否处于动画状态
1.停止元素的动画 stop([clearQueue][,gotoEnd]); 参数clearQHCHC和gotoEnd都足町选的参数,为Boolean值(ture或flase).clearQueue ...
- Geodatabase - 判断是否处于编辑状态
Engine中提供IDatasetEdit来判断数据是否处于编辑状态,我们知道,在ArcMap中,进行编辑的不一定都是要素类,也可以是表,网络几何等.以下能在ArcMap中进行编辑的数据都实现了 ID ...
- jQuery中的事件和动画——《锋利的jQuery》(第2版)读书笔记2
第4章 jQuery中的事件和动画 jQuery中的事件 加载DOM $(document).ready(function(){ // 编写代码... }); 可以简写成: $(function( ...
- 锋利的jQuery读书笔记---jQuery中动画
jQuery中的动画: 1.show和hide 2.fadeIn和fadeOut 3.slideUp和slideDown <!DOCTYPE html> <html> < ...
- jQuery中的动画——《锋利的JQuery》
自CSS3以来,主流网站开始偏向于扁平风格和动画效果,这时就可以jQuery的动画就可以发挥其长处了,灵活的应用其动画API,让我们可以设计出很多绚丽的效果.下面,让我们来列举一些jQuery常用的动 ...
- 《锋利的JQuery》读书要点笔记3——事件和动画
第四章 jQuery中的事件和动画 JS和HTML的交互是通过用户和浏览器操作页面时引发的事件来处理的,事件由浏览器自动生成. 4.1 jQuery中的事件 1. 加载DOM 这里主要是搞明白wind ...
- 《锋利的jQuery》心得笔记--Two Sections
第三章 1. DOM操作(节点) 1) 查找节点可以查找元素节点和属性节点 2) 创建节点: (1) 创建元素节点 var addLi = $(“&l ...
- 锋利的jQuery第2版学习笔记4、5章
第4章,jQuery中的事件和动画 注意:使用的jQuery版本为1.7.1 jQuery中的事件 JavaScript中通常使用window.onload方法,jQuery中使用$(document ...
- 锋利的jQuery(第二版) 初读笔记
window.onload(): 必须等待网页中所有的内容加载完毕后(包括图片)才能执行. $(document).ready(): 网页中所有DOM结构绘制完毕后就执行,可能DOM元素关联的东西并没 ...
随机推荐
- SgmlReader使用方法
HtmlAgilityPack是一个开源的html解析器,底层是通过将html格式转成标准的xml格式文件来实现的(使用dot net里的XPathDocument等xml相关类),可以从这里下载:h ...
- Qt——信号槽连接:基于字符串与基于函数的连接之间的不同
从Qt5.0开始,Qt提供了两种不同的方式进行信号槽的连接:基于 字符串 的连接语法.基于 函数 的连接语法.这两种语法各有利弊,下面对它们的不同点进行总结. 以下几部分详细解释了它们之间的不同,并说 ...
- 学习笔记——Maven 命令行选项
2014-10-09:更新裁剪反应堆具体用法 说明: 1.使用-选项时,和后面的参数之间可以不要空格.而使用--选项时,和后面的参数之 间必须有空格.如下面的例子: $ mvn help:des ...
- 浅谈JS面向对象之创建对象
hello,everybody,今天要探讨的问题是JS面向对象,其实面向对象呢呢,一般是在大型项目上会采用,不过了解它对我们理解JS语言有很大的意义. 首先什么是面向对象编程(oop),就是用对象的思 ...
- unity3d 扩展NGUI —— 限制UI点击响应间隔
当某个按钮按下后给服务器发送某条消息 如果玩家短时间内疯狂点击按钮很多次,这将会给服务器发送很多条无用数据 不但增加了服务器的压力,发送数据还浪费流量,甚至可能引发一些莫名其妙的bug 所以,限制UI ...
- 导出EXCEL【Web方式HTML通过拼接html中table】
DataTable dt= GetTaskList(int.MaxValue); StringBuilder table = new StringBuilder(); table.Append(&qu ...
- [BZOJ1406][AHOI2007]密码箱(数论)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1406 分析: (x+1)(x-1)是n的倍数 于是可以把n分解成n=ab,则a为(x+ ...
- Linq之IQueryable接口与IEnumberable区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IEnumerable 包含 ...
- http状态码介绍
基本涵盖了所有问题HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源HT ...
- java.lang.IllegalStateException: getWriter() has already been called for this response问题解决
java.lang.IllegalStateException: getWriter() has already been called for this response问题解决 java.lang ...