我有一个固定大小和溢出的容器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);
});
捕捉到最近的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);
});
感谢所有的帮助,我迷失了如何接受这个并且今天学到了很多东西。
答案 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);
});
答案 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);
});
答案 3 :(得分:0)
如果我理解你,你可以试试这段代码:
$("#container").scroll(function(){
if($("#container").scrollTop()>=10) {
$("#container").scrollTop(10);
}
}
);