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 相关文章推荐
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
Jan 24 Javascript
JS去除数组重复值的五种不同方法
Sep 06 Javascript
js改变鼠标的形状和样式的方法
Mar 31 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 Javascript
AngularJS实现全选反选功能
Dec 08 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
Apr 01 Javascript
JavaScript接口的实现三种方式(推荐)
Jun 14 Javascript
Bootstrap table两种分页示例
Dec 23 Javascript
详解如何使用webpack在vue项目中写jsx语法
Nov 08 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个人网站架设连环讲(四)
2006/10/09 PHP
php 分库分表hash算法
2009/11/12 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
PHP实现小偷程序实例
2016/10/31 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
JS阻止用户多次提交示例代码
2014/03/26 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python中的各种装饰器详解
2015/04/11 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
python 检测图片是否有马赛克
2020/12/01 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
启动仪式策划方案
2014/06/14 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
部门主管竞聘书
2015/09/15 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL