详解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 相关文章推荐
用js生产批量批处理执行命令
Jul 28 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
JavaScript自定义等待wait函数实例分析
Mar 23 Javascript
浅谈Jquery核心函数
Jun 18 Javascript
javascript实现支持移动设备画廊
Aug 24 Javascript
一篇文章掌握RequireJS常用知识
Jan 26 Javascript
EasyUI学习之DataGird分页显示数据
Dec 29 Javascript
JavaScrip数组删除特定元素的几种方法总结
Sep 06 Javascript
js表单序列化判断空值的实例
Sep 22 Javascript
vue实现简单的MVVM框架
Aug 05 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 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
在JavaScript中调用php程序
2009/03/09 PHP
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
利用404错误页面实现UrlRewrite的实现代码
2008/08/20 Javascript
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
Python切片用法实例教程
2014/09/08 Python
关于python写入文件自动换行的问题
2018/06/23 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
python中的插入排序的简单用法
2021/01/19 Python
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
大学生求职中的自我评价
2013/10/01 职场文书
计算机个人求职信范例
2014/01/24 职场文书
工会换届选举方案
2014/05/21 职场文书
会计岗位说明书
2014/07/29 职场文书
老公保证书
2015/01/17 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
Python类方法总结讲解
2021/07/26 Python