2011-02-18 13 views
9

jQuery प्रभावों के बारे में this question के जवाब में, मैंने callback.fadeIn(500, my_function) पर तर्क का उपयोग करने के बारे में सोचा था।निरंतर-शैली-प्रोग्रामिंग प्रवण स्टैक ओवरफ़्लो

जबकि सिद्धांत रूप में, यह एक व्यवहार्य विचार है, मैं कोई सुराग नहीं है, तो कॉलबैक recurse करने की अनुमति दी है (और न jQuery प्रलेखन :(है):

function keep_animating(){ 
    $("#id").fadeIn(500).fadeOut(500, keep_animating); 
} 

उत्तर

3

आप एक डिबगर ब्रेकप्वाइंट जोड़ सकते हैं और हो सकता है परीक्षण करें कि स्टैक आकार बढ़ता है या नहीं। :)

हालांकि, चूंकि एनीमेशन/फेडिंग सेटटाइमआउट/सेट इंटरवल का उपयोग करते हैं, मुझे लगता है कि कॉल गहराई में वृद्धि नहीं होती है, यानी यह ओवरफ्लो स्टैक करने के लिए प्रवण नहीं है।

+0

मैं स्रोत में जो देख सकता हूं उससे, यह रिकर्स करता है। [स्पीड फ़ंक्शन] देखें (http://www.keyframesandcode.com/resources/javascript/deconstructed/jquery/#speed), जो अंततः सभी प्रभावों से कॉलबैक फ़ंक्शंस को संभालता है। यह सीधे कॉलबैक निष्पादित करने के लिए 'कॉल() 'का उपयोग करता है, इसमें कोई कतार शामिल नहीं है। – Tomalak

+0

यह आपके उत्तर में 'अनुमान' था जिसने मुझे संदेह दिलाया। यह आपके जवाब में स्माइली थी जिसने आपको वोट नहीं दिया। लेकिन अंत में, आप सही साबित होते हैं (कम से कम, jQuery फोरम पर कुछ ब्लॉकों द्वारा समर्थित - http://forum.jquery.com/topic/continuation-style-programming-are-there-constraints- ऑन-द-एफएक्स-कॉलबैक) – xtofl

0

आपका समाधान रिकर्स करेगा, और आखिरकार ढेर को उड़ा देगा - लेकिन ब्राउज़र के आधार पर आपके पास थोड़ी देर होगी - जब तक ऐसा नहीं होता है। एक त्वरित प्रदर्शन के लिए यह ठीक है, लेकिन उत्पादन के लिए तैयार कोड के लिए आप इस तरह के रूप में, एक गैर पुनरावर्ती दृष्टिकोण पर विचार करना चाहेंगे:

function pulse(){ 
    $("#id").fadeIn(500).fadeOut(500); 
} 
setInterval(pulse, 1000); 

इस त्वचा के लिए कई तरीके हैं, लेकिन आप वहाँ मिलना चाहिए।

1

मैं समय लगा पूछने के लिए 'people who know' ... कोई ढेर-अतिप्रवाह के बाद से वहाँ कोई स्पष्ट प्रत्यावर्तन है, नहीं है: fadeIn, fadeOut ... तरीकों सब सिर्फ प्रभाव कतार पर एक प्रविष्टि बनाने के। इसका मतलब है कि keep_animating फ़ंक्शन को उसी संदर्भ में से निष्पादित नहीं किया गया है।

सौजन्य dave methvin रहे हैं:

क्या आप के रूप में "प्रत्यावर्तन" का वर्णन कर रहे हैं वास्तव में प्रत्यावर्तन नहीं है। jQuery के दृश्य प्रभाव एक सेटटाइमआउट टाइमर पर चलते हैं, इसलिए कॉलबैक फ़ंक्शन नहीं है क्योंकि यह रिकर्सन में होगा। इसके बजाय, में एनीमेशन पूर्ण होने के बाद कॉलबैक चलाता है, कई "चरण", प्रत्येक सेटटाइमआउट द्वारा ट्रिगर किया जाता है।

संबंधित मुद्दे