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简介
Oct 16 Javascript
jquery动态改变div宽度和高度
Feb 09 Javascript
jQuery实现行文字链接提示效果的方法
Mar 10 Javascript
12个超实用的JQuery代码片段
Nov 02 Javascript
跟我学习javascript的循环
Nov 18 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
Feb 03 Javascript
用JS实现轮播图效果(二)
Jun 26 Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
vue-router实现组件间的跳转(参数传递)
Nov 07 Javascript
vue中组件的过渡动画及实现代码
Nov 21 Javascript
使用node.JS中的url模块解析URL信息
Feb 06 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
YUI模块开发原理详解
2013/11/18 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
Python编程之string相关操作实例详解
2017/07/22 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
师范院校学生自荐信范文
2013/12/27 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
一年级语文教学反思
2014/02/13 职场文书
小区物业门卫岗位职责
2014/04/10 职场文书
四年级评语大全
2014/04/21 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
初二学生评语大全
2014/12/26 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
Python之matplotlib绘制饼图
2022/04/13 Python