js控制页面每次滚动一屏,和楼梯效果
我最近在做我们公司官网的改版,产品中心就是每次滚一屏的,我觉得加上楼梯更方便用户浏览,就随便写了个demo,
先来看看结构,都很简单的
<!--楼梯-->
<ul class="louti">
<li class="active">第1屏</li>
<li>第2屏</li>
<li>第3屏</li>
<li>第4屏</li>
<li>第5屏</li>
</ul>
<!--内容-->
<div class="content">
<div style="background-color: #87CEFB" class="ping staircase">
<div>这是第1屏</div>
</div>
<div style="background-color: #FFC0CB" class="ping staircase">
<div>这是第2屏</div>
/div>
<div style="background-color:#BAD5FF" class="ping staircase">
<div>这是第3屏</div>
</div>
<div style="background-color: #3CB379" class="ping staircase">
<div>这是第4屏</div>
</div>
<div style="background-color: #AFEEEE" class="ping staircase">
<div>这是第5屏</div>
</div>
</div>
再来点简单的CSS
html,body {
height: 100%;
}
body {
margin: 0;
}
.content{height: 100%;}
.content .ping {
height: 100%;
}
li{
list-style: none;
}
.louti{
position: fixed;
top: 25%;
right: 3%;
}
.louti li{
width: 100px;
text-align: center;
border: 1px solid #F5F5F5;
height: 80px;
line-height: 80px;
cursor: pointer;
}
.louti li:nth-child(n+2){
border-top: none;
}
.louti li.active{
background: burlywood;
color: white;
}
接下俩就是JS了,
//内容一屏一屏的滚动
document.addEventListener("DOMContentLoaded", function() {
var body = document.body;
var html = document.documentElement;
var itv, height = document.body.offsetHeight;
var page = scrollTop() / height | 0;
addEventListener("resize", onresize, false);
onresize(); //鼠标滚轮事件
document.body.addEventListener("onwheel" in document ? "wheel" : "mousewheel", function(e) {
clearTimeout(itv);
itv = setTimeout(function() {
//判断滚轮滚的方向
var delta = e.wheelDelta / 120 || -e.deltaY / 3;
page -= delta;
var max = (document.body.scrollHeight / height | 0) - 1;
if(page < 0) {
return page = 0;
}
if(page > max) {
return page = max;
}
move();
}, 100);
e.preventDefault();
});
//当窗体发生变化时还是保证每次滚动滚一屏
function onresize() {
height = body.offsetHeight;
move();
}; function move() {
var value = height * page;
var diff = scrollTop() - value;
(function callee() {
diff = diff / 1.2 | 0;
scrollTop(value + diff);
if(diff) {
itv = setTimeout(callee, 16);
}
})();
}; function scrollTop(v) {
if(v == null) {
return Math.max(body.scrollTop, html.scrollTop);
} else {
body.scrollTop = html.scrollTop = v;
}
}
}) //点击楼层按钮跳到相应的楼层
var isMove=false;
//点击右侧导航条
$(".louti li").on("click",function(){
isMove=true;
//按钮变化
$(this).removeClass().addClass("active").siblings("li").removeClass("active");
//楼梯移动
var index=$(this).index();
var _topp=$(".staircase").eq(index).offset().top;
$("html,body").stop().animate({scrollTop:_topp},200,function(){
isMove=false;
})
})
//楼梯滚动导航条相对移动
$(window).scroll(function(){
//判断是否在滚动,如果没有,则支执行这里的代码
if(!isMove){
//获取滚动距离
var _scrollTop=$(document).scrollTop();
//遍历所有楼梯
$(".staircase").each(function(){
var _topp=$(this).offset().top; //判断滚动距离是否大于楼梯的top值
if(_scrollTop>=_topp){
var index=$(this).index();
$(".louti li").eq(index).removeClass().addClass("active")
.siblings("li").removeClass("active"); }
})
}
})
js控制页面每次滚动一屏,和楼梯效果的更多相关文章
- js控制页面的全屏展示和退出全屏显示
<!DOCTYPE html> <html> <meta http-equiv="Content-Type" content="text/h ...
- h5之scrollIntoView控制页面元素滚动
如果滚动页面也是DOM没有解决的一个问题.为了解决这个问题,浏览器实现了一下方法,以方便开发人员如何更好的控制页面的滚动.在各种专有方法中,HTML5选择了scrollIntoView()作为标准方法 ...
- js 控制页面跳转的5种方法
js 控制页面跳转的5种方法 编程式导航: 点击跳转路由,称编程式导航,用js编写代码跳转. History是bom中的 History.back是回退一页 Histiory.go(1)前进一页 Hi ...
- Jsp页面跳转和js控制页面跳转的几种方法
Jsp 页面跳转的几种方法 1. RequestDispatcher.forward() 在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servle ...
- 利用来JS控制页面控件显示和隐藏有两种方法
利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一: 1 2 document.getEle ...
- js控制页面显示和表单提交
早期的web页面在显示方面一般在后台进行控制,虽然对后台开发来讲是比较容易做到的,但是涉及到一个问题,那就是数据库压力. 因为要控制显示,所以会比较频繁的从数据库中来回调用. 现在的js功能越来越强, ...
- JS控制页面内容
JS操作页面内容 innerText:普通标签内容(自身文本与所有子标签文本)innerHTML:包含标签在内的内容(自身文本及子标签的所有)value:表单标签的内容outerHTML:包含自身标签 ...
- js控制页面显示
两个菜单切换显示页面内容: js控制代码, /** JS初始化 **/ $(document).ready(function() { $('#email_btn').click(function(){ ...
- js控制页面跳转,清缓存,强制刷新页面
单看标题,必定满脸蒙13. 其实,想表达的仅仅是,在js中通过window.location.href控制页面跳转时,有时会跳转至缓存页面,并没有真正去请求要跳转的地址,导致页面数据未能及时加载刷新. ...
随机推荐
- windows qt 使用openssl API
1.下载安装openssl http://dl.pconline.com.cn/download/355862-1.html 版本: OpenSSL(Win32) 1.0.1g 2.配置QT项目文件, ...
- 小记-----如何把本地jar包加载到maven库中
1.从maven中央库下载下jar包
- js知识点——2之navigator
navigator(领航者) 1.appCodeName(返回浏览器的代码名) var x= navigator; document.write("CodeName:"+x.app ...
- zabbix 监控redis python3脚本
一:安装redis-python模块 wge thttps://pypi.python.org/packages/source/r/redis/redis-2.9.1.tar.gz tar xf r ...
- py之包和日志
第一章 包 只要文件夹下含有__init__.py文件就是一个包 回想一下,之前我们没有学习模块的时候将一个整体的功能写入到文件中,为了能够充分的将某个功能进行重用 我们使用了模块,但是慢慢的模块就会 ...
- php文件上传错误信息说明对照表
php文件上传错误信息说明对照表: UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功UPLOAD_ERR_INI_SIZE:其值为1,上传的文件超过了php.ini中upload_ma ...
- 简述在Ubuntu终端打开文件的几种不同方法与区别
一· 在Ubuntu下,通常用命令行打开文本文件,比如用命令gedit.more.cat.vim.less. gedit:在文本软件下打开文件,可直接修改. more ,cat 和 less :类似, ...
- npm学习(七)之如何发布包、更新发布包、删除发布包
前言 我们经常使用npm来下载别人的模块或者说包,那么我们如何将自己写的模块上传到npm呢? 了解npm政策 在开始之前,最好回顾一下npm的政策,以防您对站点礼仪.命名.许可或其他指导原则有疑问. ...
- 剑指offer 剪绳子
题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能 ...
- ES6拷贝方法
ES6 中对象拷贝方法: 方法一: Object.assign() // 对象浅拷贝, 复制所有可枚举属性 const obj1 = {a: 1}; const obj2 = {b: 2}; // c ...