如何在没有UI的jQuery中创建一个真正基本的覆盖层?什么是轻量级插件?
20jt8wwn1#
简单地说,覆盖是一个div,它在屏幕上保持固定(无论你是否滚动),并具有某种不透明性。这将是跨浏览器不透明度为0.5时的CSS:
div
#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 #覆盖的新元素。创建和销毁DIV应该是您所需要的全部。
var overlay = jQuery('<div id="overlay"> </div>'); overlay.appendTo(document.body)
出于性能原因,您可能希望隐藏DIV并根据需要将显示设置为阻塞和无。
**编辑:**正如@Vitaly所说,一定要检查你的DocType。阅读更多关于他发现的评论。
zkure5ic2#
下面是一个简单的只使用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
biswetbf3#
下面是一个完全封装的版本,它向data-photo-overlay ='true的任何IMG元素添加了一个覆盖层(包括一个共享按钮)。
<img id="my-photo-id" src="http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png" alt="Photo" data-photo-overlay="true" />
#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; }
(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 + "]"); } } )();
j2datikz4#
如果你已经在使用jquery,我不明白为什么你不能使用一个轻量级的覆盖插件,其他人已经用jquery写了一些不错的插件,那么为什么要重新发明轮子呢?
kuuvgm7e5#
请检查此jQuery插件,blockUI有了这个你可以覆盖所有的页面或元素,对我来说效果很好,示例:块化div:第一个月阻止页面:$.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' });希望能帮助到别人问候
$.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' });
ffx8fchx6#
overlay是指覆盖页面其余部分的内容吗?在HTML中,可以使用div来实现这一点,div使用绝对或固定定位。如果需要动态生成,jQuery可以简单地生成一个div,并适当设置位置样式。
piok6c0g7#
您打算如何处理覆盖层?如果它是静态的,比如说,一个简单的框覆盖了一些内容,只需使用CSS的绝对定位。如果它是动态的(我相信这被称为lightbox),您可以编写一些CSS修改jQuery代码来按需显示/隐藏覆盖层。
7条答案
按热度按时间20jt8wwn1#
简单地说,覆盖是一个
div
,它在屏幕上保持固定(无论你是否滚动),并具有某种不透明性。这将是跨浏览器不透明度为0.5时的CSS:
这将是您的jQuery代码(不需要UI)。您只需要创建一个带有ID #覆盖的新元素。创建和销毁DIV应该是您所需要的全部。
出于性能原因,您可能希望隐藏DIV并根据需要将显示设置为阻塞和无。
**编辑:**正如@Vitaly所说,一定要检查你的DocType。阅读更多关于他发现的评论。
zkure5ic2#
下面是一个简单的只使用javascript的解决方案
演示:
http://jsfiddle.net/UziTech/9g0pko97/
要点:
https://gist.github.com/UziTech/7edcaef02afa9734e8f2
biswetbf3#
下面是一个完全封装的版本,它向data-photo-overlay ='true的任何IMG元素添加了一个覆盖层(包括一个共享按钮)。
j2datikz4#
如果你已经在使用jquery,我不明白为什么你不能使用一个轻量级的覆盖插件,其他人已经用jquery写了一些不错的插件,那么为什么要重新发明轮子呢?
kuuvgm7e5#
请检查此jQuery插件,
blockUI
有了这个你可以覆盖所有的页面或元素,对我来说效果很好,
示例:块化div:第一个月
阻止页面:
$.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' });
希望能帮助到别人问候
ffx8fchx6#
overlay是指覆盖页面其余部分的内容吗?在HTML中,可以使用div来实现这一点,div使用绝对或固定定位。如果需要动态生成,jQuery可以简单地生成一个div,并适当设置位置样式。
piok6c0g7#
您打算如何处理覆盖层?如果它是静态的,比如说,一个简单的框覆盖了一些内容,只需使用CSS的绝对定位。如果它是动态的(我相信这被称为lightbox),您可以编写一些CSS修改jQuery代码来按需显示/隐藏覆盖层。