隐藏和显示元素(切换)仅一段时间然后消失

hide and show element(toggle) only for some time and then fade away

我需要在 div 中隐藏一个带有 link 的 div。起初,它仍然可见,并且 undo link 允许撤消该操作。如果在 1.5-3 秒的范围内没有执行撤消操作,则磁贴会消失。 这是我试过的: http://jsfiddle.net/2jexgo3m/7/

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>

<style>
.metricsTile {
    width:275px;
    height:275px;
    border:1px solid #000;
}
.heading {
    width:275px;
    height:30px;
    border-bottom:1px solid #000;
}
.title {
    width:230px;
    float:left;
     border:1px solid #000;
}
.hideTile {
    width:25px;
    float:left;
    padding-left:5px;
    border:1px solid #000;
}
.content {
    width:275px;
}
.hideTile {
    font-size:13px;
}
.hidden {
    display:none;
}
.undoHide {
    display:none;
}
</style>
<script>
    $(function() {
        var hide = $('.undoHide').data('hidden'); 
            $("div.hideTile").click(function () {
            $(this).closest('.metricsTile').find('.content').hide();
            if ($('.undoHide').css('display') == 'none') {
                $(".undoHide").css("display","block");
                hide = $('.undoHide').data('hidden',true); 
            }        
            $(".title").html("Hidden");
            $(".undoHide").click(function () {
                $('.content').show();
                $(".undoHide").css("display","none");
                $('.title').html('BUSINESS');
                hide = $('.undoHide').data('hidden',false);  
           });

          if( $('.undoHide').attr("data-hidden") == 'true' )  {
           setTimeout(function() {   //calls click event after a certain time
           $('.metricsTile').fadeOut().remove();
           }, 3000);  
        }  
        });
    });
</script>
</head>
<body id="index" class="home">
<div class="metricsTile">
    <div class="heading">
        <div class="title">TITLE</div>
        <div class="hideTile">hide</div>       
   </div>
    <div class="content">
        <p>Description and Images</p>
    </div>
    <div class="undoHide" data-hidden="">Undo</div>
</div>
</body>
</html>

淡出部分不起作用。

SO 上的这个问题看起来很相似,但对我的情况没有帮助。 Make hidden div appear then fade away?

如果能帮助我理解我在哪里犯了错误,我们将不胜感激。

用 clearTimeout() 试试,你也有一些理解问题。

这里的这部分永远不会是真的:

if( $('.undoHide').attr("data-hidden") == 'true' )  {
       setTimeout(function() {   //calls click event after a certain time /> Hmm, no click event in here...
       $('.metricsTile').fadeOut().remove();
       }, 3000);  
    }  

它在页面加载时调用一次,因此您必须在点击时检查它:

$(function () {
    var timeout;
    $("div.hideTile").click(function () {
        $(this).closest('.metricsTile').find('.content').hide();
        $('.undoHide').show();
        $(".title").html("Hidden");
        timeout = setTimeout(function () { //calls fadeout after a time
            $('.metricsTile').fadeOut(function(){
                $(this).remove();
            });
        }, 3000);

    });

    $(".undoHide").click(function () {
        clearTimeout(timeout);
        $('.content').show();
        $(".undoHide").hide();
        $('.title').html('BUSINESS');
    });
});

这里是fiddlehttp://jsfiddle.net/jvhjqcfu/ 希望对你有帮助