2015-05-03 5 views
6

मैं जीएसएपी में jQuery slideDown() को दोहराने की कोशिश कर रहा हूं और मुझे यह समझने में समस्या हो रही है कि jQuery किसी आइटम की ऊंचाई की गणना कैसे करता है जो वर्तमान में छिपा हुआ है जैसे कि यह height:auto पर सेट किया गया था।jQuery स्लाइडडाउन को दिखाए जाने से पहले छुपे हुए आइटम की अंतिम ऊंचाई कैसे प्राप्त होती है?

मैंने गिटहब पर कोड को ट्राउलिंग करने का प्रयास किया है, लेकिन jQuery.fn.slideDown या jQuery.fn.animate में ऐसा करने वाला कोई भी कोड नहीं मिल रहा है।

वहाँ कई समान और, अतः पर सवाल कई समाधान प्रस्तुत जो सभी के लिए अपने स्वयं के समस्याओं के लिए लग रहे हैं:

  1. क्लोन तत्व है, यह स्क्रीन बंद की स्थिति और उसकी ऊंचाई की गणना।

    यह काम नहीं करेगा यदि तत्व या उसके किसी भी बच्चे के तत्वों में सीएसएस शैलियों द्वारा ऊंचाई निर्धारित की गई है, जिसके लिए तत्व को डोम में मूल स्थान में होना आवश्यक है (उदाहरण के लिए .accordianItem केवल .accordian के अंदर ही स्टाइल हो सकता है)।

  2. आइटम प्रदर्शित करें, height:0 हटाएं और तत्व को फिर से छिपाने से पहले और फिर एनीमेशन बताते हुए ऊंचाई की गणना करें।

    यह ऊंचाई की गणना करते समय सामग्री को तेज़ी से फ्लैश कर सकता है।

  3. ऊंचाई की गणना करते समय इसे दिखाने के लिए visibility:true का उपयोग करें।

    यह फ्लैश को रोक देगा और अभी भी सही ऊंचाई गणना के लिए डीओएम में तत्व को उसी स्थिति में रखेगा, लेकिन यह अभी भी नीचे की अन्य वस्तुओं को दबाएगा क्योंकि visibility:false आइटमों की ऊंचाई अभी भी है।

  4. किसी आइटम की ऊंचाई को छिपाने से पहले इसकी गणना करें और उसे डेटा विशेषता में संग्रहीत करें ताकि हम उसे बाद में आइटम खोलना चाहते हैं।

    यह तब काम नहीं करेगा जब कोई गतिशील सामग्री आइटम की ऊंचाई को छुपाए जाने पर बदल जाती है।

jQuery slideDown() "सिर्फ काम करता है" हर बार तो मैं सच में जानना कैसे यह काम करता है रुचि हो चाहते हैं, लेकिन मैं सिर्फ बाहर काम नहीं कर सकता है, जहां यह इस कर रहा है। मुझे यह भी हैरान है कि जीएसएपी बॉक्स के बाहर ऐसा नहीं कर सकता है, या किसी ने भी इससे पहले उचित समाधान नहीं किया है।

किसी भी मदद की वास्तव में सराहना की जाएगी।

+0

कॉलिंग .नेट ({"ऊंचाई": "शो"} समान नहीं है .show()। मुझे अभी भी यह समझने की आवश्यकता है कि यह कैसे काम करता है, इसलिए मैं इसे दोहराना चाहता हूं। – jonhobbs

+0

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

उत्तर

6

यह पता चला है कि अगर आप $.height() का उपयोग display:none वाले एक तत्व की ऊंचाई प्राप्त करने के लिए यह 0 वापस नहीं करता है के रूप में आप उम्मीद करेंगे, यह वास्तव में visibility:hidden सेट, position:absolute आदि और आप सही देने के लिए displayblock करने के लिए सेट ऊंचाई वापस। मुझे लगता है कि एक स्लाइडडाउन करते समय आंतरिक रूप से इसका उपयोग किया जा रहा है।

इस उत्तर ने मुझे बहुत मदद की।

jQuery: height()/width() and "display:none"

बस यह कैसे अपने मूल प्रश्न में सभी समस्याओं से बचने के लिए लगता है के बारे में स्पष्ट किया जाना है।यह मूल रूप से संख्या (3) कर रहा है लेकिन पृष्ठ के नीचे कम सामग्री को धक्का देने की समस्या से परहेज करता है क्योंकि यह स्थिति पर भी सेट होता है: ऊंचाई की गणना होने पर पूर्ण। एक बहुत ही सरल सुरुचिपूर्ण समाधान

+0

बस यह स्पष्ट करने के लिए कि यह मेरे मूल में सभी समस्याओं से कैसे बचता है प्रश्न। यह मूल रूप से संख्या (3) कर रहा है लेकिन पेज के नीचे कम सामग्री को धक्का देने की समस्या से परहेज करता है क्योंकि यह स्थिति पर भी सेट होता है: ऊंचाई की गणना के दौरान पूर्ण, एक बहुत ही सरल सुरुचिपूर्ण समाधान। – jonhobbs

+0

उपरोक्त टिप्पणी संपादित होने पर बेहतर होगा जवाब में ही। हमेशा मान लें कि एक टिप्पणी गायब हो सकती है। –

+0

करेंगे। धन्यवाद – jonhobbs

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