這裏是我結束了去:
$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
選擇相結合,我只是循環通過每個項目查看並找出哪一個最接近容器的頂部。可能有更有效的方法來做到這一點,但現在這會起作用。
更新(性能):
繼的想法,我發現here,我們可以選擇只更新頁碼用戶已完成滾動至少半秒鐘後:
$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/
我看到你的想法 - 但我的頁面號碼從1變爲4與您的代碼? – lhan