我一直在尝试将滚动事件绑定到页面上的元素。滚动加载更多内容,如twitter或facebook。
<div id="main-content">
<ul class="event-list big row" id="event-list">
...
</ul>
</div>
#main-content {
width: 984px;
overflow: visible;
margin: 0 auto;
color: #101010;
width: 974px;
padding: 10px 0 7px 0;
}
#main-content .event-list.big {
width: 1080px;
padding: 0 0 20px 0;
}
$('#event-list').scroll(function() {
var curScroll = $(this)[0].scrollTop,
maxScroll = $(this)[0].scrollHeight - $(this).height();
console.log(curScroll, ' :: ', maxScroll);
if ((curScroll >= maxScroll - 200) && !loading) {
loading = true;
$(this)[0].scrollTop = curScroll;
$('.loading').fadeIn('fast');
if (page <= $('.page').length) {
loadMore();
}
}
});
我滚动时不会触发滚动事件,即使不打印 curScroll 和 maxScroll 。
可能导致问题的原因可能是css样式错误或我的 js 代码错误?
答案 0 :(得分:4)
这是一个关于滚动事件触发我认为你想要的实例。通过设置'overflow:scroll'将div用作可滚动区域。注意:如果列表在初始加载时足够长,您将只获得滚动事件。 (请参阅主要内容的高度属性。我将把ajax加载到你身上。:)
CSS
#main-content {
width: 984px;
overflow: scroll;
margin: 0 auto;
color: #101010;
width: 974px;
height: 100px;
padding: 10px 0 7px 0;
}
#main-content .event-list.big {
width: 1080px;
padding: 0 0 20px 0;
}
脚本
$(document).ready(function() {
$('#main-content').scroll(function() {
var curScroll = $(this)[0].scrollTop,
maxScroll = $(this)[0].scrollHeight - $(this).height();
console.log(curScroll, ' :: ', maxScroll);
if ((curScroll >= maxScroll - 200) && !loading) {
loading = true;
$(this)[0].scrollTop = curScroll;
$('.loading').fadeIn('fast');
if (page <= $('.page').length) {
loadMore();
}
}
});
});
HTML
<div id="main-content">
<ul class="eventlist big row" id="event-list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>
答案 1 :(得分:3)
请参阅http://api.jquery.com/scroll/
滚动事件仅在窗口,框架,iframe等元素和overflow: (scroll|auto)
元素上触发,其内容必须大于可用的宽度/高度。所以我建议你添加
#event-list {
overflow: auto;
}
如果您想要在用户滚动到特定元素时进行侦听,则应该侦听窗口的滚动事件,然后检查滚动坐标。
$(window).scroll(function() { /** ... **/ });
答案 2 :(得分:3)
当您将身体的css属性设置为
时body {height: 100%;overflow: auto;} // or visible
Now, $(window).scroll(); will not work.
这将导致jquery滚动事件无法工作,因为dom不可滚动。因此,您必须删除overflow属性或将其设置为滚动。