如何使滚动条仅以固定间隔滚动?

时间:2012-08-10 13:30:54

标签: jquery html css

我有一个固定大小和溢出的容器div:滚动,它填充了较小的div,制作了一种列表。这是一个小提琴示例:http://jsfiddle.net/etYSC/2/

我想要的是滚动从不切割一个框,总是显示3个完整的框(在此示例中),因此它将始终滚动固定数量的像素。

我该怎么做?

我正在使用jquery库。

由于误导性关键字,谷歌在这个问题上一直是个苛刻的情妇。

- 解决方案

我能够更多地改进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/

感谢所有的帮助,我迷失了如何接受这个并且今天学到了很多东西。

4 个答案:

答案 0 :(得分:6)

不是一个完美的解决方案。

但这样的事情应该有用(NB:需要改进)

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

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

});​​​

在此处http://jsfiddle.net/R7tAK/1/

更新

一些比上面更精细的代码,没有任何其他插件或库。 (闪烁删除)

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/

答案 1 :(得分:4)

你可能不得不删除滚动条并使用Carousel,因为你使用的是jQuery,你可以使用jCarousel插件。以下是使用vertical carousel

的示例

答案 2 :(得分:2)

这是一个用滚动条替换滚动条的选项。我在overflow:hidden;

上设置了#container,删除了滚动条

HTML

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

的Javascript

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

答案 3 :(得分:0)

如果我理解你,你可以试试这段代码:

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

http://jsfiddle.net/nnwsx/