我在開發中有一個應用程序,我希望它能夠在用戶向上或向下滾動時將其鎖定到最近的錨點。使用javascript/jquery自動滾動到固定點
是否有任何已知的方法來做到這一點?如果有人在iPhone上使用「大約」應用程序,您就會知道我在說什麼。
我有一個簡單的解決方案砍死工作,檢測卷軸和做到這一點:
var nearestAnchorOffset = calculateNearestAnchorOffset();
$('body').scrollTop(nearestAnchorOffset);
然而,因爲它是相當神經質和不可預測的,有時它的效果並不理想。
一個問題似乎是滾動事件在滾動時觸發開始,滾動結束時是否存在等效事件?
這裏是我想要得到它的工作在現場:
注效果只在小屏幕觸發(它是不是真的需要在桌面上)。我在滾動中使用了jQuery去抖動,因此只有當用戶停止滾動時纔會觸發。它在桌面上非常流暢,但是當在iPhone上查看時,50%的時間並不正確,並且滾動到錯誤的地方。
這是迄今爲止我的完整的解決方案:
if($(document).width() <= 768){
var offsets = {};
$(window).scroll($.debounce(function(data) {
if(isActive !== false){
// different scrollable points
offsets.todaytitle = $('.row.today.title').offset();
offsets.todaywind = $('.row.today.result .wind').offset();
offsets.todaytemp = $('.row.today.result .temp').offset();
offsets.tomorrowtitle = $('.row.tomorrow.title').offset();
offsets.tomorrowwind = $('.row.tomorrow.result .wind').offset();
offsets.tomorrowtemp = $('.row.tomorrow.result .temp').offset();
offsets.form = $('#postcodeForm').offset();
offsets.nav = $('#nav-bottom').offset();
offsets.top = {top: 0};
var current = $(window).scrollTop();
var closest = "";
var curDiff = 99999;
$.each(offsets, function(key, value) {
var diff = Math.abs(offsets[key].top - current);
if(diff < curDiff){
curDiff = diff;
closest = key;
}
});
animatedScroll(offsets[closest].top);
}
},350));
}
function animatedScroll(offset){
$("body").animate({ scrollTop: offset },200, function() {
scrollingOn = false;
});
}
任何幫助,將不勝感激!
嗯,這是一個有趣的解決方案 - 我已經發布了一些更詳細的信息,我已經嘗試到目前爲止,並鏈接到我正在開發的應用程序,如果您在小窗口中查看它,或者更好iPhone你會明白我的意思。它可以在桌面上正常工作,但iPhone給我帶來問題,它似乎不是在正確的位置觸發滾動事件(它在正確的時間觸發,但標記的位置似乎是手指離開而不是休息位置動力後)。 –