web-dev-qa-db-ja.com

背景(css)画像が読み込まれたことを確認する方法は?

私は次のCSSクラスを持っています

.bg {
   background-image: url('bg.jpg');
   display: none;
}

TDタグに適用しています。

私の質問は、JavaScript/jQueryを使用して、背景画像の読み込みが完了したことをどのように確認できるかです。

ありがとうございました。

更新:表示プロパティを追加しました。私の主な目的以来、それはビューに切り替えます。

27
thedp

これを行うために私が知っている唯一の方法は、Javascriptを使用して画像をロードし、その画像を背景として設定することです。

例えば:

var bgImg = new Image();
bgImg.onload = function(){
   myDiv.style.backgroundImage = 'url(' + bgImg.src + ')';
};
bgImg.src = imageLocation;
44
Jamie Dixon

@ジェイミーディクソン-彼は背景画像で何もしたいとは言わなかった、ただそれがいつロードされるかを知っている...

$(function( )
{
    var a = new Image;
    a.onload = function( ){ /* do whatever */ };
    a.src = $( 'body' ).css( 'background-image' );
});
3
Dan Beam

最初のページの読み込み時にvisibility:hiddenを使用してクラスをdivに渡します。そうすれば、クラスをテーブルセルに割り当てるときに、ブラウザのキャッシュにすでに存在します。

3
Gausie

この記事はあなたを助けるかもしれません 。関連セクション:

// Once the document is loaded, check to see if the
// image has loaded.
$(
    function(){
        var jImg = $( "img:first" );

        // Alert the image "complete" flag using the
        // attr() method as well as the DOM property.
        alert(
            "attr(): " +
            jImg.attr( "complete" ) + "\n\n" +

            ".complete: " +
            jImg[ 0 ].complete + "\n\n" +

            "getAttribute(): " +
            jImg[ 0 ].getAttribute( "complete" )
        );
    }
);

基本的に背景画像を選択し、ロードされていることを確認します。

2
AJM

また、imgタグをdiv/backgroundに置き換えるだけの関数を提供して、onload属性とdivの柔軟性の両方を活用することもできます。

もちろん、必要に応じてコードを微調整することもできますが、私の場合は、幅または高さのいずれかが保持されていることを確認して、期待するものをより適切に制御できるようにします。

私のコードは次のとおりです。

<img src="imageToLoad.jpg" onload="imageLoadedTurnItAsDivBackground($(this), true, '')">

<style>
.img-to-div {
    background-size: contain;
}
</style>

<script>
// Background Image Loaded
function imageLoadedTurnItAsDivBackground(tag, preserveHeight, appendHtml) {

    // Make sure parameters are all ok
    if (!tag || !tag.length) return;
    const w = tag.width();
    const h = tag.height();

    if (!w || !h) return;

    // Preserve height or width in addition to the image ratio
    if (preserveHeight) {
        const r = h/w;
        tag.css('width', w * r);
    } 
    else {
        const r = w/h;
        tag.css('height', h * r);
    }
    const src = tag.attr('src');

    // Make the img disappear (one could animate stuff)
    tag.css('display', 'none');

    // Add the div, potentially adding extra HTML inside the div
    tag.after(`
        <div class="img-to-div" style="background-image: url(${src}); width: ${w}px; height:${h}px">${appendHtml}</div>
    `);

    // Finally remove the original img, turned useless now
    tag.remove();
}
</script>
0