我想制作一个类似于此页面上的功能。B&O BeoPlay A3
当您向下滚动时,它会自动滚动到下一页。
我一直在玩 window.pageYOffset。到目前为止我有这个:
window.onscroll = scroll;
function scroll () {
setTimeout(function() {
if (window.pageYOffset < 100 && window.pageYOffset > 2) {
scrollLogin();
}
else if (window.pageYOffset > 100 && window.pageYOffset < 159 && window.pageYOffset != 124) {
scrollSky();
}
else if (window.pageYOffset > 159 && window.pageYOffset < 248) {
scrollCity();
}
},500);
}
function scrollLogin() {
$('html,body').animate({
scrollTop: $("#login").offset().top
}, 500);
}
function scrollSky() {
$('html,body').animate({
scrollTop: $("#skyContainer").offset().top
}, 500);
}
function scrollCity() {
$('html,body').animate({
scrollTop: $("#city").offset().top
}, 500);
}
问题是这种方式根本无法无缝运行。我必须等待 500 毫秒才能再次滚动。如果这也仅适用于固定的屏幕分辨率。您知道存档此功能的更好方法吗?这也允许百分比测量,以便它在不同分辨率的显示器上工作?
所以我想要视口坚持的 3 个状态:顶部(登录栏)、中间(天空动画)和底部(搜索栏)。
非常感谢你!
编辑:
采取2:
我做了一个变量来告诉我动画是否结束。它只是在动画打开时将值设置为“1”,这可以防止各种混乱。
所以我的脚本现在工作得很好。唯一的问题是它只适用于我的 innerHeight 和 innerWidth。(内部高度:863 - 内部宽度:1440)。
有没有办法以百分比制作 window.pageYOffset ?这是存档此效果的最佳方式吗?
感谢您有一个愉快的一天。
这是我的新代码:
window.onscroll = scroll;
var animationIsOn = 0;
function scroll () {
if (animationIsOn == 0) {
var pageY = window.pageYOffset;
if (pageY < 119 && pageY > 69) {
scrollLogin();
}
else if (pageY > 5 && pageY < 69 || pageY > 179 && pageY < 254) {
scrollSky();
}
else if (pageY > 129 && pageY < 179) {
scrollCity();
}
}
}
function scrollLogin() {
animationIsOn = 1;
$('html,body').animate({
scrollTop: $("#login").offset().top
}, 500, function() {
animationIsOn = 0;
});
}
function scrollSky() {
animationIsOn = 1;
$('html,body').animate({
scrollTop: $("#skyContainer").offset().top
}, 500, function() {
animationIsOn = 0;
});
}
function scrollCity() {
animationIsOn = 1;
$('html,body').animate({
scrollTop: $("#city").offset().top-600
}, 500, function() {
animationIsOn = 0;
});
}