Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery .mouseleave()与.delay()一起工作_Jquery_Delay_Mouseleave - Fatal编程技术网

Jquery .mouseleave()与.delay()一起工作

Jquery .mouseleave()与.delay()一起工作,jquery,delay,mouseleave,Jquery,Delay,Mouseleave,我有几个“触发器”(s)的列表,每个触发器显示一个特定的DIV,每个DIV都有“关闭”按钮 现在,我想通过在opened/visible DIV中添加计时器/延迟来提高可用性,这样在用户将鼠标移离触发器3秒或5秒后,opened/visible DIV就会消失 我现在遇到的问题是,每当我使用.mouseleave()添加函数时,一旦鼠标离开触发区域,opened/visible DIV就会隐藏 但是,如果删除该函数,DIV将保持可见,您可以通过单击close按钮将其关闭 这是我的情况的一个例子

我有几个“触发器”(
  • s
  • )的列表,每个触发器显示一个特定的DIV,每个DIV都有“关闭”按钮

    现在,我想通过在opened/visible DIV中添加计时器/延迟来提高可用性,这样在用户将鼠标移离触发器3秒或5秒后,opened/visible DIV就会消失

    我现在遇到的问题是,每当我使用.mouseleave()添加函数时,一旦鼠标离开触发区域,opened/visible DIV就会隐藏

    但是,如果删除该函数,DIV将保持可见,您可以通过单击close按钮将其关闭

    这是我的情况的一个例子

    任何帮助都将不胜感激


    谢谢。

    您需要一段隐藏时间:

    $('.copy .wrapper').delay(3000).hide('fast');
    你可以看看这些文件

    更新 这就是你要找的吗

    $('.trigger').bind("mouseenter" , function() {    
        var id = $(this).attr("data-code"); // Get the data from the hovered element
        $('.copy .wrapper:visible').fadeOut();
        $('#' + id).stop(true, true).show(); // Toggle the correct div    
        //Close button
        $('.copy .wrapper span').click(function() {
            $('.copy .wrapper').fadeOut();
        });
    });

    就是这样,摆脱mouseleave listener

    @locrizak的答案是正确的(+1)。这是因为
    .delay()
    默认为效果队列,但不带参数的
    .hide()
    会隐藏选定的元素而不产生任何效果,因此效果队列根本不涉及

    如果要隐藏而不显示任何动画,只需使用:


    最后一次编辑,我保证
    演示:

    使用
    设置超时
    而不是
    延迟

    工作演示:

    从文件:

    .delay()方法最适合于 排队jQuery之间的延迟 影响。因为它是有限的 例如,没有提供一种 取消延迟-。延迟()不是 替代JavaScript的本机 setTimeout函数,可能更详细 适用于某些用例


    洛里扎克,谢谢。然而,尽管可见DIV隐藏在mouseleave上,“close”按钮不起作用。ie:。我确实查阅了jQuery的.delay()文档,但我对JS.Matt不太精通,谢谢。我使用了setTimeout函数,但它不起作用,尽管我不确定是否应该将它放在$('.trigger').hover(函数()中)我不理解你的困惑。你看了JSFIDLE了吗?它几乎可以100%工作。问题是,如果你先悬停在另一个项目上,然后再悬停在下一个项目上,但是初始包装还没有消失,那么两个包装同时消失,然后如果你悬停在任何触发器上,它相应的即使您将鼠标停留在触发器上,一秒钟后,触发器也会消失。谢谢。顺便说一句,不要调用
    。单击
    .hover()中的()
    因为每次都会重新绑定
    单击
    处理程序。嗯,我不认为我可以重现这个问题,但我猜一下。这对你有好处吗?marcosfromero,我在Matt的帖子中提到过同样的问题。谢谢。
    
    $('.trigger').mouseleave(function() {
        setTimeout(function () {
            $('.copy .wrapper').hide();
        }, 3000);
    });
    
    //Show-Hide divs
    var current;
    $('.trigger').live('mouseenter', function() {    
        var id = current = $(this).data('code');
        $('#' + id).show().siblings().fadeOut();
    }).live('mouseleave', function() {
        var id = $(this).data('code');
        current = null;
        setTimeout(function ()
        {
            if (current !== id) $('#' + id).hide(1);
        }, 3000);
    });
    
    //Close button
    $('.copy .wrapper span').live('click', function() {
        $(this).closest('.wrapper').stop(true, true).fadeOut();
    });