jquery slideUp on click,在 mouseleave 上悬停重置时停止

Posted

技术标签:

【中文标题】jquery slideUp on click,在 mouseleave 上悬停重置时停止【英文标题】:jquery slideUp on click, stopped on hover reset on mouseleave 【发布时间】:2013-12-25 19:54:24 【问题描述】:

我有一个 div,当使用 $(element).slideDown(); 单击按钮时打开一个 div;

我正在尝试做三件事,

    如果鼠标悬停在元素上,它会保持打开状态 如果鼠标离开元素它会在 5 秒后滑动() 如果鼠标在 5 秒后从未悬停在元素 slideUp() 上

我所做的是给 div 一个 notHovered 类。在按钮上单击容器向下滑动,时间开始于条件“.intro-wrapper”具有类“notHovered”。然后我所做的是在悬停时删除该类以取消单击中的 if 语句。这没有用,我感觉是因为 .notHovered 类已经绑定了?

我不知道如何解决这个问题,任何帮助将不胜感激。

    <div class=".intro-wrapper notHovered"></div>

    $("btn").click(function() 
        $(".intro-wrapper").slideDown(duration:300,queue:false);    
        if ( $(".intro-wrapper").hasClass("notHovered") ) 
            setTimeout(function() 
                    $(".intro-wrapper").slideUp(duration:300,queue:false);
            ,6000);                
         
    );


    $( ".intro-wrapper" ).hover(
    function() 
        $(".intro-wrapper").removeClass("notHovered");
    , function() 
        setTimeout(function() 
            $(".intro-wrapper").slideUp(duration:300,queue:false);
        ,6000);
    );

【问题讨论】:

【参考方案1】:

将超时返回给一个公共变量,以便在鼠标进入intro-wrapper 元素时将其清除,并在鼠标再次离开该元素时重新附加:

var timer;

$(".btn").on('click', function() 
    $(".intro-wrapper").slideDown(300);
    timer = setTimeout(function() 
         $(".intro-wrapper").slideUp(300);
    , 5000);                
);


$( ".intro-wrapper" ).on(
    mouseenter: function() 
        clearTimeout(timer);
    ,
    mouseleave: function() 
        timer = setTimeout(function() 
            $(".intro-wrapper").slideUp(300);
        , 5000);
    
);

请注意$('btn') 选择了一个看起来像&lt;btn&gt;&lt;/btn&gt; 的元素,这是无效的,并且您通常不会在声明类时使用句点

<div class=".intro-wrapper notH
 //         ^^ woot

【讨论】:

太棒了!这非常有效,非常有意义,感谢您的帮助和解释!

以上是关于jquery slideUp on click,在 mouseleave 上悬停重置时停止的主要内容,如果未能解决你的问题,请参考以下文章

slideUp 和 slideDown jQuery

jQuery - 等到 SlideUp() 结束

jQuery

jQuery动画上下滑动slideDown() slideUp() slideToggle()用法

jquerymobile,手机端click无效

js中的动态效果