这是我最终的结果:
$container.on('scroll', function () {
// for each item in viewport, which one is in view the MOST?
var diff = null;
var num;
$('.item:in-viewport').each(function(){
var thisPage = $(this).attr("page");
var thisTop = $(this).position().top;
if(diff == null){
diff = Math.abs(containerTop - thisTop);
num = thisPage;
} else {
var temp = Math.abs(containerTop - thisTop);
if(temp < diff) {
diff = temp;
num = thisPage;
}
}
});
diff = null;
$cp.html(num);
});
http://jsfiddle.net/j2aet/1/
我仍然可以使用:in-viewport
选择器,但我没有将它与:first
选择器结合使用,而是遍历视图中的每个项目并找出最接近容器顶部的项目。可能有一种更有效的方法来做到这一点,但现在这将起作用。
更新(性能):
按照我在这里找到的想法,我们可以选择仅在用户完成滚动至少半秒后更新页码:
$container.on('scroll', function () {
if(this.scrollTo) clearTimeout(this.scrollTo);
this.scrollTo = setTimeout(function () { updatePageNumber();}, 500);
});
function updatePageNumber(){
// for each item in viewport, which one is in view the MOST?
var diff = null;
var num;
$('.item:in-viewport').each(function(){
var thisPage = $(this).attr("page");
var thisTop = $(this).position().top;
if(diff == null){
diff = Math.abs(containerTop - thisTop);
num = thisPage;
} else {
var temp = Math.abs(containerTop - thisTop);
if(temp < diff) {
diff = temp;
num = thisPage;
}
}
});
diff = null;
$cp.html(num);
}
http://jsfiddle.net/j2aet/2/