2011-11-08 11 views
15

पर यह स्थिति है, मेरे पास 2 div एक दूसरे के बगल में हैं। एक div ऊंचाई में बहुत गतिशील है, जिसका मूल रूप से मतलब है कि यह बढ़ सकता है और इसकी सामग्री के लिए समायोजित करने के लिए सिकुड़ सकता है। उदाहरण के लिए, इस div में ऐसी सामग्री है जिसे खुले या बंद, या कंटेनर को जोड़ा जा सकता है जो AJAX लोड की गई सामग्री को फिट करने के लिए विस्तारित हो सकते हैं।jquery resize श्रोता एक div

अब, इस div के बगल में एक और है जो सीएसएस के माध्यम से पहले की ऊंचाई को अच्छी तरह से पालन करता है। बहुत अच्छा काम करता है। लेकिन यहां सवाल है: मैं इसकी दूसरी ऊंचाई के आधार पर इस दूसरे div की सामग्री को बदलना चाहता हूं।

दूसरे शब्दों में, div 1 आकार में परिवर्तन, div 2 css के माध्यम से चलता है और अब मुझे नई सामग्री के साथ div 2 को फिर से भरने के लिए एक AJAX कॉल ट्रिगर करने की आवश्यकता है, यह नया आकार है।

क्या किसी को पता है कि मैं jquery के साथ ऐसा कैसे कर सकता हूं? यदि संभव हो, टाइमआउट के उपयोग के बिना?

चीयर्स।

+1

allmoast नकल की 2hours खो http://stackoverflow.com/questions/172821/detecting-when-a-divs-height-changes- उपयोग-jquery, कृपया एक प्रश्न पोस्ट करने से पहले खोजें –

उत्तर

19

the thread poelinca provided पता चलता है, वहाँ कुछ अच्छा इस कार्यक्षमता के लिए उपलब्ध प्लगइन्स कर रहे हैं।

यदि आपको प्लगइन विचार पसंद नहीं है, तो एक और सरल समाधान जब भी सामग्री संशोधित होती है तो div पर "आकार बदलें" ईवेंट को ट्रिगर करना होगा। फिर आप एक सुरुचिपूर्ण observer pattern का उपयोग करके, आकार के अनुसार आकार() के साथ इसकी निगरानी कर सकते हैं।

function appendContent($div, content) { 
    $div.append(content).trigger($.Event('resize')); 
} 

$div.bind('resize', function(e) { 
    // all your magic resize mojo goes here 
}); 
+0

धन्यवाद! मेरे पास प्लगइन के खिलाफ बिल्कुल कुछ नहीं है, यह काम करता है एक इलाज! – Peter

+0

अरे तुम मुझे बातचीत के लिए देर हो चुकी हो, लेकिन आप इस कोड का कितना उपयोग करेंगे? इसे कॉल करने के बारे में कोई कैसे जाता है? –

+0

@ जेरेमीमिलर का विचार यह है कि जब भी सामग्री अपडेट होती है, तो आप appendContent (...) विधि को कॉल करें (आपको कुछ कहने के बाद, कुछ कहना है)। संलग्नक के अंदर, आप बस अपना खुद का आकार बदलना घटना ट्रिगर करते हैं, यह दर्शाता है कि div का आकार बदल गया है। 'Div div.bind ('resize', ...) के अंदर कोड स्वचालित रूप से कहा जाता है (यह आकार बदलने के लिए सुनता है) – Kato

0

एकमात्र चीज जिसे मैं सोच सकता था, कुछ टाइमर प्रत्येक X सेकंड की ऊंचाई की जांच कर रहा है।

कुछ इस तरह:

function checkHeightTimer(){ 
    var div1 = $('#div1'); 
    var div2 = $('#div2'); 
    var somesize = #somenumber here; 
    if(div1.height() > somesize){ 
     //do something to div2 
    } 
    setTimeout(checkHeightTimer, 500); //at 500 miliseconds 
} 
+3

आवधिक जांच की आवश्यकता वाले किसी भी समाधान को घटना आधारित समाधान के बजाय इतना सुरुचिपूर्ण "हैक" नहीं माना जा सकता है। कभी-कभी अपरिहार्य? –

6

https://github.com/sdecima/javascript-detect-element-resize

वर्क्स एक आकर्षण की तरह!

मैंने attrchange परीक्षण किया है, लेकिन इस काम नहीं कर रहा था, काम :(

+0

बहुत अच्छी लिपि! अब तक देखा गया 'केवल', कि ** परिवर्तन का पता लगाने के लिए तत्वों के आकार को अंतःस्थापित करने के लिए टाइमर ** का उपयोग न करें। यह तकनीकी भयानक प्रदर्शन पेश करता है! धन्यवाद @ जारोस्लाव –

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

  • कोई संबंधित समस्या नहीं^_^