2011-12-27 7 views
8

वहाँ कैसे एक छवि पहले से लोड करने के लेख की टन है, फिर भी मैं कुछ भी jQuery के साथ एक पृष्ठभूमि छवि पहले से लोड होने के बारे में उपयोगी पाते हैं नहीं कर पा रहे।प्रीलोड पृष्ठभूमि छवि

मैं मैं प्राप्त करना चाहते हैं की एक साधारण एचटीएमएल mockup बनाया: http://jsfiddle.net/3rfhr/

  • एक लोड हो रहा है div प्रकट होता है
  • पृष्ठभूमि भरी हुई है
  • लोड हो रहा है div गायब हो जाता है
  • पृष्ठभूमि DIV दिखाई

मैं div संक्रमण संभाल कर सकते हैं, लेकिन मैं कैसे करने के लिए के रूप में पता कर रहा हूँ मुझे एक सीएसएस पृष्ठभूमि preloading के बारे में जाना चाहिए। मेरे सवाल :)

उत्तर

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' भाग छवि के यूआरएल द्वारा बदला जाता है? – pufAmuf

+0

हां, 'src' छवि यूआरएल है, जो भी आपको चाहिए उसे सेट करें। क्रिस केम्पेन के जवाब में एक अच्छा विचार है कि वह सीएसएस से स्रोत को पकड़ रहा है, हालांकि मुझे यकीन नहीं है कि दूसरी पंक्ति –

+1

के लिए क्या है एक मजबूत शब्द नहीं हो सकता है। आप फ़ाइल एपीआई का उपयोग करके छवि लोड कर सकते हैं और "एटीआई: छवि/जीआईएफ; बेस 64, ..." में स्रोत विशेषता सेट कर सकते हैं ... मेरी ... एन्कोडेड ... छवि " किसी अन्य पोस्ट कवर के संदर्भ के लिए नीचे दी गई मेरी पोस्ट देखें यह तकनीक –

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

दूसरी पंक्ति शायद एक रेगेक्स होनी चाहिए, जब तक आप सकारात्मक न हों कि सभी ब्राउज़रों में व्हाइटस्पेस को नजरअंदाज कर दिया जाए? (मुझे यह समझने में एक मिनट लगा कि यह यूआरएल (...) ' –

+0

को पार करना है, सीएसएस विशेषता से 'url (...)' को पट्टी करने के लिए। हां, निश्चित रूप से रेगेक्स का उपयोग कर सकता है, और जहां तक ​​मुझे पता है कि jQuery आपको हमेशा एक अच्छा स्ट्रिंग मान देना चाहिए;) –

+0

हाँ, एहसास हुआ कि :) जब आपने उत्तर दिया, तो मेरी पिछली टिप्पणी सही संपादित की गई, हालांकि व्हाइटस्पेस और/या उद्धरण के बारे में चिंतित। –

1

आप तर्क लगभग अच्छे हैं, लेकिन आप jquery में सीएसएस के लिए ईवेंट नहीं पकड़ सकते हैं।

आप कुछ <img> तत्व के लिए पृष्ठभूमि छवि को लोड करने की जरूरत है। उस तत्व की स्थिति लोड पकड़ो और जब यह निकाल दिया है आपको लगता है कि स्रोत के लिए पृष्ठभूमि छवि बदलने के लिए और अपने तर्क के बाकी है।

2

यहाँ पिछले सप्ताह से एक पोस्ट है कि छवियों jQuery के साथ पहले से लोड होने कवर है: HTML 5 File load image as background-image

और यहाँ समाधान है कि संदर्भित पोस्ट है: http://sveinbjorn.org/dataurls_css

+0

एचटीएमएल 5 एपीआई का उपयोग करके यह एकमात्र समाधान हो सकता है, लेकिन यूआरएल का उपयोग करके नियमित छवि लोडिंग के साथ यह समाधान @cwolves के समाधान से धीमा था। छवियां अधिक धीरे-धीरे लोड होती हैं और डिबगिंग भी धीमी होती है क्योंकि डीबगर बड़े बेस 64-एन्कोडेड छवि डेटा प्रदर्शित करता है। – jbustamovej