2010-11-15 17 views
5

मेरे पास एक ऐसी स्क्रिप्ट है जिसे मैं विकसित कर रहा हूं जो एक स्लाइडिंग बटन प्रकार प्रभाव बनाता है। पांच div प्रत्येक एक दूसरे के बगल में एक लिंक के साथ स्थित हैं। जब उन डीआईवीएस में से एक को संबंधित सामग्री पर क्लिक किया जाता है तो विस्तारित होता है और शेष डिव बंद हो जाते हैं।जावास्क्रिप्ट को दो बार निष्पादित करने से रोकें

समस्या यह है कि यदि उपयोगकर्ता दो बार क्लिक करता है तो यह दो बार क्लिक करता है या तेजी से उत्तराधिकार में किसी अन्य div पर क्लिक करता है, दरारें दिखने लगती हैं।

मुझे आश्चर्य है कि क्या केवल एक बार क्वेरी को निष्पादित करने की अनुमति होगी और इसे कतार देने के बजाय पूरा होने तक प्रतीक्षा करें।

यहाँ, मेरे वर्तमान कोड है अगर यह बकवास मैं इसे कैसे बेहतर कर सकता है पर टिप्पणी करने के लिए स्वतंत्र महसूस ... मैं सबसे अच्छा जावास्क्रिप्ट/jQuery पर नहीं कर रहा हूँ: पी

function mnuClick(x){ 
    //Reset all elements 
    if($('#'+x).width()!=369){ 
     $('.menu .menu_Graphic').fadeOut(300); 
     $('.menu_left .menu_Graphic').fadeOut(300); 
     $('.menu_right .menu_Graphic').fadeOut(300); 
     $('.menu').animate({width: "76px"},500); 
     $('.menu_left').animate({width: "76px"},500); 
     $('.menu_right').animate({width: "76px"},500); 
    } 
     var ElementId = '#' + x; 

     $(ElementId).animate({ 
      width: 369 + "px" 
     },500, function(){ 
      $(ElementId + ' .menu_Graphic').fadeIn(300); 
     }); 
} 

अग्रिम धन्यवाद, क्रिस।

उत्तर

9

आपको "isRunning" ध्वज की आवश्यकता है। शुरू करने से पहले इसके लिए जांचें। अनुक्रम प्रारंभ करते समय इसे सेट करें, इसे समाप्त होने पर साफ़ करें। तो आप एक बार से अधिक क्लिक नहीं कर सकते

+1

+1 जो मैं कहने जा रहा था, बस एक चर है जो घटना को चलाने के ट्रैक का ट्रैक रखता है, प्रसंस्करण शुरू करने से पहले इसे आरंभ करें (इसलिए यह अन्य सभी घटनाओं को अक्षम करता है)। – Jakub

+0

बहुत बहुत धन्यवाद। महान समाधान अभी तक बहुत आसान :) – Chris

3
(function() { 
var mutex = false; 

    function mnuClick(x){ 
     if (!mutex) { 
      mutex = !mutex; 

      /* all code here ... */ 

      mutex = !mutex; /* this statement should go into animation callback */ 
     } 

    } 

})(); 

एक चर के माध्यम से एक राज्य mantain जब तक पूरी तरह से कोड

0

आप एक अदृश्य MASKIN और maskout (लाइटबॉक्स आदि में पृष्ठभूमि की तरह) बना सकते हैं मार डाला गया है या जब तक क्लिक्स को निष्क्रिय एनीमेशन खत्म होता है।

1

जब आप घटना शुरू करते हैं, तो ऑनक्लिक ईवेंट हैंडलर (mnuClick) को अनप्लग कर सकते हैं, प्रभावी ढंग से mnu पर आक्रमण करने के लिए दो बार क्लिक करें, लेकिन घटना समाप्त होने पर इसे पुनर्स्थापित करना सुनिश्चित करें।

1

त्वरित उत्तर: .addClass और .removeClass का उपयोग करें और निष्पादन समय पर कक्षा के अस्तित्व के लिए परीक्षण करें। परीक्षण करें कि यह सेट है और वापस आ गया है, या इसे जोड़ें, कोड निष्पादित करें, फिर इसे हटा दें।

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