详解jQuery停止动画——stop()方法的使用


Posted in Javascript onDecember 14, 2016

很多时候需要停止匹配元素正在进行的动画,比如,当鼠标选入元素时显示菜单,鼠标离开时隐藏下拉菜单,如果鼠标移入移出过快的话就会导致动画效果与鼠标的动作不一致的情况,此时stop()就派上用场了。

stop()方法的语法结构为:

stop([clearQueue],[gotoEnd]);

 参数clearQueue和gotoEnd都是可选参数,为Boolean值(true或false)。clearQueue代表是否清空未执行完的动画队列,gotoEnd代表是否直接将正在执行的动画跳转到末状态。

(1)直接使用使用stop()方法,则会立即停止当前正在进行的动画,如果接下来还有动画等待继续进行,则以当前状态开始接下来的动画。比如下面例子:

<!-- html部分 -->
 <div id="panel" style="width: 60px;height: 22px;background-color: #eee;">呵呵</div>
/* js部分 */
 $("#panel").hover(function() {
  $(this).stop().animate({height: "150"}, 200);
 },function() {
  $(this).stop().animate({height: "22"}, 300);
 });

此时,在光标移入时,触发光标移入动画(在0.2秒内height变为150),在动画还没执行完的时候光标移出,则停止当前动画(可能height还未到达150),执行光标移出触发的动画(在0.3秒内height变回22)。反之亦然。

如果遇到组合动画,例如:

$("#panel").hover(function() {
  $(this).stop()
   .animate({height: "150"}, 200) //如果在此时触发了光标的移出事件
           //将执行下面的动画
   .animate({width: "300"},300); //而非光标移出事件中的动画
 },function() {
  $(this).stop()
   .animate({height: "22"}, 200)
   .animate({width: "60"},300);
 });

此时只用一个不带参数的stop()方法就显得力不从心了。因为stop()方法只会停止正在进行的动画,如果动画正执行在第1阶段(改变height的阶段),则触发光标移出事件后,只会停止当前的动画,并继续进行下面的.animate({width: "300"},300)动画,而光标移出事件中的动画要等这个动画结束后才会继续执行,这显然不是预期的结果。这种情况下stop()方法的第一个参数就发挥作用了。

(2)stop(true),此时程序会把当前元素接下来尚未执行完的动画队列清空。所以可以把上面代码改成如此代码,就能实现预期的效果。

$("#panel").hover(function() {
  $(this).stop(true)
   .animate({height: "150"}, 200) //如果在此时触发了光标的移出事件
           //直接跳过后面的动画队列
   .animate({width: "300"},300); 
 },function() {
  $(this).stop()
   .animate({height: "22"}, 200)
   .animate({width: "60"},300);
 });

(3)第2个参数(gotoEnd)可以用于让正在执行的动画直接到达结束时刻的状态,通常用于后一个动画需要基于前一个动画的末状态的情况,可以通过stop(false,true)这种方式来让当前动画直接到达末状态

(4)两者结合起来stop(true,true),停止当前动画并直接到达当前动画的末状态,并清空动画队列

(5)注意,jQuery只能设置正在执行的动画的最终状态,而没有提供直接到达执行动画队列最终状态的方法。例如有一组动画:

$("div.content")
  .animate({width: "300"}, 200)
  .animate({height: "150"}, 300)
  .animate({opacity: "0.2"}, 200);

无论怎么设置stop()方法,均无法再改变"width"或者"height"时,将此<div>元素的末状态变成300*150大小,并且设置透明度为0.2。

温馨提示:

jQuery中的动画有show()、hide()、fadeIn()、fadeOut()、slideDown()、slideUp()、animate()等等。stop()方法对上述的动画都适用。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
用JavaScript实现单继承和多继承的简单方法
Mar 29 Javascript
jQuery中ajax的使用与缓存问题的解决方法
Dec 19 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
Apr 12 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
Jan 29 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
Mar 16 Javascript
AngularJS  $on、$emit和$broadcast的使用
Sep 05 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
Jan 30 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
Feb 13 Javascript
利用canvas实现的加载动画效果实例代码
Jul 05 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
实例解析Array和String方法
Dec 14 #Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 #Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
Dec 14 #Javascript
浅谈Javascript中的Label语句
Dec 14 #Javascript
详解jQuery中基本的动画方法
Dec 14 #Javascript
浅析上传头像示例及其注意事项
Dec 14 #Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Dec 14 #Javascript
You might like
使用swoole扩展php websocket示例
2014/02/13 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
jQuery对象[0]是什么含义?
2010/07/31 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
学生会竞选自荐信
2013/10/12 职场文书
感恩节活动策划方案
2014/05/16 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
少先大队干部竞选稿
2015/11/20 职场文书