【发布时间】:2014-08-10 05:38:51
【问题描述】:
当用户滚动可滚动 div(list) 时,我希望它准确滚动列表项的 1 个高度 (22px)。 我遇到的问题是,如果我处理 $(element).scroll 事件并在其中执行 $(element).scrollTop(previousScrollTop + 22) ,则会触发新的“scroll”事件,并且将再次递归调用我的处理程序。
请看一下这个例子: http://jsfiddle.net/VAFkk/1/
如何实现滚动一定数量的像素?
我怎样才能 在不触发“滚动”事件的情况下更改滚动顶部?
如果有任何建议,我们将不胜感激。 使用 JQuery 1.9.1。
JavaScript:
var previousScrollTop = $('.list').scrollTop();
// Bind scroll handler so that it scrolls exactly 22px.
$('.list').scroll(function() {
console.log('scroll happened');
var listElement = $(this);
var currentScrollTop = listElement.scrollTop();
if (currentScrollTop > previousScrollTop) {
listElement.scrollTop(previousScrollTop + 22);
} else if (currentScrollTop < previousScrollTop) {
listElement.scrollTop(previousScrollTop - 22);
}
previousScrollTop = currentScrollTop;
});
HTML:
<div class="list">
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
<div class="list-item"></div>
</div>
CSS:
.list {
border: 1px solid red;
max-height: 88px;
overflow-y: auto;
}
.list-item {
border: 1px solid blue;
height: 20px;
}
【问题讨论】:
-
设置标志
ignorescroll,默认false,如果标志true,设置false并返回 -
你能改一下jsFiddle吗?据我所知,它不起作用。如果我理解正确:jsfiddle.net/VAFkk/2
-
类似的东西,但仍然不是...jsfiddle.net/VAFkk/3
-
我想我明白了:jsfiddle.net/VAFkk/4 谢谢。
-
不,有时仍然表现得很奇怪。
标签: javascript jquery scroll