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 变量作用域 代码分析
Jun 26 Javascript
jQuery遍历Form示例代码
Sep 03 Javascript
js格式化时间的方法
Dec 18 Javascript
JS实现动态生成表格并提交表格数据向后端
Nov 25 Javascript
使用jQuery操作HTML的table表格的实例解析
Mar 13 Javascript
AngularJS 自定义过滤器详解及实例代码
Sep 14 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
Sep 18 Javascript
jQuery之动画ajax事件(实例讲解)
Jul 18 jQuery
vue实现商品加减计算总价的实例代码
Aug 12 Javascript
解决vue axios的封装 请求状态的错误提示问题
Sep 25 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
js校验开始时间和结束时间
May 26 Javascript
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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
PHP 文件上传功能实现代码
2009/06/24 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
vue代码分割的实现(codesplit)
2018/11/13 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python使用pil生成缩略图的方法
2015/03/26 Python
Django数据库表反向生成实例解析
2018/02/06 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
Python 元类实例解析
2018/04/04 Python
python binascii 进制转换实例
2019/06/12 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
金融专业求职信
2014/08/05 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
导游词之桂林
2019/08/20 职场文书
Python集合set()使用的方法详解
2022/03/18 Python