2012-09-22 172 views
0

我想在元素移出容器時隱藏元素。但我有一個限制:我不能在我的容器中使用overflow: hidden;作爲永久性樣式。在沒有溢出的情況下隱藏容器外部的元素:隱藏

這裏是什麼,我需要一個鏈接:

http://jsfiddle.net/WVYpg/

我想知道如果有一種方法來完成它做這樣的事情dissapearing它是走出去的同時? ...在完成動畫時可能會臨時給出overflow: hidden

+1

喜歡的東西這個? http://jsfiddle.net/uhxAE/ – undefined

+0

知名度:隱藏? – Stphane

回答

0

您可以設置您要移動的容器的z-index小於它正在移出的容器,並且應該提供您要查找的效果。

+0

我試過了,但沒有奏效。已添加.container {z-index:100; } .contained {z-index:0;}。 }並且我還添加了body {z-index:200; }但包含的元素仍然可見; – Tales

2

你可以通過在元素移動到like this的位置絕對定位一個不透明元素並使用更高的z-index來僞造它,但如果那裏已經有其他內容,這並不容易。

+0

這是一個好主意,使用面具,但你是對的,在現場代碼我不能使用它。但是對於未來的項目來說,這個想法可能會奏效。 – Tales

4
$().ready(function(){ 
    $("#hide-span").click(function(){ 
    $(".contained").animate({ 
     left: "-250",opacity:"0" 
    }, 1000); 
    }); 
});​ 

Demo

$().ready(function(){ 
$("#hide-span").click(function(){ 
    $(".contained").animate({ 
     left: "-250" 
    }, 1000); 
    $(".contained").fadeOut(200); 
}); 
});​ 

Demo 2

+0

雖然這個選項給了我最終的解決方案(它移動並隱藏了它的容器外的元素),但它不提供我期待的效果。我真正想要的是在它外出時隱藏它。 – Tales

+1

@Tales:你的隱藏意思是什麼?這是在它外出時在視覺上隱藏它。如果你真的想隱藏它在'.hide()'你的CSS會搞砸,你的按鈕移動到你的容器的頂部。 – Nope

+0

那麼,你給了我一個好主意。從不透明度例子開始,我創建了一個自定義函數,它向容器元素添加了overflow:hidden,啓動動畫,並且在完成後,它給出包含元素的不透明度:0,然後從容器中移除overflow:hidden。我將發佈下面的示例,但這是您的示例的鏈接:http://jsfiddle.net/WVYpg/3/ – Tales

0

使用阿夫欣的有關透明度的想法,我理解了它。這是我的完整代碼:(您可以在這裏找到:http://jsfiddle.net/WVYpg/3/

CSS:

body{ 
    background: #0000ff; 
    position: relative; 
    z-index: 100; 
} 
div.container{ 
    width: 300px; 
    height: 300px; 
    background: #c3f1d3; 
    margin: 50px auto; 
    border: 1px solid #f00; 
    position: relative; 
    z-index: 50; 
/* overflow: hidden; */ 
} 
div.contained{ 
    display: block; 
    width: 200px; 
    height: 200px; 
    border: 1px solid #ff6600; 
    margin: 50px auto 0px auto; 
    position: relative; 
    z-index: 0; 
} 
span.text-to-hide{ 
    display: block; 
    border: 1px solid #0ec; 
    width: 175px; 
    font: bold 12px/20px "Trebuchet MS", Arial; 
    text-align: center; 
    margin: 75px auto; 
    padding: 0px; 
} 
p{ 
    display: block; 
    text-align: center; 
    margin: 10px auto; 
    padding: 0px; 
} 
input{ 
    width: 100px; 
    font: bold 12px/20px "Trebuchet MS", Arial; 
} 
.ohidden{ 
    overflow: hidden; 
}​ 

的jQuery:

/* $().ready(function(){ 
    $("#hide-span").click(function(){ 
     $(".container").css("overflow", "hidden"); 
     $(".contained").animate({ 
      left: "-250" 
     }, 1000, function(){ 
      $(".contained").css("opacity", "0"); 
      $(".container").css("overflow"); 
     }); 
    }); 
});​ */ 
$().ready(function(){ 
    $("#hide-span").click(function(){ 
     $(".container").addClass("ohidden"); 
     $(".contained").animate({ 
      left: "-250" 
     }, 1000, function(){ 
      $(".contained").css("opacity", "0"); 
      $(".container").removeClass("ohidden"); 
     }); 
    }); 
});​ 

HTML:

<body> 
    <div class="container" id="container"> 
     <div class="contained"> 
      <span class="text-to-hide">Move this text outside of container and hide it</span> 
     </div> 
     <p><input type="button" value="Hide span" id="hide-span"></p> 
    </div> 
</body>​ 
+0

您不需要不透明。當你添加'$(「.container」).css(「overflow」,「hidden」);它看起來沒有不同,有或沒有不透明度。另外你有冗餘代碼,看到你已經在函數的開始處添加了溢出CSS,你不需要在回調中再次添加行。儘管你在回調函數$(「.container」).css(「overflow」)中的行實際上並沒有做任何事情。理論上你的整個回調是多餘的,不需要你需要的只是你的第一個附加行:) – Nope

+0

我認爲你錯了。在我使用腳本的開始處:$(「.container」).css(「overflow」,「hidden」);我給溢出屬性能夠做動畫。當動畫完成時,正如我前面所述,我不能在容器上擁有一個永久性溢出屬性,我必須處理它,從容器中移除屬性,但在使其邊界可見之前,我需要隱藏所有內容,這就是$(「.contained」).css(「opacity」,「0」);.最後$(「.container」).css(「overflow」);在代碼的最後,我將刪除該屬性,而不是添加它。 – Tales

+1

對不起,我想說的是:你的回調不像你期望的那樣工作。 'overflow:hidden'是**不被刪除。請運行你的小提琴和鉻例如使用調試工具,並檢查你的HTML,它顯示你隱藏的溢出仍然存在。您也可以通過簡單地刪除線來設置不透明度來測試它,理論上最終應該使div可見,但它不會在調用完成後仍然應用於容器。 – Nope