2009-11-12 27 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