【问题标题】:jquery drop down menu with timer带有计时器的jquery下拉菜单
【发布时间】:2011-12-28 08:51:22
【问题描述】:

我想制作 html/jquery 下拉菜单。但我有一个问题。我希望当鼠标转到“游戏”导航按钮时,div 下降并且仅在鼠标退出 5 秒时才消失,而不是 5 秒后(这是我的问题),而不是立即消失。到目前为止,这就是我所做的

JS

    var games_timer = $.timer(slidingUP("#games-sub", "-200px")); games_timer.set({ time : 3000, autostart : false });

    function slidingUP($name, $value){
        $($name).animate({ top : $value }, 300);
        }

    $(".games").hover(function(){
            if (games_timer.active){games_timer.stop();}
            $("#games-sub").animate({ top : "160px" }, 300);

        }, function(){
            games_timer.play();
        });

它向下滑动,但从不向上滑动

HTML:

<ul>
 <li class="nav-a1"><a id="home" href="">Home</a></li>
 <li class="nav-a2"><a id="games" class="games" href="">Games</a></li>
 <li class="nav-a2"><a id="upcomming" href="">Upcomming</a></li>
 <li class="nav-a2"><a id="trailers" href="">Trailers</a></li>
 <li class="nav-a2"><a id="blog" href="">Blog</a></li>
 <li class="nav-a2"><a id="login" href="">Login</a></li>
</ul>

<div id="games-sub" class="games">
    <a href="">ACTION</a>
    <a href="">ADVANTURE</a>
    <a href="">ARCADE</a>
    <a href="">SHOOTER</a>
    <a href="">FIRST PERSON</a>
    <a href="">THIRD PERSON</a>
    <a href="">STRATEGY</a>
    <a href="">SPORT</a>
</div>

【问题讨论】:

  • 你试过setTimeoutclearTimeout吗?另外,您可以使用一些 css 在jsfiddle 上添加您的代码。我们会更容易提供帮助。
  • 300 这里不是超时 - 它是动画持续时间

标签: javascript jquery html menu navigation


【解决方案1】:

您可以连接到 div 的 mouseinmouseout 事件。
mouseout 上,您将启动一个 timeout 事件,该事件将在 5 秒内关闭 div。
mousein 上,您将检查是否存在关闭 div 的超时事件。如果是这样 - 取消它。如果没有 - 显示 div。
here 对超时事件的一些解释。

【讨论】:

    【解决方案2】:

    使用以下代码:

        $('.games').hover(function() {
            timeout = setTimeout('showSubGames()', 1000);
        });
    
    function showSubGames()
    {
     $("#games-sub").animate({ top : "160px" }, 300);
    }
    

    【讨论】:

    • 感谢所有回答我问题的人,但这是我所做的,但它不起作用: var games_timer = $.timer(slideUP("#games-sub", "-200px" )); timer.set({时间:3000,自动启动:假});函数 slideUP($name, $value){ $($name).animate({ top : $value }, 300); } $(".games").hover(function(){ if (games_timer.active){games_timer.stop();} $("#games-sub").animate({ top : "160px" }, 300 ); }, function(){ games_timer.play(); });有人能告诉我它有什么问题吗?
    • 首先,slideUp 是 jquery 中的一个预定义函数,所以我建议您更改它的名称,除非您试图覆盖它。并请尝试将代码标记为code以便澄清它
    • var games_timer = $.timer(slidingUP("#games-sub", "-200px")); timer.set({ time : 3000, autostart : false }); function slidingUP($name, $value){ $($name).animate({ top : $value }, 300); } $(".games").hover(function(){ if (games_timer.active){games_timer.stop();} $("#games-sub").animate({ top : "160px" }, 300); }, function(){ games_timer.play(); });
    • 您是否尝试更改 slideUp 函数的名称?
    【解决方案3】:

    我从您的问题中了解到您希望将slidingUp 功能延迟5 秒;因此,您的解决方案是使用 .delay,如下所示:

    function slidingUP($name, $value){
        $($name).animate({ top : $value }, 300).delay(300);
       }
    

    【讨论】:

    • 好的,你能在这里再重复一遍你的问题吗,你想在鼠标悬停和鼠标移出时发生什么
    • 请看下面我的回答
    【解决方案4】:

    你必须在 mouseleave 上添加一个事件

    $(".games").mouseleave(function(){
    
            $("#games-sub").animate({ top : "-200px" }, 300).delay(300);
    
        }
    

    或者没有延迟:

    $(".games").mouseleave(function(){
    
            $("#games-sub").animate({ top : "-200px" }, 300);
    
        }
    

    【讨论】:

    • 好的,我知道这是一个简单的答案,但你必须提到,当鼠标从“游戏”转到子菜单时,这个子菜单会上下几次,这就是为什么我想要使用时间,我希望当鼠标离开 3 秒而不是 3 秒后出现子菜单,你明白了吗?
    • 如果您愿意,我可以建议一种全新的方法来制作您的菜单。因为我认为假设用户将在 3 秒内点击是不正确的
    • coooome ooonn 老兄,你就是不想理解我,我没说用户会在 3 秒内点击某个东西...我放弃了,这里有没有人能真正理解我?
    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多