详解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 相关文章推荐
csdn 博客中实现运行代码功能实现
Aug 29 Javascript
19个很有用的 JavaScript库推荐
Jun 27 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
Nov 17 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
Apr 27 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
javascript解决小数的加减乘除精度丢失的方案
May 31 Javascript
EditPlus 正则表达式 实战(3)
Dec 15 Javascript
JavaScript初学者必看“new”
Jun 12 Javascript
详解Javascript 中的 class、构造函数、工厂函数
Dec 20 Javascript
layer iframe 设置关闭按钮的方法
Sep 12 Javascript
js实现点击上传图片并设为模糊背景
Aug 02 Javascript
vue实现简易计算器功能
Jan 20 Vue.js
实例解析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
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
AngularJS constant和value区别详解
2017/02/28 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
Vue.js实现备忘录功能
2019/06/26 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
python__name__原理及用法详解
2019/11/02 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
python 制作本地应用搜索工具
2021/02/27 Python
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
PHP中如何使用Cookie
2015/10/28 面试题
英文导游欢迎词
2014/01/11 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
食品销售计划书
2014/04/26 职场文书
企业宗旨标语
2014/06/10 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
大学团日活动总结书
2015/05/11 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
vue实现列表垂直无缝滚动
2022/04/08 Vue.js