详解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 相关文章推荐
用prototype实现的简单小巧的多级联动菜单
Mar 24 Javascript
基于jquery的滑动样例代码
Nov 20 Javascript
用jquery.sortElements实现table排序
May 04 Javascript
javascript模拟post提交隐藏地址栏的参数
Sep 03 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 Javascript
Javascript闭包与函数柯里化浅析
Jun 22 Javascript
Bootstrap企业网站实战项目4
Oct 14 Javascript
微信小程序进行微信支付的步骤昂述
Dec 01 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
Dec 18 Javascript
js时间戳格式化成日期格式的多种方法介绍
Feb 16 Javascript
JS非空验证及邮箱验证的实例
Aug 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
PHP常用代码
2006/11/23 PHP
php URL验证正则表达式
2011/07/19 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
js实现随机点名小功能
2017/08/17 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
Python实现简单文本字符串处理的方法
2018/01/22 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
护士自荐信范文
2013/12/15 职场文书
工程专业应届生求职信
2014/02/19 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
婚前协议书范本两则
2014/10/16 职场文书
2015年财政所工作总结
2015/04/25 职场文书
运动会100米加油稿
2015/07/21 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
如何利用Python实现一个论文降重工具
2021/07/09 Python