jQuery: Nasıl basit bir kaplama oluşturabilirim?


95

UI olmadan jQuery'de nasıl gerçekten temel bir kaplama oluşturabilirim?

Hafif bir eklenti nedir?

Yanıtlar:


202

Basitçe ifade etmek gerekirse, ekranda sabitdiv kalan (kaydırsanız bile) ve bir çeşit opaklığa sahip olan bir yer paylaşımıdır .

Bu, 0,5'lik tarayıcılar arası opaklık için CSS'niz olacaktır:

#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;
}

Bu sizin jQuery kodunuz olacaktır (kullanıcı arayüzüne gerek yoktur). #Overlay kimliğiyle yeni bir öğe oluşturacaksınız. DIV'yi yaratmak ve yok etmek ihtiyacınız olan tek şey olmalıdır.

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

İçin performans nedenleriyle Eğer DIV gizli ve adres isteyebilirsin engellemek için ekranı ve hiçbiri ayarı İhtiyacınız veya değil.

Umarım yardımcı olur!

Düzenleme: @Vitaly'nin çok iyi ifade ettiği gibi, DocType'ınızı kontrol ettiğinizden emin olun. Bulguları hakkındaki yorumların devamını okuyun ..


Bu, IE8'de çalışmaz. "Yer paylaşımı" içeriğin altında gösterilir. Bunu nasıl düzelteceğine dair bir fikrin var mı?
Vitaly

9
Anladım. Doküman türünü <! DOCTYPE html PUBLIC "- // W3C // DTD HTML 4.1 Transitional // EN"> yerine <! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN"> yapmak için değiştirmek gerekiyordu IE, "konum: sabit" i anlar.
Vitaly

3
Güzel! Teşekkürler! Google çalışanlarının geçmesini kolaylaştırmak için soru hakkındaki keşfinizi paylaşacağım! ;)
Frankie

6
Bu kaplamaya içerik eklemek istiyor ancak yarı opak olmasını istemiyorsanız, opaklık girişleri yerine background: # 000000; background-color: rgba (0,0,0, .5) kullanın. Arka plan: # 000000 önceki rgba eski tarayıcıları destekler.
shanimal

3
İPUCU: Çapraz tarayıcı desteği için 1x1px yarı saydam resim (gif veya png) kullanın ... daha sonra kolaycabackground-image: url('semi-transparent-pixel.png');
jave.web

16

İşte sadece basit bir javascript çözümü

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/

Ana fikir:

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


4
A <table>? 1990'lar mı?
MECU

3

Burada, data-photo-overlay = 'true olan herhangi bir IMG öğesine bir kaplama (bir paylaş düğmesi dahil) ekleyen tam kapsamlı bir sürüm.

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

1

Zaten jquery kullanıyorsanız, neden hafif bir overlay eklentisi de kullanamayacağınızı anlamıyorum. Diğer insanlar jQuery'de zaten güzel şeyler yazdılar, öyleyse neden tekerleği yeniden icat edelim?


1
hangi hafif yer paylaşımı eklentisi var?
aoghq

15
3 satır kodda mükemmel şekilde kabul edilebilir bir tekerlek oluşturabilecekken neden zil ve ıslık içeren bir tekerlek ödünç alasınız? Eklentiler her zaman en iyi çözüm değildir.
Joel

5
FF'de güzel çalışabilecek 3 satırlık kod, ancak bazı IE sürümlerinde tuhaflıklar olabilir. En azından bilinen bir araçla, karışıklıkların çoğu halihazırda çözüldü.
Dan Breen

6
Bir eklenti kullanmanızı önerirseniz, uygun bulduğunuz bir veya daha fazlasını önermelisiniz. Aksi takdirde cevap gerçekten yardımcı olmaz ...
Hinek

@Hinek - Ben cevapladıktan sonra soruyu yeniden ifade etti. Başlangıçta bir kitaplık kullanmadan bir yer paylaşımı istedi ve ben bir tanesini sıfırdan uygulamaktan hüsrana uğramak yerine kullanmanın çok fazla ek yük olmadığını söylüyordum.
Dan Breen

1

Lütfen bu jQuery eklentisini kontrol edin,

blockUI

bununla tüm sayfayı veya öğeleri üst üste koyabilirsiniz, benim için harika çalışıyor,

Örnekler: Bir div'i engelleme: $('div.test').block({ message: null });

Sayfayı engelleyin: $.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' }); Umarım birine yardımcı olur

Selamlar


0

Kaplama derken, sayfanın geri kalanıyla örtüşen / kaplayan içeriği mi kastediyorsunuz? HTML'de, mutlak veya sabit konumlandırma kullanan bir div kullanarak bunu yapabilirsiniz. Dinamik olarak oluşturulması gerekiyorsa, jQuery, konum stili uygun şekilde ayarlanmış bir div oluşturabilir.


0

Yer paylaşımıyla ne yapmayı düşünüyorsunuz? Statik ise, örneğin, bazı içeriklerle örtüşen basit bir kutu ise, CSS ile mutlak konumlandırmayı kullanın. Dinamikse (buna ışık kutusu dendiğine inanıyorum), kaplamayı isteğe bağlı olarak göstermek / gizlemek için bazı CSS değiştirici jQuery kodu yazabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.