详解jQuery停止动画——stop()方法的使用

发布时间 - 2026-01-10 21:49:20    点击率:

很多时候需要停止匹配元素正在进行的动画,比如,当鼠标选入元素时显示菜单,鼠标离开时隐藏下拉菜单,如果鼠标移入移出过快的话就会导致动画效果与鼠标的动作不一致的情况,此时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()方法对上述的动画都适用。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# jquery  # 停止动画  # stop()方法  # JQuery动画和停止动画实例代码  # jQuery动画animate方法使用介绍  # jQuery动画效果animate和scrollTop结合使用实例  # jquery animate 动画效果使用说明  # JQuery动画animate的stop方法使用详解  # jQuery实现切换页面过渡动画效果  # Jquery中使用show()与hide()方法动画显示和隐藏图片  # jQuery动画与特效详解  # 利用jquery制作滚动到指定位置触发动画  # jQuery动画出现连续触发、滞后反复执行的解决方法  # jQuery 动画与停止动画效果实例详解  # 移出  # 鼠标  # 正在进行  # 清空  # 只会  # 都是  # 就会  # 还没  # 第一个  # 就能  # 才会  # 可以通过  # 事件中  # 还未  # 可选  # 会把  # 将此  # 结合起来  # 而非  # 不带 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现全文搜索功能?(Scout和Algolia示例)  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何快速生成ASP一键建站模板并优化安全性?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  JS中对数组元素进行增删改移的方法总结  香港服务器租用每月最低只需15元?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  如何快速上传建站程序避免常见错误?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何优化应用性能?(缓存和优化命令)  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何在Windows虚拟主机上快速搭建网站?  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Linux后台任务运行方法_nohup与&使用技巧【技巧】  EditPlus 正则表达式 实战(3)  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何在Windows 2008云服务器安全搭建网站?  Android okhttputils现在进度显示实例代码  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel如何使用Telescope进行调试?(安装和使用教程)  香港服务器选型指南:免备案配置与高效建站方案解析  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何自定义建站之星网站的导航菜单样式?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  如何在香港免费服务器上快速搭建网站?  如何在云服务器上快速搭建个人网站?  nginx修改上传文件大小限制的方法  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  如何快速搭建个人网站并优化SEO?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  python中快速进行多个字符替换的方法小结  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  ,交易猫的商品怎么发布到网站上去?  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  如何用PHP快速搭建CMS系统?  node.js报错:Cannot find module &#39;ejs&#39;的解决办法