gpt4 book ai didi

javascript - 向下滚动时,将 100vh 滚动到底部

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:38 25 4
gpt4 key购买 nike

我想在 http://www.squaredot.eu/#Intro 实现同样的效果

所以如果我向下滚动,正文必须滚动 100vh 到底部。而且如果向上滚动,正文必须向上滚动 100vh。我尝试了一些东西,但没有成功。

HTML:

<!DOCTYPE html>
<html>
<head>
<title> Log In </title>
<link href="main.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="e1"></div>
<div id="e2"></div>
<div id="e3"></div>
<div id="e4"></div>
<div id="e5"></div>
</body>
</html>

CSS:

body, html {
height: 100%;
margin: 0;
padding: 0;
}

#e1 {
width: 100%;
height: 100vh;
background-color: red;
}

#e2 {
width: 100%;
height: 100vh;
background-color: green;
}

#e3 {
width: 100%;
height: 100vh;
background-color: yellow;
}

#e4 {
width: 100%;
height: 100vh;
background-color: blue;
}

#e5 {
width: 100%;
height: 100vh;
background-color: orange;
}

JavaScript

document.addEventListener('scroll', function(e) {
var currScroll = document.body.scrollTop;
document.body.scrollTop = calc(~"currScroll + 100vh");
}

);

最佳答案

一种解决方案可能是使用 CSS 转换(就像您链接的网站正在做的那样)。

将其添加为 css:

body {
transform: translate3d(0px, 0px, 0px);
transition: all 700ms ease;
}

这是 javascript

var pageHeight = window.innerHeight;

document.addEventListener('scroll', function(){
document.body.scrollTop = 0;
});

document.addEventListener('wheel', function(e) {
//console.log(e.deltaY);
if(e.deltaY > 0) {
scrollDown();
} else {
scrollUp();
}
}
);

function scrollDown() {
document.body.style.transform = 'translate3d(0px, -'+ pageHeight + 'px, 0px)';
}

function scrollUp() {
document.body.style.transform = 'translate3d(0px, 0px, 0px)';
}

它仅适用于元素 1 和 2,但这只是一个开始,您可以学习如何实现其他步骤!

这里的工作示例: https://jsbin.com/titaremevi/edit?css,js,output


更新:

这是完整的解决方案:

var pageHeight = window.innerHeight;
var isAnimating = false;
document.body.style.transform = 'translate3d(0px,0px,0px)';

document.addEventListener('scroll', function(e){
document.body.scrollTop = 0;
});
document.addEventListener('wheel', wheelListener);

function wheelListener(e) {
if(e.deltaY > 0) {
scrollPage(-pageHeight);
} else {
scrollPage(+pageHeight);
}
}

function scrollPage(scrollSize) {
if(isAnimating){
return;
}
isAnimating = true;
var yPos = getNewYPos(scrollSize);
document.body.style.transform = 'translate3d(0px,'+ yPos + ',0px)';
}

function getNewYPos(add){
var oldYPos = document.body.style.transform.split(',')[1];
oldYPos = parseInt(oldYPos.replace(/px/,''));
var newYPos = oldYPos + add;
if(newYPos > 0){
isAnimating = false;
}
return Math.min(0, newYPos) + 'px';
}


document.body.addEventListener('transitionend', function(){
setTimeout(function(){ isAnimating = false; }, 500);
document.addEventListener('wheel', wheelListener);
})

你可以看到它在这里工作:https://jsbin.com/foxigobano/1/edit?js,output

关于javascript - 向下滚动时,将 100vh 滚动到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43574033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com