2012-08-10 25 views
9

मेरे पास निश्चित आकार और अतिप्रवाह के साथ एक कंटेनर div है: स्क्रॉल, यह एक प्रकार की सूची बनाने वाले छोटे divs से भरा है। यहां एक बेवकूफ उदाहरण है: http://jsfiddle.net/etYSC/2/मैं स्क्रॉलबार को केवल निश्चित अंतराल पर स्क्रॉल कैसे कर सकता हूं?

जो मैं चाहता हूं वह है कि स्क्रॉलिंग कभी भी एक बॉक्स को काट नहीं देती है, हमेशा 3 पूर्ण बक्से दिखाती है (इस उदाहरण में), तो यह हमेशा एक निश्चित संख्या में पिक्सेल स्क्रॉल करेगा।

मैं यह कैसे कर सकता हूं?

मैं jquery लाइब्रेरी का उपयोग कर रहा हूं।

गुमराह करने वाले कीवर्ड की वजह से Google इस प्रश्न पर एक कठोर मालकिन रहा है।

- समाधान

मैं kiranvj कोड में थोड़ा और अधिक परिष्कृत करने के लिए कर रहा था और मैं अंतिम परिणाम से बहुत खुश हूँ।

पिछले div तड़क:

var scrollTimerHandle = ""; 
var positionTimerHandle = ""; 

$("#container").scroll(function() { 
    var boxSize = 84; 
    var newScrollPosition = parseInt(this.scrollTop/boxSize) * boxSize, 
    _this = this; 

    clearInterval(scrollTimerHandle); 
    scrollTimerHandle = setTimeout(function() { 
     positionTimerHandle = setInterval(function(){ 
      if (_this.scrollTop == newScrollPosition){ 
      clearInterval(positionTimerHandle);     
      } else { 
      _this.scrollTop--; 
      } 
     }, 5);   

    }, 600); 
}); 

http://jsfiddle.net/etYSC/7/

निकटतम div

var scrollTimerHandle = ""; 
var positionTimerHandle = ""; 

$("#container").scroll(function() { 
var boxSize = 84;  
var preScrollPosition = parseInt(this.scrollTop/boxSize) * boxSize; 
var newScrollPosition = this.scrollTop - preScrollPosition < boxSize /2 
          ? preScrollPosition : preScrollPosition + boxSize; 
_this = this; 

clearInterval(scrollTimerHandle); 

    scrollTimerHandle = setTimeout(function() { 
     positionTimerHandle = setInterval(function(){  
      if (_this.scrollTop == newScrollPosition){ 
      clearInterval(positionTimerHandle); 
      } else { 
       if (_this.scrollTop > newScrollPosition){ 
       _this.scrollTop--; 
       } else { 
       _this.scrollTop++; 
       }   
      } 
     }, 5);  

    }, 700); 
}); 

http://jsfiddle.net/etYSC/8/

से झपटते

सभी मदद के लिए धन्यवाद, मैं इस बात को खोने के बारे में खो गया था और आज एक अच्छा सौदा सीखा।

+0

क्योंकि अगर मैं गलत नहीं हूँ, आप केवल का निरीक्षण यह एक कठिन एक है द्वारा स्क्रॉलबार हटाया स्क्रॉल स्थिति * स्क्रॉल के बाद * होता है। इसका अर्थ यह है कि, यदि आप बढ़ते क्रम में स्क्रॉलिंग को मजबूर करते हैं (इस मामले में, आपके ब्लॉक की ऊंचाई), तो कंटेनर कुछ पिक्सेल स्क्रॉल करता है, और फिर वापस या आगे कूदता है, तो बहुत सी स्टटरिंग होगी। आप स्क्रॉलबार को पूरी तरह से हटा सकते हैं और अपने स्वयं के बटन प्रदान कर सकते हैं जो कंटेनर को वांछित वृद्धि में स्क्रॉल करते हैं। – jackwanders

+0

@kiranvj को मेरा अंतिम रूप मिला, ऐसा नहीं हुआ जब मैंने पूछा कि मुझे यह पसंद आया लेकिन मुझे यह बेहतर पसंद है। आपकी सहायता के लिए धन्यवाद। – petervaz

उत्तर

6

नहीं एक आदर्श समाधान।

लेकिन कुछ इस तरह काम करना चाहिए (एनबी: परिष्कृत करने के लिए की जरूरत है)

​$("#container").scroll(function() { 

    this.scrollTop = parseInt(this.scrollTop/84) * 84; // 84 = height + top and bottom margin 

});​​​ 

फिडल यहाँ http://jsfiddle.net/R7tAK/1/

अद्यतन

कुछ क्या ऊपर से कोड रिफाइंड, किसी भी अन्य प्लगइन के बिना ही या libs। (झिलमिलाहट हटाया)

var scrollTimerHandle = ""; 

$("#container").scroll(function() { 

var newScrollPosition = parseInt(this.scrollTop/84) * 84, 
    _this = this; 

    clearInterval(scrollTimerHandle); 

scrollTimerHandle = setTimeout(function() { 
    _this.scrollTop = newScrollPosition ; 

}, 1000); 


});​ 

प्ले यहाँ http://jsfiddle.net/R7tAK/4/

+0

यह एक आकर्षण की तरह काम कर रहा है, मुझे यकीन है कि यह मेरे कोड में फिट होगा। मदद के लिए बहुत कुछ धन्यवाद। – petervaz

+0

मुझे स्क्रॉल में बहुत सारे जिटर दिखाई देते हैं, जैसा कि मैंने उपरोक्त मेरी टिप्पणी में उल्लेख किया है। – jackwanders

+0

जैसा कि उत्तर में बताया गया है, बहुत ही बुनियादी कच्चा कोड है, और अधिक परिष्कृत करने की आवश्यकता है और कुछ आसपास के तर्क जोड़ सकते हैं। या आपको एक कस्टम स्क्रॉल जोड़ने और कुछ समान तर्क – kiranvj

4

आप शायद, एक Carousel स्क्रॉलबार को हटाने और उपयोग करने के लिए जब से तुम jQuery आप jCarousel प्लगइन का उपयोग कर सकते हैं का उपयोग कर रहे जा रहे हैं। यहाँ का उपयोग कर एक vertical carousel

+0

anwser के लिए धन्यवाद लेकिन इस कैरोसेल को जोड़ने के लिए क्या आवश्यकता बहुत आसान है और सही दिखाई नहीं देगी। हालांकि, यह एक अच्छी प्लगइन है। – petervaz

+1

कैरोसेल का स्वरूप पूरी तरह से तैयार है कि आप इसे कैसे शैलीबद्ध करते हैं, उदाहरण यह देखने का एकमात्र तरीका नहीं है। – JaredMcAteer

0

आप अगर मैं आप सही समझ में इस कोड की कोशिश कर सकते एक उदाहरण है:

$("#container").scroll(function(){ 
     if($("#container").scrollTop()>=10) { 
      $("#container").scrollTop(10); 
     } 
    } 
); 

http://jsfiddle.net/nnwsx/

+0

यह काम नहीं करता है; यह सब कुछ उपयोगकर्ता को पृष्ठ के नीचे 10 पिक्सेल से अधिक स्क्रॉल करने से रोकता है। – jackwanders

+0

वह बिल्कुल सही नहीं था। लेकिन आप निश्चित स्थिति के लिए स्क्रॉल करने के लिए scrollTop (x) का उपयोग कर सकते हैं। – LLAlive

2

यहाँ एक विकल्प है कि कुछ स्क्रॉल बटन के साथ स्क्रॉलबार की जगह है।मैं पर #container

एचटीएमएल

<div id="container"> 
    <!-- your blocks --> 
</div> 
<div id="buttons"> 
    <button id="scrollUp">Up</button> 
    <button id="scrollDown">Down</button> 
</div> 

overflow:hidden; की स्थापना जावास्क्रिप्ट

var container = $('#container'); 
var inc = 84; 
$('#scrollUp').on('click',function(){ 
    container.scrollTop(container.scrollTop()-inc); 
});   
$('#scrollDown').on('click',function(){ 
    container.scrollTop(container.scrollTop()+inc); 
}); 

jsFidle DEMO

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

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