详解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 相关文章推荐
Mootools 1.2 手风琴(Accordion)教程
Sep 15 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
Dec 30 Javascript
js绑定事件this指向发生改变的问题解决方法
Apr 23 Javascript
JavaScript的继承的封装介绍
Oct 15 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
JS判断字符串包含的方法
May 05 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
实例解析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
虫族 ZERG 概述
2020/03/14 星际争霸
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
php自定义hash函数实例
2015/05/05 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
Python Logging 日志记录入门学习
2018/06/02 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
财务与信息服务专业推荐信
2013/11/28 职场文书
办加油卡单位介绍信
2014/01/09 职场文书
中秋节超市促销方案
2014/01/30 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
节约用水演讲稿
2014/05/21 职场文书
新品发布会策划方案
2014/06/08 职场文书
中国梦读书活动总结
2014/07/10 职场文书
人事聘任通知
2015/04/21 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
手残删除python之后的补救方法
2021/06/26 Python
Python Pandas 删除列操作
2022/03/16 Python
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技