jQuery:単純なオーバーレイを作成するにはどうすればよいですか?


95

UIなしでjQueryで本当に基本的なオーバーレイを作成するにはどうすればよいですか?

軽量プラグインとは何ですか?

回答:


202

オーバーレイは、簡単に言えば、画面上に固定された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が隠されていたいと思うかもしれませんし、ブロックとnoneに表示を設定し、あなたがそれ必要かどうかなど。

それが役に立てば幸い!

編集: @Vitalyは非常にうまく言えば、DocTypeを確認してください。彼の調査結果に関するコメントを読んでください。


これはIE8では機能しません。「オーバーレイ」はコンテンツの下に表示されます。これを修正する方法はありますか?
ヴィタリー

9
とった。ドックタイプを<!DOCTYPE html PUBLIC "-// W3C // DTD HTML 4.1 Transitional // EN">から<!DOCTYPE html PUBLIC "-// W3C // DTD XHTML 1.0 Transitional // EN">に変更して作成する必要がありましたIEは「位置:修正済み」を理解します。
ヴィタリー

3
いいね!ありがとう!Googlerが通り過ぎるのを簡単にするために、質問での発見を共有します!;)
フランキー

6
コンテンツをそのオーバーレイに追加したいが半透明にしたくない場合は、不透明度エントリの代わりにbackground:#000000; background-color:rgba(0,0,0、.5)を使用してください。rgbaが古いブラウザをサポートする前の背景:#000000。
Shanimal 2012

3
ヒント:クロスブラウザーサポートの場合は、1x1pxの半透明画像(gifまたはpng)を使用してください。そうすると、簡単に次のように設定できますbackground-image: url('semi-transparent-pixel.png');
jave.web

16

これは単純な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


4
A <table>?1990年代ですか?
MECU

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

1

すでにjqueryを使用している場合、軽量オーバーレイプラグインも使用できない理由はわかりません。他の人々はすでにjqueryでいくつかの素晴らしいものを書いているので、なぜ車輪を再発明するのですか?


1
どの軽量オーバーレイプラグインがありますか?
aoghq 2009年

15
3行のコードで完全に許容できるホイールを作成できるのに、なぜベルとホイッスル付きのホイールを借りるのですか?プラグインが常に最良のソリューションであるとは限りません。
ジョエル

5
FFで適切に動作する可能性がある3行のコードですが、IEのバージョンによっては問題がある可能性があります。少なくとも既知のツールでは、ほとんどの問題はすでに解決されています。
Dan Breen、

6
プラグインの使用を提案する場合は、適切と思われるものを1つ以上提案する必要があります。そうでなければ答えは本当に役に立ちません...
Hinek

@Hinek-私が答えた後、彼は質問を言い換えました。彼は当初、ライブラリを使用せずにオーバーレイを要求しました。私は、最初からオーバーレイを実装することに不満を感じるよりも、オーバーレイを使用する方がオーバーヘッドは多くないことを示唆していました。
Dan Breen

1

このjQueryプラグインを確認してください、

blockUI

これにより、すべてのページまたは要素をオーバーレイでき、私にとってはうまくいきます、

例:divをブロックします。 $('div.test').block({ message: null });

ページをブロック: $.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' }); 誰かを助けることを願っています

ご挨拶


0

オーバーレイとは、ページの残りの部分と重なっている/カバーしているコンテンツを意味しますか?HTMLでは、絶対位置または固定位置を使用するdivを使用してこれを行うことができます。動的に生成する必要がある場合、jQueryは位置スタイルが適切に設定されたdivを生成するだけで済みます。


0

オーバーレイをどうするつもりですか?静的な場合、たとえば、一部のコンテンツに重なる単純なボックスの場合は、CSSで絶対配置を使用します。動的な場合(これはライトボックスと呼ばれていると思います)、CSSを変更するjQueryコードを記述して、オーバーレイをオンデマンドで表示/非表示にすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.