我最近在做我们公司官网的改版,产品中心就是每次滚一屏的,我觉得加上楼梯更方便用户浏览,就随便写了个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控制页面每次滚动一屏,和楼梯效果的更多相关文章

  1. js控制页面的全屏展示和退出全屏显示

    <!DOCTYPE html> <html> <meta http-equiv="Content-Type" content="text/h ...

  2. h5之scrollIntoView控制页面元素滚动

    如果滚动页面也是DOM没有解决的一个问题.为了解决这个问题,浏览器实现了一下方法,以方便开发人员如何更好的控制页面的滚动.在各种专有方法中,HTML5选择了scrollIntoView()作为标准方法 ...

  3. js 控制页面跳转的5种方法

    js 控制页面跳转的5种方法 编程式导航: 点击跳转路由,称编程式导航,用js编写代码跳转. History是bom中的 History.back是回退一页 Histiory.go(1)前进一页 Hi ...

  4. Jsp页面跳转和js控制页面跳转的几种方法

    Jsp 页面跳转的几种方法 1. RequestDispatcher.forward() 在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servle ...

  5. 利用来JS控制页面控件显示和隐藏有两种方法

    利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一:  1 2 document.getEle ...

  6. js控制页面显示和表单提交

    早期的web页面在显示方面一般在后台进行控制,虽然对后台开发来讲是比较容易做到的,但是涉及到一个问题,那就是数据库压力. 因为要控制显示,所以会比较频繁的从数据库中来回调用. 现在的js功能越来越强, ...

  7. JS控制页面内容

    JS操作页面内容 innerText:普通标签内容(自身文本与所有子标签文本)innerHTML:包含标签在内的内容(自身文本及子标签的所有)value:表单标签的内容outerHTML:包含自身标签 ...

  8. js控制页面显示

    两个菜单切换显示页面内容: js控制代码, /** JS初始化 **/ $(document).ready(function() { $('#email_btn').click(function(){ ...

  9. js控制页面跳转,清缓存,强制刷新页面

    单看标题,必定满脸蒙13. 其实,想表达的仅仅是,在js中通过window.location.href控制页面跳转时,有时会跳转至缓存页面,并没有真正去请求要跳转的地址,导致页面数据未能及时加载刷新. ...

随机推荐

  1. spring boot-13.数据访问

    1.spring boot 的自动配置提供的方便快捷的数据库操作服务,只需要进行少量配置即可连接数据库.spring boot 在org.springframework.boot.autoconfig ...

  2. 赛道修建 NOIP 2018 d1t3

    题目大意 最小值最大 考虑二分 二分答案 判断能不能构成m条路径 很明显满足单调性 可行 思考如何判断 对于一个节点 它的儿子会传上来一些路径 这些路径只有三种处理方式 一.传上去(只能传一条) 二. ...

  3. Codeforces 1220B. Multiplication Table

    传送门 冷静分析容易发现,我们只要能确定一个数的值,所有值也就可以确定了 确定一个数的值很容易,$a_ia_j=M_{i,j},a_ia_k=M_{i,k},a_ja_k=M_{j,k}$ 然后就可以 ...

  4. echats 油表盘 鼠标拖动指针改变数值

    近期需要做一个鼠标拖动完成油表盘数值改变的功能,使用canvas感觉太麻烦,而且指针不太好监听和拖动,只能另谋出路,在网上参考了某位大神的操作,最终选择了echats来解决这个问题.废话不多说,直接上 ...

  5. 求x到y的最少计算次数 (BFS)

    时间限制:1秒 空间限制:262144K 给定两个-100到100的整数x和y,对x只能进行加1,减1,乘2操作,问最少对x进行几次操作能得到y? 例如:a=3,b=11: 可以通过3*2*2-1,3 ...

  6. eclipse控制台输出太多被顶掉问题

    控制台空白处右键 属性

  7. leetcode957. N 天后的牢房

    8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它就会被空置. ...

  8. Vue安装与简单使用

    Vue入门 使用Typora打开https://pan.baidu.com/s/1Mf3ZFSthdVUQevqWr777eA 提取码: hg9b vue中文官网教学 安装与使用,我也经常看这个 点击 ...

  9. Qualcomm_Mobile_OpenCL.pdf 翻译-5-性能优化的概述

    这章提供了一个OpenCL应用程序优化的总体概述.更多的细节将会在接下来的章节中找到. 注意:OpenCL程序的优化是具有挑战性的.相比初始的程序开发工作,经常需要做更多的工作. 5.1 性能移植性 ...

  10. mysql忘记密码如何重置密码,以及修改root密码的三种方法

    1.先将MySQL停止. 命令:systemctl  stop mysqld       #停掉MySQL 命令:systemctl status mysqld         #查看状态 2.然后跳 ...