1、效果演示
2、完整代码
index.html
<!DOCTYPE html>
<html>
<head>
<title>Full-Screen Toggle</title>
<link type="text/css" rel="stylesheet" href="index.css" />
</head>
<body>
<div class="page-wrapper" id="page-wrapper">
<div class="page-content content-0"></div>
<div class="page-content content-1"></div>
<div class="page-content content-2"></div>
</div>
<div class="page-tap" id="page-tap">
<div class="side-tap tap-0" data-index="0"></div>
<div class="side-tap tap-1" data-index="1"></div>
<div class="side-tap tap-2" data-index="2"></div>
</div>
<div class="page-hint" id="page-hint"></div>
<script type="text/javascript" src="index.js"></script>
</body>
</html>
index.css
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
.page-wrapper {
width: 100%;
position: absolute;
left: 0;
top: 0;
transition: top 600ms ease-out;
}
.page-content {
width: 100%;
}
.content-0 {
background-color: rgba(236, 0, 140, 0.2);
}
.content-1 {
background-color: rgba(38, 230 ,0, 0.2);
}
.content-2 {
background-color: rgba(68, 200 ,245, 0.2);
}
.page-tap {
position: fixed;
top: 0%;
left: 96%;
width: 4%;
display: flex;
flex-direction: column;
background-color: white;
}
.side-tap {
flex: 1;
}
.side-tap:hover {
cursor: pointer;
opacity: 0.4;
}
.tap-0 {
background-color: #ec008c;
opacity: 0.2;
}
.tap-1 {
background-color: #26e600;
opacity: 0.2;
}
.tap-2 {
background-color: #44c8f5;
opacity: 0.2;
}
.page-hint {
position: fixed;
top: 90%;
left: 50%;
animation: arrow-down 1200ms ease-out infinite;
}
.page-hint::before {
content: "";
position: absolute;
width: 10px;
height: 10px;
border-top: 1px solid gray;
border-left: 1px solid gray;
transform: rotate(-135deg);
}
.page-hint::after {
content: "";
position: absolute;
width: 10px;
height: 10px;
border-top: 1px solid gray;
border-left: 1px solid gray;
transform: rotate(-135deg);
margin-top: 10px;
}
@keyframes arrow-down {
from { transform: translateY(0px); opacity: 0.5; }
to { transform: translateY(25px); opacity: 0; }
}
index.js
let clientHeight = document.body.clientHeight
let wrapper = document.getElementById('page-wrapper')
let tap = document.getElementById('page-tap')
let hint = document.getElementById('page-hint')
let pages = document.getElementsByClassName('page-content')
let totalPages = pages.length
wrapper.style.height = clientHeight + 'px'
tap.style.height = clientHeight + 'px'
for (let currIndex = 0; currIndex < totalPages; currIndex++) {
pages[currIndex].style.height = clientHeight + 'px'
}
let currActiveListener = {
value: 0,
get currActive() {
return this.value
},
set currActive(value) {
this.value = value
wrapper.style.top = -(value * clientHeight) + 'px'
hint.style.display = (value === totalPages - 1) ? 'none' : 'block'
}
}
let currTimer = 0
let lastTimer = 0
document.addEventListener('mousewheel', function(event) {
currTimer = new Date().getTime()
if (currTimer - lastTimer > 300) {
if (event.wheelDelta < 0 && currActiveListener.currActive < totalPages - 1) {
currActiveListener.currActive += 1
}
if (event.wheelDelta > 0 && currActiveListener.currActive > 0) {
currActiveListener.currActive -= 1
}
lastTimer = new Date().getTime()
}
})
document.getElementById('page-hint').addEventListener('click', function(){
currActiveListener.currActive = (currActiveListener.currActive + 1) % totalPages
})
document.getElementById('page-tap').addEventListener('click', function(){
currActiveListener.currActive = parseInt(window.event.path[0].getAttribute('data-index'))
})