<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
*{
margin: 0;
padding:0;
}
html,body{
height: 100%;
overflow: hidden;
position: relative;
}
.container{
height: 100%;
transition: all .5s;
}
.item{
height: 100%;
}
.indexes{
z-index: 1000;
position: absolute;;
right: 0;
top: 50%;
transform: translateY(-50%);
}
.indexes li{
list-style: none;
width: 10px;
margin: 20px;
height: 10px;
border-radius: 50%;
background-color: azure;
}
.indexes li.active{
background-color: red;
}
.left-nav{
position: absolute;
top: 40%;
left: 100px;
z-index: 1000;
list-style: none;
width: 50px;
color: white;
}
.left-nav li{
background-color: black;
line-height: 40px;
text-align: center;
height: 40px;
}
.left-nav li.on{
background-color: orangered;
}
</style>
<body>
<div class="item" style="background-color: antiquewhite;"></div>
<div class="container">
<div class="item" style="background-color: rgb(215, 242, 250);"></div>
<div class="item" style="background-color: rgb(250, 215, 244);"></div>
<div class="item" style="background-color: rgb(234, 250, 215);"></div>
<div class="item" style="background-color: rgb(225, 250, 215);"></div>
</div>
<ul class="indexes">
<li class="active"></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<ul class="left-nav">
<li class=" on">AA</li>
<li>BB</li>
<li>CC</li>
<li>DD</li>
</ul>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="./req.js"></script>
<script>
$(function(){
let i=0
function move(e){
if (e.wheelDelta<0) {
if (i===$(".item").length-1) return
i++;
}else{
if (i===0) return
i--
}
$('.container').css("transform",`translateY(-${100*i}vh)`)
$('.indexes li').eq(i).addClass('active').siblings().removeClass("active")
$('.left-nav li').eq(i).addClass('on').siblings().removeClass("on")
};
window.onmousewheel = dsl.throttling(move,500)
$('.indexes li').hover(function(){
let index = $(this).index()
$('.container').css("transform",`translateY(-${100*index}vh)`)
$('.indexes li').eq(index).addClass('active').siblings().removeClass("active")
})
$(".left-nav li").click(function(){
let index = $(this).index()
$('.container').css("transform",`translateY(-${100*index}vh)`)
$('.left-nav li').eq(index).addClass('on').siblings().removeClass("on")
})
})
</script>
</body>
</html>
req.js
throttling(fn, wait) {
let endTime = +new Date;
return function () {
if (+new Date - endTime < wait) {
return console.log('太频繁了');
}
fn.apply(this,arguments);
endTime = +new Date
}
}