2009-12-02 4 views
14

मैं एक ऐसे अनुप्रयोग को डिज़ाइन करने के लिए JQuery का उपयोग कर रहा हूं जहां उपयोगकर्ता एक div के अंदर तत्वों को खींच सकता है जो स्वचालित रूप से स्क्रॉलबार जोड़ता है और स्क्रॉलहेइट/स्क्रॉलविड्थ को आवश्यकतानुसार विस्तारित करता है। स्क्रॉल हाइट और स्क्रॉल के दौरान भी मुझे आग लगाना होगा कंटेनर div की चौड़ाई बदल दी गई है।क्या कोई ऐसी घटना है जो स्क्रॉल में परिवर्तनों पर आग लगती है या jQuery में स्क्रॉलविड्थ?

नहीं, स्क्रॉल ईवेंट का उपयोग नहीं करना चाहते हैं क्योंकि 1) स्क्रॉल को तब तक नहीं निकाल दिया जाता है जब आप किनारे पर तत्व खींचते हैं और स्क्रॉलहेइट/स्क्रॉलविड्थ बदलते हैं। 2) स्क्रॉल करता है जब स्क्रॉल हाइट/स्क्रॉलविड्थ नहीं बदलता है।

कोई संकेत?

उत्तर

6

मैं jQuery की सिफारिश नहीं करता, लेकिन there is a 'resize' dispatcher। जावास्क्रिप्ट के साथ

2017 संस्करण:

this.container = document.querySelector('#container'); 
this.watcher = window.requestAnimationFrame(this.watch); 

this.watch =() => { 
    cancelAnimationFrame(this.watcher); 

    if (this.lastScrollHeight !== container.scrollHeight) { 
    // do something 
    } 

    this.lastScrollHeight = container.scrollHeight; 
    this.watcher = requestAnimationFrame(this.watch); 
}; 

scrollHeight के लिये दस्तावेज देखें और यह कैसे scrollTop से संबंधित है। scrollHeight पता कर रहा है एक गैर performant डोम पुनर्गणना गति प्रदान कर सकते हैं, और मैन्युअल रूप से प्रबंध ऊंचाइयों/सबसे ऊपर है के साथ position:absolute, तेजी से होने की संभावना है यह margins पर एक पुनरावर्ती चेक (blocks के लिए) नहीं है के बाद से, और अन्य सीएसएस display प्रकार के।

+0

ठीक है, वे मालिकाना नहीं हो सकते हैं। वे फ़ायरफ़ॉक्स में अच्छी तरह से काम करते प्रतीत होते हैं। हालांकि, आपकी टिप्पणी ने मुझे क्रोम में चेक करने के लिए प्रेरित किया, जहां यह कोई नहीं है। क्या स्क्रॉल बार के साथ ओवरफ़्लो वाले div के आयाम प्राप्त करने का कोई बेहतर तरीका है? – Pridkett

+0

मेरे बयान के बारे में उद्धरणों के लिए विस्तारित उत्तरों की जांच करें – jitter

+0

ठीक है, यह उत्तर की तरह दिखता है, भले ही यह पूछे जाने वाले प्रश्न का उत्तर न हो। हकीकत में मैं गलत सवाल पूछ रहा था और गैर-मानक अनुपालन विस्तार का उपयोग करने के लिए इसे अव्यवस्थित होना चाहिए। पॉइंटर्स के लिए धन्यवाद। – Pridkett

5

मैंने इस प्रश्न का उत्तर दिया है, जो अप्रासंगिक प्रतीत हो सकता है हालांकि यह स्क्रॉल हाइट चेंज और स्क्रॉलविड्थ का समर्थन करता है।

Detecting when a div's height changes using jQuery

प्लगइन:

http://www.jqui.net/jquery-projects/jquery-mutate-official/

डेमो:

$('.selector').mutate('scrollHeight',function(){ 
    alert('it has changed the scroll height do something about it...'); 
}); 

इस प्लग भी पार ब्राउज़र काम के रूप में यह अंतराल उपयोग कर रहा है चाहिए (setTimeout) इस तरह के जांच करने के लिए परिवर्तन, इसे भी बढ़ाया जा सकता है आपको इसकी आवश्यकता होनी चाहिए :)

उम्मीद है कि यह मदद करता है ...

+0

कमाल, धन्यवाद – wuliwong

+1

यह प्लगइन वास्तव में उत्परिवर्तन के लिए _listen_ नहीं है, लेकिन डीओएम को हर 100ms में चुनाव करता है: https://github.com/valtido/jQuery-mutate/blob/master/js/mutate.js#L44 क्षमा करें एक पुरानी प्लगइन और धागा लाने के लिए। इस तरह बहुत महंगा है। – arminrosu

+0

@arminrosu यह गधे साल पहले किया गया था – Val