jQuery: How can i create a simple overlay?

后端 未结 7 1794
感动是毒
感动是毒 2020-11-30 19:04

How can I create a really basic overlay in jQuery without UI?

What is a lightweight plugin?

相关标签:
7条回答
  • 2020-11-30 19:06

    What do you intend to do with the overlay? If it's static, say, a simple box overlapping some content, just use absolute positioning with CSS. If it's dynamic (I believe this is called a lightbox), you can write some CSS-modifying jQuery code to show/hide the overlay on-demand.

    0 讨论(0)
  • 2020-11-30 19:07

    Please check this jQuery plugin,

    blockUI

    with this you can overlay all the page or elements, works great for me,

    Examples: Block a div: $('div.test').block({ message: null });

    Block the page: $.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' }); Hope that help someone

    Greetings

    0 讨论(0)
  • 2020-11-30 19:13

    Here's a fully encapsulated version which adds an overlay (including a share button) to any IMG element where data-photo-overlay='true.

    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 + "]");
            }
        }
    )();
    
    0 讨论(0)
  • 2020-11-30 19:16

    If you're already using jquery, I don't see why you wouldn't also be able to use a lightweight overlay plugin. Other people have already written some nice ones in jquery, so why re-invent the wheel?

    0 讨论(0)
  • 2020-11-30 19:19

    By overlay do you mean content that overlaps/covers the rest of the page? In HTML, you could do this by using a div that uses absolute or fixed positioning. If it needed to be generated dynamically, jQuery could simply generate a div with the position style set appropriately.

    0 讨论(0)
  • 2020-11-30 19:20

    Here is a simple javascript only solution

    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();
    }
    

    Demo:

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

    Gist:

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

    0 讨论(0)
提交回复
热议问题