2010-05-12 7 views
7

क्या कोई तत्व यह बताने का कोई तरीका है कि कोई तत्व छुपा हुआ है या वर्तमान में छिपाने की प्रक्रिया में है (एनीमेशन के माध्यम से)? जब आप show या hide पर कॉल करते हैं, तो मैं ऐसा करने का एकमात्र तरीका तत्व के data में ध्वज संग्रहीत करना चाहता हूं, लेकिन मैं सोच रहा था कि कोई और तरीका है या नहीं?jQuery चयनकर्ता यह देखने के लिए कि कोई तत्व छिपाने के लिए एनिमेट कर रहा है या नहीं

+0

कैसे आप इस को लागू करने अंत किया? – alex

+0

एनीमेशन शुरू होने पर 'डेटा' में ध्वज सेट करना, और फिर उस ध्वज की जांच करना। – nickf

+0

@nickf आह, एक समाधान, लेकिन इतना सुरुचिपूर्ण नहीं! मुझे यह देखना अच्छा लगेगा कि आप कस्टम चयनकर्ता काम कर रहे हैं :) – alex

उत्तर

1

आप $(":animated") साथ और :animated जांच .queue() अगर यह hide विधि के अंदर है के साथ छिपा हुआ एक $(":hidden") साथ और फिर एनिमेट लोगों को मिलता है।

+0

मैंने इस कोड के साथ कतार की जांच की: '$ el.slideUp ('slow'); console.log ($ el.queue()) 'और इसमें सब कुछ था ["प्रगति पर"] ' – nickf

+0

वैसे यह सभी पॉइंटर्स हैं जो मैं आपको दे सकता हूं - शायद अगर आपने jQuery स्रोत की जांच की है तो आपको एक रास्ता मिल सकता है कतार वस्तु से बाहर प्रविष्टियों को पढ़ने के लिए। –

3

आप इसे

(function($) { 
    var endOpacity, 
     oldStep = jQuery.fx.step.opacity; 

    $.fx.step.opacity = function(fx) { 
     endOpacity = fx.end; 

     return oldStep(fx); 
    }; 

$.expr[':'].hiding = function(obj){ 
    var $this = $(obj); 

    return ($this.is(':hidden') || ($this.is(':animated') && endOpacity === 0)); 
}; 

})(jQuery); 

This worked for me (यह कुछ और परीक्षण हालांकि आवश्यकता हो सकती है) के लिए एक कस्टम jQuery चयनकर्ता कर सकता है।

तो बस :hiding जोड़ने यह छिपा तत्वों, और तत्व है कि वर्तमान में 0 पर एनिमेटेड किया जा रहा है से मेल खाएगी यह होगा अब केवल मैच तत्वों है कि गायब हो रहे हैं, दिखाई नहीं दे रहा।

+0

यह एक अच्छी शुरुआत है, लेकिन मुझे लगता है कि एक से अधिक तत्व होने पर आप मुद्दों को हिट करेंगे। इसे देखें: http://jsbin.com/ojuro3/2/edit - अनुच्छेदों पर उन्हें फीका करने के लिए क्लिक करें। प्रत्येक सेकेंड, छिपाने वाले रंग लाल रंग के होते हैं, और नॉन-छुपाएं नीले होते हैं। – nickf

+0

@nickf इसके बारे में क्या, यदि आप तत्व जांच http://jsbin.com/ojuro3/3/edit हटाते हैं – alex

1

आप देख सकते हैं तत्व इस तरह एनिमेटेड है:

if(!$('.your-element').is(':animated')) { 
    // do animation... 
} else { 
    return false; 
} 
संबंधित मुद्दे