のためのjQueryを使用する必要はありません使用することです要素のURLをbackground-image
のURLで検出してダミーの<img />
タグの一部としてロードすると、onloadイベントをアタッチして同じイメージが正常に読み込まれたかどうかを検出できます。
background-image
抽出には、実際にはurl(/path/to/image)
文字列全体が返されるため、単純な置き換えが必要になることがあります。別のオプション反転カンマと閉じることによって、その後、間に何が続く
^url\(["']?(.*?)["']?\)$
基本的パターンは、オプション反転カンマで、開始時url(
と一致しようとし、:したがって、我々は、これが一致するパターンを使用することができブラケット)
。最初のキャプチャグループはあなたの背景イメージのURLになります。 You can see how it works here。
この値がある場合、この値にダミーの<img />
要素にsrc
属性を割り当てます。この要素がload
イベントを発生させると、.header_area
要素に対して定義したアニメーションを適用するクラス.header_area--animate
を追加します。
もちろん、このロジック全体をJSで記述することはできますが、jQueryにタグが付いているので、なぜですか? ;)
$(function() {
$('<img />', {
src: $('.header_area').css('background-image').replace(/^url\(["']?(.*?)["']?\)$/gi,'$1')
}).on('load', function() {
console.log('Image loaded, adding animation');
$('.header_area').addClass('header_area--animate');
});
});
.header_area {
background-image: url("http://deelay.me/1000/http://placehold.it/1000x500");
min-height: 100vh;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
}
.header_area--animate {
animation: shrink 3s;
}
@keyframes shrink {
0% {
background-size: 110% 110%;
}
100% {
background-size: 100% 100%;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="header_area">
</div>
あなたはそのためのJSを使用する必要があります。 CSSには、イメージがロードされたかどうかを判断するロジックがありません。しかし、JSロジックは単純です:(1)イメージから起動されたonloadイベントを受け取ります。隠されたイメージ要素に読み込まれる可能性があります。(2)読み込まれたアニメーションを定義する '.header_area'にクラスを追加します。これにより、画像が正常に読み込まれた後にのみ、アニメーションがpageloadに適用されず、実行されなくなります。 – Terry