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 相关文章推荐
Using the TextRange Object
Oct 14 Javascript
利用JS进行图片的切换即特效展示图片
Dec 03 Javascript
Javascript基础知识(二)事件
Sep 29 Javascript
Javascript中prototype的使用详解
Jun 18 Javascript
bootstrapfileinput实现文件自动上传
Nov 08 Javascript
关于 jQuery Easyui异步加载tree的问题解析
Dec 06 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
JavaScript中匿名函数的递归调用
Jan 22 Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 Javascript
node.js express框架实现文件上传与下载功能实例详解
Oct 15 Javascript
详解Node.js使用token进行认证的简单示例
May 25 Javascript
JavaScript多种图形实现代码实例
Jun 28 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
php join函数应用
2011/05/04 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
如何用itertools解决无序排列组合的问题
2017/05/18 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
暑假实习求职信范文
2013/09/22 职场文书
自考毕业生自我鉴定
2013/11/04 职场文书
八项规定对照检查材料
2014/08/31 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
男方婚前保证书
2015/02/28 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js