2014-11-01 108 views
0

我有一個DIV容器。我需要用另一個半透明層覆蓋它。所以,這樣我想我能做到這一點是通過以下幾個步驟:克隆新圖層

  1. 克隆初始元素
  2. 從克隆的元素
  3. 申請半透明的克隆清除患兒
  4. 得到的位置初始元素
  5. 位置克隆

這裏是我的代碼:

$('.myEm').clone().empty().addClass('semi').height(initEmHeight).insertAfter(this).css({ 'top' : pos.top + 'px', 'left' : pos.left + 'px', 'z-index' : '99'}); 

它工作,直到我開始添加CSS。我錯過了什麼?

+0

很難說沒有相關代碼的其餘部分。你能提供一個HTML代碼片段,以及'initEmHeight'和'pos'變量被設置的JavaScript嗎? – 2014-11-01 04:50:52

+0

[你的代碼在理論上工作正常](http://jsfiddle.net/08mhgw0m/)。再說一遍,我不知道我是否在猜測你的實現是什麼。 – Ohgodwhy 2014-11-01 04:55:59

+0

推測'pos'存在並且在範圍內? – 2014-11-01 05:03:00

回答

1

您可以使用CSS僞元素創建覆蓋圖,如下所示,無需手動克隆或定位。例如:

$("button").click(function() { 
 
    $(this).parent().addClass("overlay"); 
 
    alert("click"); 
 
});
#content { 
 
    position: relative; 
 
    width: 150px; 
 
    height: 100px; 
 
    background: dodgerblue; 
 
} 
 
#content.overlay::after { 
 
    content: ""; 
 
    display: block; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    background: rgba(255, 255, 255, 0.5); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="content"> 
 
    <button>click!</button> 
 
</div>

您可以通過添加和刪除#contentoverlay控制覆蓋。

+0

恐怕只有當我可以指定確切的座標時,這纔會起作用。我的元素可以在頁面上的任何地方動態生成。 – santa 2014-11-01 05:07:09

+0

@santa如果元素被定位(*除靜態*以外),它就可以工作。 '0'座標是您內容的座標,而不是窗口。無論內容的大小如何,覆蓋圖都會被拉伸以填充它。試試看... – 2014-11-01 05:14:43

+0

我真的很喜歡它。但是在我的情況下,這種中途停留是模式中途停留層的本地化版本,例如覆蓋其他元素並阻止點擊。我相信這樣會正確設計,但仍然會留下其他元素,例如可以訪問原始元素的鏈接和按鈕。 – santa 2014-11-01 14:13:35