2011-12-27 73 views
8

イメージをプリロードする方法はたくさんありますが、jqueryを使って背景イメージをプリロードするのに役立つものはありません。プリロードの背景画像

私は私が達成したいものの単純なHTMLモックアップを作った: http://jsfiddle.net/3rfhr/

  • 負荷のdivが
  • 背景が
  • ロードのdivが
  • 背景DIVが
  • 現れ消えロードされ、表示されます

私はdiv遷移を処理できますが、どのように私はCSSの背景を事前にロードする必要があります。私の質問を読んでくれてありがとう:)

答えて

7

それは背景画像である限り、あなたはできません。正常にロードし、背景イメージを設定します。このようなもの:

var $img = $('<img src="' + src + '">'); 
$img.bind('load', function(){ 
    $('.yourDiv').css('background-image', 'url(' + src + ')'); 
}); 
if($img[0].width){ $img.trigger('load'); } 

画像がキャッシュされている場合は、一部のブラウザで最後の行が必要です。

+0

アハは、など'src'部分は画像のURLに置き換えられますか? – pufAmuf

+0

はい、 'src'はイメージURLです。必要なものを設定してください。 Chris Kempenさんの答えは、CSSからsrcを取得しているという点で良い考えですが、2行目の内容がわかりません –

+1

強い単語ではありません。ファイルApiを使用して画像を読み込み、src属性を「data:image/gif; base64、... my ... encoded ... image」に設定することができます。 別の記事への参照については、この技術。 –

0

A working exampleモックsetTimeoutを使用して読み込み時間をシミュレートします。

関連のjQueryのコードは次のとおりです。

$('#LOADING-SIGN-DIV').fadeOut(); 
$('#DIV-THAT-NEEDS-PRELOADING').fadeIn(); 
+1

'setTimeout'はこのために使用すべきではありません... –

+0

' setTimeout'は読み込み時間をシミュレートするためだけにあり、他の理由はありません。 –

2

なぜjQueryを使ってcss属性からURLをつかむない、プリロードを行うには?

var bg_url = jQuery("#DIV-THAT-NEEDS-PRELOADING").css('background-image'); 

// using regex to replace the " url(...) "... 
// apologies for my noobish regex skills... 
bg_url = str.replace(/ /g, '', bg_url); // whitespace... 
bg_url = str.replace(/url\(["']?/g, '', bg_url); // next, the 'url("'... 
bg_url = str.replace(/["']?\)/g, '', bg_url); // finally, the trailing '")'... 

// without regex, using substring if confident about no quotes/whitespace... 
bg_url = bg_url.substring(4, bg_url.length-1); 

// preloading... 
var img = new Image(); 
img.onload = function() 
{ 
    // do transitions here... 
}; 
img.src = bg_url; 
+0

すべてのブラウザで空白が無視されることが確実でない限り、2行目はおそらく正規表現になりますか? ( 'url(...)'を解析することが分かりました) –

+0

css属性から 'url(...)'を削除するには、はい、確かに正規表現を使用することができますが、jQueryは常にあなたにすばらしい文字列値を与えるはずです;) –

+0

ええと、それを実現:)あなたが答えたときに空白や引用符について心配しました。 –

1

あなたはロジックはほぼ良好ですが、jqueryのCSSのイベントをキャッチできません。

<img>要素に背景イメージを読み込む必要があります。その要素のイベント負荷を捕まえ、起動時に背景イメージをそのsrcに変更し、残りのロジックを実行します。

2

ここでjQueryを使って画像をプリロードカバー先週からのポストです:HTML 5 File load image as background-image

そしてここでは、参照ポストソリューションです:http://sveinbjorn.org/dataurls_css

+0

これはHTML 5 APIを使用する唯一のソリューションかもしれませんが、URLを使用した通常の画像読み込みでは、このソリューションは@colvesのソリューションよりも低速でした。デバッガが大きなbase64でエンコードされたイメージデータを表示するため、イメージの読み込み速度が遅くなり、デバッグも遅くなります。 – jbustamovej