2010-06-23 17 views
7

चलाया है मेरे पास एक सीएमएस (स्क्वायरस्पेस) पर होस्ट किया गया एक फोटो गैलरी पृष्ठ है जिसमें इसकी कुछ स्क्रिप्ट हैं जो थंबनेल को असीमित रूप से लोड करती हैं।सभी के बाद एक jQuery फ़ंक्शन कैसे चलाएं और किसी भी अन्य जावास्क्रिप्ट ने

वास्तविक बड़े तथापि छवियों पहले से लोड कर रहे हैं नहीं है, इसलिए मैं इस तरह मिश्रण में अपने ही स्क्रिप्ट जोड़ने की बस ब्राउज़र की पृष्ठभूमि में कैश में उन बड़े चित्र लोड करने के लिए, का फैसला किया:

(function($) { 
    var cache = []; 
    // Arguments are image paths relative to the current page. 
    $.preLoadImages = function() { 
    var args_len = arguments.length; 
    for (var i = args_len; i--;) { 
     var cacheImage = document.createElement('img'); 
     cacheImage.src = arguments[i]; 
     cache.push(cacheImage); 
    } 
    } 
})(jQuery) 

$(window).load(function(){ 
$.preLoadImages(
    "/picture/1.jpg", 
    "/picture/2.jpg", //etc. 
    ); 
}); 

मैंने अपना कोड $ (विंडो) .load() में रखा क्योंकि यह एक पृष्ठभूमि स्क्रिप्ट है और यह आवश्यक नहीं है कि यह भी चलता है, यह प्रदर्शन में सुधार करने के लिए है।

हालांकि, मुझे लगता है कि यह स्क्रिप्ट किसी भी तरह से सीएमएस की अपनी थंबनेल प्रीलोडिंग स्क्रिप्ट को अवरुद्ध कर रही है।

क्या मैं सही हूँ? और सबसे महत्वपूर्ण बात यह है कि यह निर्देश देने का एक तरीका है कि पृष्ठ पर अन्य सभी स्क्रिप्ट चलाने के बाद ही मेरी स्क्रिप्ट चलती है?

चियर्स

उत्तर

2

जावास्क्रिप्ट हमेशा चल रहा है, उदाहरण के लिए hover घटना, लगातार फायरिंग कर रहा है mousemove, आदि ... वहाँ स्क्रिप्ट चलाने के लिए नहीं "अंत" है।

हालांकि आपके मामले में, यह किसी भी अन्य प्रीलोडिंग को अवरुद्ध नहीं करना चाहिए ... आप भी document.ready का उपयोग कर सकते हैं, क्योंकि आपको वास्तव में अपने कोड निष्पादित होने से पहले लोड की गई छवियों की आवश्यकता नहीं होती है।

वास्तव में, आप वास्तव में window.load का उपयोग कर पृष्ठ को धीमा कर रहे हैं ... क्योंकि प्रीलोडिंग बाद में शुरू होती है, जब इसे ब्राउज़र द्वारा पहले अन्य डाउनलोड के साथ समानांतर किया जा सकता है। इस प्रकार की document.ready उपयोग करते हैं,:

$(function(){ 
    $.preLoadImages(
    "/picture/1.jpg", 
    "/picture/2.jpg", //etc. 
    ); 
}); 
+0

धन्यवाद निक। यह समझ में आता है। हालांकि, मेरी स्क्रिप्ट किसी भी तरह थंबनेल प्रीलोडिंग को अवरुद्ध कर रही है ... मैं नहीं करता यह नहीं पता कि कैसे, लेकिन प्रभाव लगातार और महत्वपूर्ण है। क्या यह ब्राउज़र कनेक्शन की सीमाओं के साथ कुछ करने के लिए हो सकता है ...? – andy

+0

@andy - यह हो सकता है, अगर वे एक ही डोमेन पर हैं, तो वास्तविक HTTP spec एक समय में 2 कनेक्शन प्रति डोमेन कहते हैं, जो आईई में पीई है ricicular obeys (दूसरों को पाइपलाइनिंग आसान आसान)। छवियों को एक अलग यूआरएल दे सकते हैं ?, उदाहरण के लिए 'http: //static.mydomain.com/Images/....', यह * अन्य * 'एन' कनेक्शन की संख्या की अनुमति देगा, क्योंकि यह इसे दूसरे डोमेन के रूप में मानता है उदाहरण के लिए 'www.' से। –

+0

हे निक, अतिरिक्त स्निपेट के लिए धन्यवाद, मैंने वास्तव में तैयार() पहले कोशिश की, लेकिन ब्लॉक प्राप्त कर रहा था, इसलिए मैं हालांकि window.load() मदद करता हूं, लेकिन निश्चित रूप से थंबनेल को एसिंक लोड किया जा रहा है जो नहीं एक फर्क पड़ता है ... सही? हो सकता है कि मैं पूरी तरह से गलत हूं, मुझे लगता है कि यह एक ब्लॉक है क्योंकि थंबनेल केवल मेरी सभी छवियों को पृष्ठभूमि में लोड किया गया है – andy

1

स्क्रिप्ट शीर्ष नीचे लोड किए गए हैं, और शरीर onloads सामान्य रूप से जोड़ दिए जाते हैं मौजूदा onloads को - तो जब तक कि $ (समारोह के रूप में() .. है पृष्ठ के अंत में, यह आखिरी भाग जाएगा। (आखिरी (निक की टिप्पणी के अनुसार) का मतलब दस्तावेज का प्रारंभिक पार्स/रन है)

+0

यह * की तरह है * सच है, jQuery (आमतौर पर) सबसे कोड एक 'ready' हैंडलर, जो बाद में मार डाला जाता है से जुड़ा हुआ है, इसलिए है, जबकि यह के मामले में करेंगे उस क्रम में मूल्यांकन/लगाया गया, वास्तविक काम तब किया जाता है जब 'तैयार' घटना होती है। –

+0

धन्यवाद दान। तो, क्या आप कह रहे हैं कि मुझे पहले से ही() या .load() की आवश्यकता नहीं है? बस पृष्ठ के निचले हिस्से में फ़ंक्शन को कॉल करें? – andy

+0

@andy - आपके द्वारा पोस्ट किए गए कोड के लिए, किसी भी चीज का इंतजार करने का कोई कारण नहीं है, अगर आप ऐसा कुछ कर रहे थे जिसके लिए DOM तत्व तैयार हों, तो आपको 'document.ready' की आवश्यकता है, अगर आप किसी के साथ गड़बड़ नहीं कर रहे हैं, तो कोई ज़रूरत नहीं है । –