以下のようなやる気のない感じで背景画像を20秒間隔でクロスフェード(3.5秒)で切り替えるようなページを作っていたのだが,Chrome で表示する分には問題ないのだが,Chrome 以外だとことごとく無視されるということに気付く.
$(function(){
cnt=1; t=0;
body=$('body');
arr=['bg0.jpg','bg1.jpg','bg2.jpg','bg3.jpg','bg4.jpg'];
setInterval(function() {
bg='url("images/'+arr[cnt++]+'")';
if(cnt==arr.length)cnt=0;
if(t==0){body.css('transition','background 3s linear 0.5s');t=1;}
setTimeout(function(){body.css('background-image',bg);},3500);
},20000);
});
どうやら background-image は animatable ではないというのが標準ならしい.Chrome でクロスフェードできていたのは,Chrome の勝手な実装によるものならしい.
ということで,div を2枚重ねして交互に画像そ差し替えつつ fadeIn()/fadeOut() するようにとりあえずjQueryで実装.その後,div を複数重ねてCSSのみでの実装例を見付けたので,CSSのみで実装(CSSが若干見通し悪くなるので,CSSを生成するスクリプトを書いた).
参考にしたページ: