2015-05-17 3 views
5

यहां मेरी स्थिति है। मैंने कई पैनलों को एक तरफ रखा है जो एक मुख्य कंटेनर में लपेटा गया है। प्रत्येक पैनल 100% व्यूपोर्ट चौड़ाई और ऊंचाई लेता है। मेरा लक्ष्य प्रत्येक पैनल को क्षैतिज रूप से स्क्रॉल करने में सक्षम होना है जब मैं अपने संबंधित लिंक पर क्लिक करता हूं। यह एक शुद्ध सीएसएस दृष्टिकोण का उपयोग कर ठीक काम करता है। हालांकि, मैं jQuery सीख रहा हूं और मैं इसे प्राप्त करने के लिए .scrollTo() विधि का उपयोग करना चाहता हूं।मैं कैसे भरपाई यह व्यूपोर्ट के बाहर है, जबकि एक अस्थायी तत्व के बाएं प्राप्त करते हैं?

जब पैनल अन्य (यानी खड़ी) नीचे एक खड़ी कर रहे थे, मैं प्रत्येक पैनल के ऑफसेट शीर्ष को प्राप्त करने और अच्छी तरह से अपनी स्थिति के लिए स्क्रॉल करने में सक्षम था।

क्षैतिज भिन्नता के साथ

, मैं बाईं पैनल के ऑफसेट प्राप्त करने के लिए समस्याएं हो रही हैं। मुझे उन सभी के लिए शून्य का बायां ऑफसेट मिलता है। अगर मेरा तर्क सही है, तो कहें कि व्यूपोर्ट 1920 पीएक्स चौड़ा है, दूसरा पैनल का बायां ऑफसेट 1920 पीएक्स पर होना चाहिए, तीसरा 3840 पीएक्स आदि होना चाहिए

अब तक जो जानकारी मैंने एकत्र की है, उससे ऐसा इसलिए है क्योंकि पैनल बाहर हैं व्यूपोर्ट। और वास्तव में, मैंने पैनलों में 20% की चौड़ाई लागू की है ताकि वे सभी व्यूपोर्ट में दिखाई दे सकें, फिर मैंने अपने बाएं ऑफसेट को अलर्ट करने का प्रयास किया। उन्हें सफलतापूर्वक मुझसे प्रेरित किया गया।

तो मैं कैसे इस समस्या के समाधान मिलता है? यह लग सकता है जैसे मैं पहिया पुनर्रचना रहा हूँ, लेकिन जैसे मैंने कहा, मैं jQuery सीख रहा हूँ तो मैं समझने के लिए क्यों यह इस तरह के रूप में व्यवहार कर रहा है और मुझे लगता है कि यह कैसे हल कर सकते हैं की जरूरत है। किसी भी मदद की अत्यधिक सराहना की जाएगी :) नीचे मेरे पास अब तक के स्निपेट हैं।

धन्यवाद।

मार्कअप:

<div class="mainWrapper"> 
    <section class="panel" id="panel-1"></section> 
    <section class="panel" id="panel-2"></section> 
    <section class="panel" id="panel-3"></section> 
    <section class="panel" id="panel-4"></section> 
</div> 

सीएसएस:

.mainWrapper, .panel { 
    position: relative; 
    height: 100%; 
} 

.mainWrapper { 
    top: 0; 
    left: 0; 
} 

.panel { 
    display: inline-block; 
    background: rgba(255, 255, 255, 1); 
} 

जावास्क्रिप्ट:

$(document).ready(function() { 
    var $panelWrapper = $('.mainWrapper'); 
    var $panels = $('.mainWrapper').find('.panel'); 
    var $panelScrollPos = new Array(); 

    $panels.each(function(i) { 
    //This is where I need help. It's not working 
    $panelScrollPos[i] = Math.round($(this).offset().left - $panelWrapper.offset().left); 

    alert('Panels position are: ' + $panelScrollPos[i]); 
    }); 
}); 

कृपया ध्यान दें कि मैं() विधि .width का इस्तेमाल किया है .mainWrapper और .panel तत्वों की चौड़ाई सेट करने के लिए। के रूप में यह काम कर रहा है मैं स्निपेट में यह शामिल नहीं किया है।

+0

आप सूचना दे रहे हैं आपके जेएस में $ $Wrapper [i] '। क्या वह '$ पैनल स्क्रॉलपॉस [i]' नहीं होना चाहिए? इसके अलावा अपने सीएसएस में '.panel' divs पर कोई चौड़ाई अगर हम चौड़ाई आप स्थापित कर रहे हैं के लिए किया था – Andy

+0

आसान होगा है। उदाहरण के लिए, आप मुख्य आवरण चौड़ाई वें चार पैनल चौड़ाई की राशि के रूप के रूप में व्यापक है? –

+0

हो सकता है कि एक बेला -> http://www.jsfiddle.net – Michelangelo

उत्तर

1

, एक पंक्ति पर अपने inline-block तत्वों सेट करने के लिए कोई आवरण की चौड़ाई बात आप white-space propertie पुनर्स्थापित करना चाहिए सक्षम होने के लिए:

#wrapper { 
white-space:nowrap; 
width:100%; 
} 
.child { 
display:inline-block; 
white-space:normal; 
width:100%; 
} 

अपने बेला अद्यतन: http://jsfiddle.net/n3e6xzbj/

+0

मदद के लिए धन्यवाद! हालांकि, कुछ अभी भी स्पष्ट नहीं है ... इन 'इनलाइन-ब्लॉक' तत्व वे एक ही पंक्ति में "वास्तव में" नहीं थे जब वे व्यूपोर्ट से बाहर थे? मैं इस सवाल से पूछ रहा हूं क्योंकि शुरुआत में जब मेरे पास सीएसएस फ़ाइल में सेट किए गए बाल तत्वों की चौड़ाई थी, तो मैंने उनकी चौड़ाई को कम करने की कोशिश की ताकि वे जांच कर सकें कि वे किनारे पर थे ... और वे थे। मैंने यह भी देखा है कि अगर मैंने बच्चे के तत्वों को 'फ्लोट: बाएं; 'लागू किया है, तो' व्हाइट-स्पेस 'संपत्ति अब चाल चलती है। –

+0

@ क्रिस्टोफर व्हाइट-स्पेस केवल इनलाइन, इनलाइन-ब्लॉक (या इनपुट/आईएमजी के समान), और टेक्स्ट के लिए काम करता है। फ्लोट का एक विशेष व्यवहार होता है, यह पूर्ण तत्वों (नियमित प्रवाह से बाहर निकाला जाता है) की तरह कार्य करता है लेकिन फिर भी तत्वों के प्रवाह के भीतर अंतरिक्ष का उपयोग करता है। यह वास्तव में किसी भी प्रदर्शन मूल्य से बहुत दूर है, जो व्यवहार के लिए ओवरराइड करता है। –

+0

इसे यहां देखें http://stackoverflow.com/questions/15172520/advantages-of-using-displayinline-block-vs-floatleft-in-css और http://stackoverflow.com/questions/11805352/floatleft-vs- displayinline-vs-displayinline-block-vs-displaytable-cell @ क्रिस्टोफर –

0

आप getBoundingClientRect को आजमा सकते हैं।

कि कॉल का परिणाम है जो शायद आप क्या चाहते हैं है एक बाएं स्थिति है।

+0

इस विधि को साझा करने के लिए धन्यवाद। यह निश्चित रूप से बाद में आसान हो जाएगा। जीसीरिलस सीएसएस टिप ने मेरी मदद की। –

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