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 相关文章推荐
jQueryMobile之Helloworld与页面切换的方法
Feb 04 Javascript
javascript操作select元素实例分析
Mar 27 Javascript
javascript字符串与数组转换汇总
May 26 Javascript
详解JavaScript UTC时间转换方法
Jan 07 Javascript
Bootstrap Fileinput文件上传组件用法详解
May 10 Javascript
jQuery animate easing使用方法图文详解
Jun 17 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Oct 05 Javascript
利用js判断手机是否安装某个app的多种方案
Feb 13 Javascript
解决在vue项目中webpack打包后字体不生效的问题
Sep 01 Javascript
JavaScript中七种流行的开源机器学习框架
Oct 11 Javascript
JavaScript遍历DOM元素的常见方式示例
Feb 16 Javascript
详解ES6数组方法find()、findIndex()的总结
May 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引用效率问题分析
2012/03/23 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
js常用排序实现代码
2010/12/28 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
JS中的三个循环小结
2017/06/20 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
python多线程方式执行多个bat代码
2016/06/07 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
Python可迭代对象操作示例
2019/05/07 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
全民健身日活动方案
2014/01/29 职场文书
部门活动策划方案
2014/08/16 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
反邪教观后感
2015/06/11 职场文书