javascript实现页面滚屏效果


Posted in Javascript onJanuary 17, 2017

当我们浏览网页的时候,时常会碰到可以滚动屏幕的炫酷网页,今天笔者对这一技术进行简单实现,效果不及读者理想中那般炫酷,主要针对滚屏的技术原理和思想进行分享和分析。本示例在页面右侧有五个数字标签,代表五个页面,点击数字可以切换到对应的页面,滚动鼠标滑轮可以实现数字标签的切换,页面的切换。笔者未对页面的平稳滚动进行实现,读者可自行试验研究。

这是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结构代码:

*{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代码:

/*
 思路:
 第一步:当页面加载完后,获取所要操作的节对象
 第二步:为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的分离,读者可自行整合。代码编写的逻辑思路也在代码中进行了简单说明,方便读者阅读和理解。笔者在这里只是对滚屏技术进行简单的实现,纯javascript技术,效果稍欠人意,读者可自行学习,对这一技术进行完美实现。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript 动态加载 css 方法总结
Jul 11 Javascript
JS URL传中文参数引发的乱码问题
Sep 02 Javascript
表单JS弹出填写提示效果代码
Apr 16 Javascript
jQuery隔行变色与普通JS写法的对比
Apr 21 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 Javascript
jQuery实现tab选项卡效果的方法
Jul 08 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
动态更新highcharts数据的实现方法
May 28 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
node.js调用C++函数的方法示例
Sep 21 Javascript
js实现轮播图效果 z-index实现轮播图
Jan 17 Javascript
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
javascript中递归的两种写法
Jan 17 #Javascript
基本DOM节点操作
Jan 17 #Javascript
React快速入门教程
Jan 17 #Javascript
javascript操作cookie
Jan 17 #Javascript
vue.js学习笔记:如何加载本地json文件
Jan 17 #Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 #Javascript
详解微信小程序开发之城市选择器 城市切换
Jan 17 #Javascript
You might like
东方红 - 来复式再生机的修复
2021/03/02 无线电
第九节 绑定 [9]
2006/10/09 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
node.js入门教程
2014/06/01 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
python正则表达式面试题解答
2020/04/28 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
三个Unix的命令面试题
2015/04/12 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
给女儿的表扬信
2014/01/18 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
社团活动总结怎么写
2014/06/30 职场文书
会计工作总结范文2014
2014/12/23 职场文书
先进个人事迹材料
2014/12/29 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python