详解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 相关文章推荐
jQuery 联动日历实现代码
May 31 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
Nov 26 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
Nov 29 Javascript
JS动态调用方法名示例介绍
Dec 18 Javascript
javascript中全局对象的isNaN()方法使用介绍
Dec 19 Javascript
vue.js入门(3)——详解组件通信
Dec 02 Javascript
微信小程序 同步请求授权的详解
Aug 04 Javascript
Angular 项目实现国际化的方法
Jan 08 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
vue中img src 动态加载本地json的图片路径写法
Apr 25 Javascript
javascript canvas实现简易时钟例子
Sep 05 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 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
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
js实现无缝滚动图
2017/02/22 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python threading模块操作多线程介绍
2015/04/08 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
python中的随机函数小结
2018/01/27 Python
解决python "No module named pip" 的问题
2018/10/13 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
德国购买门票网站:ADticket.de
2019/10/31 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
给男朋友的道歉信
2014/01/12 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
社区服务活动报告
2015/02/05 职场文书
父亲节活动总结
2015/02/12 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书