详解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创建createXmlHttpRequest对象示例代码
Feb 10 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
Jul 18 Javascript
js实现checkbox全选、不选与反选的方法
Feb 09 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
原生js获取left值和top值的三种方法
Aug 02 Javascript
Express + Session 实现登录验证功能
Sep 08 Javascript
图片加载完成再执行事件的实例
Nov 16 Javascript
vue监听对象及对象属性问题
Aug 20 Javascript
Node.js 路由的实现方法
Jun 05 Javascript
vue实现的封装全局filter并统一管理操作示例
Feb 02 Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 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
PHPMailer 中文使用说明小结
2010/01/22 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
php函数连续调用实例分析
2015/07/30 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
python使用scrapy解析js示例
2014/01/23 Python
Python中函数的用法实例教程
2014/09/08 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Django model反向关联名称的方法
2018/12/15 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
Python Django路径配置实现过程解析
2020/11/05 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
个人素质的自我评价分享
2013/12/16 职场文书
企业管理部经理岗位职责
2013/12/24 职场文书
金融专业大学生自我评价
2014/01/09 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
文秘求职信范文
2014/04/10 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
创先争优活动承诺书
2014/08/30 职场文书
单位接收函范文
2015/01/30 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android