遅いアニメーションを使用して背景画像を変更したいのですが、機能しません
$('body').stop().animate({background:'url(1.jpg)'},'slow');
構文に何か問題があります!!
画像の不透明度を0にフェードしてから背景画像を変更し、最後に画像を再びフェードインすることで、同様の効果を得ることができます。
これには、ページの他のすべての背後にあるbodyと同じ幅のdivが必要です。
<body>
<div id="bg"></div>
...
</body>
CSSを使用して、ページと同じ幅にすることができます。
#bg {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
そして、そのプロパティをアニメーション化します。
$('#bg')
.animate({opacity: 0}, 'slow', function() {
$(this)
.css({'background-image': 'url(1.jpg)'})
.animate({opacity: 1});
});
2つ目の背景divをこのdivの上に置くことで、さらにクロスオーバー効果を得ることができ、それをフェードインできます。
JQueryドキュメントから:
数値以外のプロパティは、基本的なjQuery機能を使用してアニメーション化できません。 (たとえば、幅、高さ、または左はアニメーション化できますが、背景色はアニメーション化できません。)
背景画像の追加/置換をアニメーション化することはできません。 URLが存在するかどうか。間に状態はありません。
私は、faux divを使用して固定要素として背景をカバーし、その要素をアニメーション化します:
<div id="bgDiv" style='display:none;background:URL("Water lilies.jpg");position:fixed; width: 100%; height: 100%; z-index: -1'></div>
<script type="text/javascript">
$(document).ready(function(){
$('#bgDiv').toggle(1000); //You can plugin animate function here.
});
</script>
ここに私がそれをした方法があります:
$(this).animate({
opacity: 0
}, 100, function() {
// Callback
$(this).css("background-image", "url(" + new_img + ")").promise().done(function(){
// Callback of the callback :)
$(this).animate({
opacity: 1
}, 600)
});
});
これを実現する方法は、onclickで背景画像を含む新しいクラスを追加することです。その後、これをアニメートしますか?または、画像をフェードアウトして新しい画像を表示しますか?