2009-11-12 23 views

回答

188

覆蓋是,簡單地說,div保持固定在屏幕上(無論滾動),並有某種不透明度。

這將是您的0.5跨瀏覽器的不透明度CSS:

#overlay { 
    position: fixed; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    background-color: #000; 
    filter:alpha(opacity=50); 
    -moz-opacity:0.5; 
    -khtml-opacity: 0.5; 
    opacity: 0.5; 
    z-index: 10000; 
} 

這將是你的jQuery代碼(不需要UI)。您只需使用ID #overlay創建一個新元素。 創建和銷燬DIV應該是您所需要的。

var overlay = jQuery('<div id="overlay"> </div>'); 
overlay.appendTo(document.body) 

對於你可能想有DIV隱藏和設置顯示阻止,沒有,因爲你需要與否性能的原因。

希望它有幫助!

編輯:由於@Vitaly這麼好,所以一定要檢查你的DocType。閱讀更多關於他的調查結果的評論..

+0

這在IE8中不起作用。 「覆蓋」顯示在下面的內容中。任何想法如何解決這一問題? – Vitaly 2010-10-13 09:39:51

+0

@Vitaly是否將疊加DIV放在頁面的頂部?與'位置:固定;頂部:0;左:0'如果是的話,讓我知道,當我到辦公室時,我會看看它。 – Frankie 2010-10-13 09:46:09

+0

是的,就像你那樣。將位置設置爲「絕對」可以使其工作,但不會覆蓋文檔的右邊緣並與其餘內容一起滾動。 – Vitaly 2010-10-13 09:47:29

1

如果你已經在使用jquery,我不明白你爲什麼不能使用輕量級的overlay插件。其他人已經寫了一些很好的jquery,所以爲什麼重新發明輪子?

+1

哪個輕量級疊加插件在那裏? – aoghq 2009-11-12 00:09:06

+14

爲什麼藉助花車輪輞可以在3行代碼中創建完美的車輪?插件並不總是最好的解決方案。 – Joel 2009-11-12 00:55:33

+5

3行代碼可能在FF中很好地工作,但在某些版本的IE中可能會出現怪癖。至少在已知的工具中,大部分扭曲都已經被解決。 – 2009-11-12 01:56:07

0

通過疊加你是指重疊/覆蓋頁面的其餘部分的內容?在HTML中,你可以通過使用絕對定位或固定定位的div來實現。如果需要動態生成,jQuery可以簡單地生成適當位置樣式的div。

0

你打算如何處理疊加層?如果它是靜態的,比如說一個重疊一些內容的簡單框,那麼就使用絕對定位與CSS。如果它是動態的(我相信這被稱爲一個燈箱),你可以寫一些CSS修改jQuery代碼來顯示/隱藏覆蓋按需。

3

這是一個完全封裝的版本,它向data-photo-overlay ='true的任何IMG元素添加覆蓋(包括分享按鈕)。

的jsfiddle http://jsfiddle.net/wloescher/7y6UX/19/

HTML

<img id="my-photo-id" src="http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png" alt="Photo" data-photo-overlay="true" /> 

CSS

#photoOverlay { 
    background: #ccc; 
    background: rgba(0, 0, 0, .5); 
    display: none; 
    height: 50px; 
    left: 0; 
    position: absolute; 
    text-align: center; 
    top: 0; 
    width: 50px; 
    z-index: 1000; 
} 

#photoOverlayShare { 
    background: #fff; 
    border: solid 3px #ccc; 
    color: #ff6a00; 
    cursor: pointer; 
    display: inline-block; 
    font-size: 14px; 
    margin-left: auto; 
    margin: 15px; 
    padding: 5px; 
    position: absolute; 
    left: calc(100% - 100px); 
    text-transform: uppercase; 
    width: 50px; 
} 

的JavaScript

(function() { 
    // Add photo overlay hover behavior to selected images 
    $("img[data-photo-overlay='true']").mouseenter(showPhotoOverlay); 

    // Create photo overlay elements 
    var _isPhotoOverlayDisplayed = false; 
    var _photoId; 
    var _photoOverlay = $("<div id='photoOverlay'></div>"); 
    var _photoOverlayShareButton = $("<div id='photoOverlayShare'>Share</div>"); 

    // Add photo overlay events 
    _photoOverlay.mouseleave(hidePhotoOverlay); 
    _photoOverlayShareButton.click(sharePhoto); 

    // Add photo overlay elements to document 
    _photoOverlay.append(_photoOverlayShareButton); 
    _photoOverlay.appendTo(document.body); 

    // Show photo overlay 
    function showPhotoOverlay(e) { 
     // Get sender 
     var sender = $(e.target || e.srcElement); 

     // Check to see if overlay is already displayed 
     if (!_isPhotoOverlayDisplayed) { 
      // Set overlay properties based on sender 
      _photoOverlay.width(sender.width()); 
      _photoOverlay.height(sender.height()); 

      // Position overlay on top of photo 
      if (sender[0].x) { 
       _photoOverlay.css("left", sender[0].x + "px"); 
       _photoOverlay.css("top", sender[0].y) + "px"; 
      } 
      else { 
       // Handle IE incompatibility 
       _photoOverlay.css("left", sender.offset().left); 
       _photoOverlay.css("top", sender.offset().top); 
      } 

      // Get photo Id 
      _photoId = sender.attr("id"); 

      // Show overlay 
      _photoOverlay.animate({ opacity: "toggle" }); 
      _isPhotoOverlayDisplayed = true; 
     } 
    } 

    // Hide photo overlay 
    function hidePhotoOverlay(e) { 
     if (_isPhotoOverlayDisplayed) { 
      _photoOverlay.animate({ opacity: "toggle" }); 
      _isPhotoOverlayDisplayed = false; 
     } 
    } 

    // Share photo 
    function sharePhoto() { 
     alert("TODO: Share photo. [PhotoId = " + _photoId + "]"); 
     } 
    } 
)(); 
15

下面是一個簡單的JavaScript唯一的解決辦法

function displayOverlay(text) { 
    $("<table id='overlay'><tbody><tr><td>" + text + "</td></tr></tbody></table>").css({ 
     "position": "fixed", 
     "top": 0, 
     "left": 0, 
     "width": "100%", 
     "height": "100%", 
     "background-color": "rgba(0,0,0,.5)", 
     "z-index": 10000, 
     "vertical-align": "middle", 
     "text-align": "center", 
     "color": "#fff", 
     "font-size": "30px", 
     "font-weight": "bold", 
     "cursor": "wait" 
    }).appendTo("body"); 
} 

function removeOverlay() { 
    $("#overlay").remove(); 
} 

演示:

http://jsfiddle.net/UziTech/9g0pko97/

要點:

https://gist.github.com/UziTech/7edcaef02afa9734e8f2

+2

複製和粘貼它的作品。愛它,thx! – Chris 2014-10-09 11:58:10

+2

A'

'?這是20世紀90年代嗎? – MECU2016-12-14 18:52:20

0

請與該檢查該jQuery插件,

blockUI

您可以覆蓋所有的頁面或元素,偉大工程對我來說,

例子: 塊一個div: $('div.test').block({ message: null });

塊網頁: $.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' }); 希望能幫助別人

Greetings