Jquery - 突出显示div / greout out of page

时间:2013-01-03 21:20:59

标签: jquery fadeout

我正在尝试突出显示页面其余部分的div / grey。我的代码是:

jQuery(document).ready(function ($) {
$('.entry-content').mouseover(function(e) {
$('.expose').mouseover(function(e){
    $(this).css('z-index','99999');
    $('#overlay').fadeIn(300);
});
});

$('.entry-content').mouseleave(function(e) {
$('.expose').mouseleave(function(e){
    $('#overlay').fadeOut(0, function(){
        $('.expose').css('z-index','1');
});});});});

HTML看起来像

<div id="overlay">
<div class="entry-content">
  <div class="expose">something</div>
  <div class="expose">something</div>
  <div class="expose">something</div>
</div>

#overlay {
background:rgba(0,0,0,0.3);
display:none;
width:100%; height:100%;
position:absolute; top:0; left:0; z-index:99998;
}

我所追求的只要用户将鼠标悬停在入口内容div上,让页面显示为灰色并突出显示他正在盘旋的div。

有什么想法吗? 感谢

2 个答案:

答案 0 :(得分:6)

z-index相对于堆叠上下文,而不是相对于文档。如果您希望expose元素显示在叠加层上,则它们必须是兄弟姐妹,或者您必须使用.expose明确定位position:*

通常,元素必须是相同堆叠上下文的一部分才能比较它们的z-index值。您可以详细了解堆叠上下文here

其他一些要点:

  1. 您应该使叠加层对指针事件透明。您可以使用pointer-events:none;
  2. 执行此操作
  3. 当容器被鼠标悬停时,您无需绑定到.expose。将处理程序与处理程序并行绑定以显示/隐藏覆盖
  4. 这是更正后的代码。您可以看到工作演示here

    <强> CSS:

    #overlay {
        background:rgba(0,0,0,0.3);
        display:none;
        width:100%;
        height:100%;
        position:absolute;
        top:0;
        left:0;
        z-index:99998;
        pointer-events:none
    }
    .expose{
        background-color:red;
        position:relative;
    }
    

    <强> JS:

    $('.entry-content').hover(function() {
        $('#overlay').fadeIn(300);
    }, function() {
        $('#overlay').fadeOut(300);
    });
    
    $('.expose').hover(function(e) {
        $(this).css('z-index', '99999');
    },function(e) {
        $(this).css('z-index', '1');
    });
    

答案 1 :(得分:1)

您可以在没有叠加并使用CSS3的情况下模拟此行为

example jsfiddle

<div class="wrapper">
    <div class="entry-content">
      <div class="expose">something</div>
      <div class="expose">something</div>
      <div class="expose">something</div>
    </div>
</div>​
html, body, .wrapper {
    padding:0;
    margin:0;
    height:100%;
    width:100%;
}

.wrapper {
    -webkit-transition:all 300ms;
    -moz-transition:all 300ms;
    -ms-transition:all 300ms;
    -o-transition:all 300ms;
    transition:all 300ms;
}

.wrapper:hover {
    background:rgba(0,0,0,.3);
}

.wrapper:hover .expose {
    background:#ddd;
}

.entry-content {
    padding:6px;
}

.expose {
    margin-bottom:6px;
    padding:12px;
    border-radius:3px;
    background:#eee;
}

.expose:hover {
    background:#fff!important;
}
​