详解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 年月日联动实现核心代码
Dec 21 Javascript
情人节之礼 js项链效果
Feb 13 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
Aug 06 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
jQuery Easyui 验证两次密码输入是否相等
May 13 Javascript
javascript表单控件实例讲解
Sep 13 Javascript
原生js中ajax访问的实例详解
Sep 19 Javascript
vue单页应用加百度统计代码(亲测有效)
Jan 31 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
Sep 21 Javascript
jquery.pager.js分页实现详解
Jul 29 jQuery
使用layui前端框架弹出form表单以及提交的示例
Oct 25 Javascript
Rust中的Struct使用示例详解
Aug 14 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
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
php发送邮件的问题详解
2015/06/22 PHP
php curl常用的5个经典例子
2017/01/20 PHP
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
js查错流程归纳
2012/05/04 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
ant design实现圈选功能
2019/12/17 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
python 控制语句
2011/11/03 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
工程地质勘察专业大学生求职信
2013/10/13 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
大学班级文化建设方案
2014/05/06 职场文书
药剂专业自荐书
2014/06/20 职场文书
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电