本文介绍如何使用纯JavaScript实现网页全屏滚动效果。通过监听鼠标滚轮事件,动态计算并修改容器位置,配合右侧数字导航实现页面切换。文章提供了HTML结构、CSS样式及JS逻辑的完整代码示例,解析了索引控制与DOM操作的核心原理。
全屏滚动效果概述
在浏览网页时,用户常会遇到具有全屏滚动效果的页面。本文旨在通过一个简单的示例,分享实现此类滚屏效果的技术原理与核心思想。示例包含页面右侧的五个数字标签,点击标签可跳转至对应页面,同时支持通过鼠标滚轮上下滑动来切换页面。需要注意的是,本示例未实现平滑滚动动画,读者可自行研究相关实现方案。
以下是实现该效果所需的HTML结构代码:
HTML结构实现
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div class="big-box" id="bigBox">
<div class="item item1"><h1>屏幕1</h1></div>
<div class="item item2"><h1>屏幕2</h1></div>
<div class="item item3"><h1>屏幕3</h1></div>
<div class="item item4"><h1>屏幕4</h1></div>
<div class="item item5"><h1>屏幕5</h1></div>
</div>
<ul class="controls">
<li class="active">1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script src="behavior.js"></script>
</body>
</html>
接下来是配套的CSS样式代码,用于定义页面布局与视觉样式:
CSS样式布局
*{margin:0; padding:0;}
html,body{
width:100%;
height:100%;
overflow:hidden;
}
.big-box {
width:100%;
height:500%;
text-align:center;
position:absolute;
}
.big-box .item{
height:20%;
}
.big-box .item1 {
background-color:red;
}
.big-box .item2 {
background-color:blue;
}
.big-box .item3 {
background-color:purple;
}
.big-box .item4 {
background-color:gold;
}
.big-box .item5 {
background-color:pink;
}
.controls {
list-style:none;
position:absolute;
top:20%;
right:20px;
}
.controls li {
width:50px;
height:50px;
font:bold 22px/50px "宋体";
text-align:center;
background-color:#000;
color:#fff;
cursor:pointer;
}
.controls li+li {
margin-top:5px;
}
.controls li.active {
background-color:#fff;
color:red;
}
核心逻辑由JavaScript代码实现,负责处理交互与状态更新:
JavaScript交互逻辑
/*
思路:
第一步:当页面加载完后,获取所要操作的节对象
第二步:为document添加一个滚轮滚动事件
第三步:滚轮滚动切换
获取当前浏览器可视区域的高度
var viewHeight = document.body.clientHeight
滚轮切换的目的:就是更改bigBox的top值
top:最大0
top:最小 viewHeight*-4
从上到下或从下到上:最多走4次(5个页面) 每一次走viewHeight
控制的关键点:索引 定一个索引 2
滚轮↓
索引+1
滚轮↑
索引-1
bigBox.style.top = -索引*viewHeihgt
*/
var bigBox = document.getElementById("bigBox");//获取bigBox节点对象
var lis = document.querySelectorAll(".controls li");//获取所有的li节点对象
var viewHeight = document.body.clientHeight;//获取当前页面高度
var flag = true;//设置开关
var index = 0;//设置索引
//封装事件,兼容浏览器
function on(obj,eventType,fn){
if(obj.addEventListener){
obj.addEventListener(eventType, fn);
}else{
obj.attachEvent("on" + eventType, fn);
}
}
//鼠标滚动事件处理函数
function handler(e){
var _e = window.event || e;
if(flag){
flag = false;
if(_e.wheelDelta==120 || _e.detail==-3){//如果鼠标滚轮向上滚动,detail为火狐判断条件
index--;
if(index<0){
index = 0;
}
}else{//向下滚动
index++;
if(index>lis.length-1){//如果索引大于页面数,就是滚到最后一张页面时,再滚动鼠标页面不再滚动
index = lis.length-1;
}
}
bigBox.style.top = -index*viewHeight + "px";//bigBox整体上移index个页面
for(var i=0; i<lis.length; i++){
lis[i].className = "";//重置全部li的类
}
lis[index].className = "active";//设置当前li的类名
setTimeout(function(){//页面滚动间隔一秒,防止滚动太快
flag = true;//重新开启开关
},1000);
}
}
on(document,"mousewheel",handler);//滚轮滚动事件
on(document,"DOMMouseScroll",handler);//滚轮滚动事件,适配火狐浏览器
//数字标签点击处理
for(var i=0; i<lis.length; i++){
lis[i].tag = i;
lis[i].onclick = function(){
for(var j=0; j<lis.length; j++){
lis[j].className = "";
}
lis[this.tag].className = "active";
bigBox.style.top = -this.tag*viewHeight + "px";
}
}
本文示例将HTML、CSS和JavaScript进行了分离,读者可根据需要自行整合。代码中已包含简要的逻辑说明,便于理解。本实现仅展示了滚屏技术的基础功能,未追求极致的视觉效果,读者可在此基础上进一步优化,以实现更完美的全屏滚动体验。
以上就是本文的全部内容,希望这些内容能对大家的学习或工作有所帮助。欢迎继续支持本站,获取更多技术分享。