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 相关文章推荐
根据经纬度计算地球上两点之间的距离js实现代码
Mar 05 Javascript
JavaScript制作windows经典扫雷小游戏
Mar 31 Javascript
深入探寻seajs的模块化与加载方式
Apr 14 Javascript
jQuery实现的仿select功能代码
Aug 19 Javascript
微信小程序 scroll-view隐藏滚动条详解
Jan 16 Javascript
bootstrap IE8 兼容性处理
Mar 22 Javascript
微信小程序之购物车功能
Sep 23 Javascript
基于JS递归函数细化认识及实用实例(推荐)
Aug 07 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
Aug 28 Javascript
浅谈React组件之性能优化
Mar 02 Javascript
axios对请求各种异常情况处理的封装方法
Sep 25 Javascript
深入理解Node内建模块和对象
Mar 12 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支持页面回退的两种方法
2008/01/10 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
php 文件上传实例代码
2012/04/19 PHP
php牛逼的面试题分享
2013/01/18 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
django之session与分页(实例讲解)
2017/11/13 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
Python的Lambda函数用法详解
2019/09/03 Python
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
找工作最新求职信
2013/12/22 职场文书
企业指导教师评语
2014/04/28 职场文书
群众路线调研报告范文
2014/11/03 职场文书
元宵节寄语大全
2015/02/27 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
2016小学新学期寄语
2015/12/04 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫