Jquery 100% 滚动到第一部分
Jquery 100% scroll to first section
我试图将页面的 100% 滚动到第一部分,然后正常滚动到其他部分,反之亦然。
我尝试了不同的方法,除了一个循环之外没有任何结果.. 检查 this fiddle.
这是页面的结构,每个元素都有 100% 的高度:
<header>Header content...</header>
<section>Section content...</section>
<section>Section content...</section>
<section>Section content...</section>
Javascript
$(function () {
var lastScrollTop = $(window).scrollTop(),
delta = 5,
eleH = $('header').outerHeight();
$(window).scroll(function () {
var nowScrollTop = $(this).scrollTop();
if (Math.abs(lastScrollTop - nowScrollTop) >= delta) {
if (nowScrollTop <= eleH && nowScrollTop > lastScrollTop) {
$('html,body').animate({
scrollTop: $('body section:first-of-type').offset().top
}, 600);
console.log('Scroll down');
} else if (nowScrollTop <= eleH && nowScrollTop < lastScrollTop) {
$('html,body').animate({
scrollTop: 0
}, 600);
console.log('Scroll up');
}
lastScrollTop = nowScrollTop;
}
});
});
CSS
html, body {
height:100%
}
header, section {
display:block;
width:100%;
height:100%;
}
header {
background-color:gray;
}
作为插件,我已经使用过 Alton(fiddle 中的演示 link),但如果有压力或使用 [=32= 的惯性滚动,它就不能很好地工作了].
为了让它工作,我添加了一个变量 isScrolling
,它指示 javascript 是否正忙于滚动。滚动功能完成后,我将该变量设置为 false 并重新计算 lastScrollTop
$(function () {
var lastScrollTop = $(window).scrollTop(),
delta = 5,
eleH = $('header').outerHeight(),
isScolling = false ;
$(window).scroll(function () {
if(isScolling)
return;
var nowScrollTop = $(this).scrollTop();
if (Math.abs(lastScrollTop - nowScrollTop) >= delta) {
if (nowScrollTop <= eleH && nowScrollTop >= lastScrollTop) {
isScolling = true;
$('html,body').animate({
scrollTop: $('body section:first-of-type').offset().top
}, 600, function() {
isScolling = false;
lastScrollTop = $(window).scrollTop();
});
console.log('Scroll down');
} else if (nowScrollTop <= eleH && nowScrollTop < lastScrollTop) {
isScolling = true;
$('html,body').animate({
scrollTop: 0
}, 600, function() {
isScolling = false;
lastScrollTop = $(window).scrollTop();
});
console.log('Scroll up');
}
lastScrollTop = nowScrollTop;
}
});
});
我试图将页面的 100% 滚动到第一部分,然后正常滚动到其他部分,反之亦然。
我尝试了不同的方法,除了一个循环之外没有任何结果.. 检查 this fiddle.
这是页面的结构,每个元素都有 100% 的高度:
<header>Header content...</header>
<section>Section content...</section>
<section>Section content...</section>
<section>Section content...</section>
Javascript
$(function () {
var lastScrollTop = $(window).scrollTop(),
delta = 5,
eleH = $('header').outerHeight();
$(window).scroll(function () {
var nowScrollTop = $(this).scrollTop();
if (Math.abs(lastScrollTop - nowScrollTop) >= delta) {
if (nowScrollTop <= eleH && nowScrollTop > lastScrollTop) {
$('html,body').animate({
scrollTop: $('body section:first-of-type').offset().top
}, 600);
console.log('Scroll down');
} else if (nowScrollTop <= eleH && nowScrollTop < lastScrollTop) {
$('html,body').animate({
scrollTop: 0
}, 600);
console.log('Scroll up');
}
lastScrollTop = nowScrollTop;
}
});
});
CSS
html, body {
height:100%
}
header, section {
display:block;
width:100%;
height:100%;
}
header {
background-color:gray;
}
作为插件,我已经使用过 Alton(fiddle 中的演示 link),但如果有压力或使用 [=32= 的惯性滚动,它就不能很好地工作了].
为了让它工作,我添加了一个变量 isScrolling
,它指示 javascript 是否正忙于滚动。滚动功能完成后,我将该变量设置为 false 并重新计算 lastScrollTop
$(function () {
var lastScrollTop = $(window).scrollTop(),
delta = 5,
eleH = $('header').outerHeight(),
isScolling = false ;
$(window).scroll(function () {
if(isScolling)
return;
var nowScrollTop = $(this).scrollTop();
if (Math.abs(lastScrollTop - nowScrollTop) >= delta) {
if (nowScrollTop <= eleH && nowScrollTop >= lastScrollTop) {
isScolling = true;
$('html,body').animate({
scrollTop: $('body section:first-of-type').offset().top
}, 600, function() {
isScolling = false;
lastScrollTop = $(window).scrollTop();
});
console.log('Scroll down');
} else if (nowScrollTop <= eleH && nowScrollTop < lastScrollTop) {
isScolling = true;
$('html,body').animate({
scrollTop: 0
}, 600, function() {
isScolling = false;
lastScrollTop = $(window).scrollTop();
});
console.log('Scroll up');
}
lastScrollTop = nowScrollTop;
}
});
});