首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >队列、延迟、停止队列

队列、延迟、停止队列
EN

Stack Overflow用户
提问于 2011-01-25 19:55:30
回答 2查看 997关注 0票数 1

我目前正在制作一个带有选项卡的两级菜单动画:主菜单项、选项卡项、打开选项卡子菜单。

加载时,将根据当前页面位置打开默认子菜单。用户可以选择打开其它子菜单以浏览导航。但是,当用户不再关心菜单时,默认子菜单应该在一段时间后重新出现,以匹配当前位置。此代码可正确用于此用途:

代码语言:javascript
复制
$("#menu").mouseleave(function(){
    setTimeout(function(){
        $("#menu").tabs( "option", "selected", index );},
        2000);
        });
    });

这是问题所在。如果用户在启动超时后返回菜单(在2秒的延迟内),则仍然会出现默认子菜单,这可能会干扰用户体验。当用户返回到菜单时停止超时将是非常好的。

我认为最好使用队列,延迟...但我不知道该怎么做,因为大多数文档都提到了动画队列……

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2011-01-25 20:09:11

您可以使用clearTimeout停止启动超时,如下所示:

代码语言:javascript
复制
var menuTimeOut;
$("#menu").mouseleave(function(){
 menuTimeOut = setTimeout(function(){
    $("#menu").tabs( "option", "selected", index );},
    2000);
    });
});
$("#menu").mouseenter(function(){
  if(menuTimeOut) { 
     clearTimeout(menuTimeOut);
  }
});
票数 1
EN

Stack Overflow用户

发布于 2011-01-25 20:10:25

当鼠标进入菜单时,您实际上不需要使用队列来取消计时器。您可以调用clearTimeout()来完成此操作,并使用jQuery的data()工具存储超时标识符:

代码语言:javascript
复制
$("#menu").mouseleave(function() {
    $(this).data("timeout", window.setTimeout(function() {
        $("#menu").tabs("option", "selected", index);
    }, 2000));
}).mouseenter(function() {
    var timeout = $(this).data("timeout");
    if (timeout) {
        window.clearTimeout(timeout);
        $(this).removeData("timeout");
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4793188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档