2013-11-20 14 views
13

मैं एक हार्ड कोडित ऊंचाई के साथ एक स्क्रॉल कंटेनर:स्क्रॉल तत्व स्क्रॉल कंटेनर में

.scrollingContainer { 
    overflow: scroll; 
    height: 400px; 
} 

यह स्क्रॉल कंटेनर जब मैं आइटम पर क्लिक करें, मदों की एक सूची में शामिल है मैं इतना कंटेनर स्क्रॉल करने के लिए चाहते हैं कि क्लिक किया गया आइटम स्क्रॉलिंग कंटेनर के शीर्ष पर है।

$('.scrollingContainer li a').click(function(event) { 
    var vpHeight = $('.scrollingContainer').height(); 
    var offset = $(this).offset(); 
    $('.scrollingContainer').animate({ 
    scrollTop: vpHeight - offset.top 
    }, 500); 
}); 

ऊपर जो कुछ है, उसके ऊपर मुझे गणितीय गणना के साथ परेशानी हो रही है, मुझे प्रदर्शन करने की आवश्यकता है। मुझे लगता है कि var offset मान गलत है क्योंकि ऐसा लगता है कि पृष्ठ के शीर्ष से ऑफसेट प्राप्त हो रहा था, जहां मैं स्क्रॉलिंग कंटेनर में इसकी स्थिति के आधार पर ऑफसेट मान प्राप्त करने की उम्मीद कर रहा था।

किसी भी मदद की सराहना की!

+0

यहाँ एक बेला है। क्या यह मुद्दा प्रदर्शित करता है? ऐसा लगता है कि काम करता है। http://jsfiddle.net/isherwood/LqQGR – isherwood

+0

हां, समस्या यह है कि मैं वास्तव में यह नियंत्रित नहीं कर रहा हूं कि यह किस स्थिति में स्क्रॉल करता है। इसके अलावा यदि मैं दो बार क्लिक करता हूं तो यह पहले स्क्रॉल किए गए स्थान पर चिपके रहने के बजाए दो बार स्क्रॉल करता है। – CLiown

+0

क्या यह प्रश्न अनसुलझा है? – isherwood

उत्तर

2

यहाँ एक जीवित उदाहरण है: http://jsfiddle.net/LqQGR/12/

आप तत्व की स्थिति (कंटेनर के शीर्ष और लिंक के बीच की दूरी) प्लस वर्तमान scrollTop (के शीर्ष के बीच की दूरी के लिए अपने scrollTop सेट करना चाहते हैं सामग्री थी और वर्तमान जगह यह दिखाई दे रहा है

इसके अलावा:।। आप इतना है कि यह के भीतर सामग्री की offset parent है position: relative करने के लिए अपने scrollingContainer निर्धारित करने की आवश्यकता

var $scrollingContainer = $('.scrollingContainer'); 

$scrollingContainer.on('click', 'a', function (event) { 
    var vpHeight = $scrollingContainer.height(); 
    var scrollTop = $scrollingContainer.scrollTop(); 
    var link = $(event.currentTarget); 
    var position = link.position(); 

    $('.scrollingContainer').animate({ 
     scrollTop: (position.top + scrollTop) 
    }, 500); 
}); 
+0

हाहाहा, कुछ आसान आसान हमें ऊपर जा रहा था, और मैंने ध्यान नहीं दिया क्योंकि उदाहरण आपने गलती से पूरी तरह से काम किया था। आपको अपनी स्क्रॉलिंग कंटनर को स्थिति में सेट करने की आवश्यकता है: सापेक्ष ताकि यह ऑफसेट माता-पिता हो। मैंने अपना जवाब अपडेट कर लिया है, क्योंकि अब यह भी आसान है। – Nate

+1

वैसे, मेरा जवाब एक से बेहतर है जिसमें आप सभी एंकर टैगों पर व्यक्तिगत रूप से क्लिक ईवेंट श्रोताओं को जोड़ते हैं। यह केवल एक श्रोता जोड़ता है, जो अधिक प्रदर्शनकारी है। आप यहां प्रतिनिधि कार्यक्रमों के बारे में अधिक पढ़ सकते हैं: http://api.jquery.com/on/#direct-and-delegated-events – Nate

+0

बीटीडब्ल्यू, अभी यह एहसास हुआ कि आप एक साथी उत्तरदाता थे, मूल प्रश्न के पूछने वाले नहीं। उम्मीद है कि मेरी टिप्पणियां थोड़ा और समझ में आती हैं। माफ़ कीजिये! – Nate

39

this answer के एक बदलाव काम कर देता है:

http://jsfiddle.net/isherwood/LqQGR/14

var myContainer = $('.scrollingContainer') 

$(myContainer).on('click', 'a', function() { 
    var scrollTo = $(this); 
    myContainer.animate({ 
     scrollTop: scrollTo.offset().top - myContainer.offset().top + myContainer.scrollTop() 
    }); 
}); 
संबंधित मुद्दे