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控制页面跳转时,有时会跳转至缓存页面,并没有真正去请求要跳转的地址,导致页面数据未能及时加载刷新. ...
随机推荐
- 第七周课程总结&实验报考(五)
第七周课程总结&实验报考(五) 实验四 类的继承 实验目的: 1.理解抽象类与接口的使用: 2.了解包的作用,掌握包的设计方法. 实验要求: 1.掌握使用抽象类的方法. 2.掌握使用系统接口的 ...
- 如何根据对象的属性,对集合(list / set)中的对象进行排序
一:针对list 通过java.util.Collections的sort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator<对象类>(){}方法,这 ...
- Java第二周总结报告
第二周的学习,开始正式实践进行Java的学习. 本周做了什么? 了解的Java的一些基本知识,如Java变量,数据类型和运算符等.Java变量对不同的数据类型最好采用不同的命名规则,合理的命名有利于提 ...
- priority_queue的常见用法
priority_queue的常见用法 priority_queue是什么? 优先队列 底层实现用堆来实现 每次队首的优先级最大 priority_queue的定义 引入头文件 # include & ...
- Android引用多媒体
res目录下,创建raw目录(Android会自动识别这个目录),如果自己创建的目录,可能无效底下的mp3格式,mp4格式的文件名必须小写. 引用方式: mediaPlayer = MediaPlay ...
- ImportError: Could not import PIL.Image.
pip install pillow
- 使用filebeat收集日志传输到redis的各种效果展示
0 环境 Linux主机,cengtos7系统 安装有openresty软件,用来访问生成日志信息 1.15.8版本 安装有filebeat软件,用来收集openresty的日志 7.3版本 安装有r ...
- 常见SMT极性元器件识别方法
极性元件在整个PCBA加工过程中需要特别注意,因为方向性的元件错误会导致批量性事故和整块PCBA板的失效,因此工程及生产人员了解SMT极性元件极为重要. 1.片式电阻(Resistor)无极性 2.电 ...
- 关于css中touch-action属性 在移动端开发中遇到的问题
初次接触第一次接触touch-action这个属性 是在之前一个网约车公众号项目中遇到的 当时采用的是vue做框架 cube-ui做组件库 当时在版本迭代的时候增加了余额支付的功能 需要一个密码键盘 ...
- window环境下,php+sphinx+coreseek实现简单的中文全文搜索
就以我个人理解来说,sphinx其实是介于客户端和mysql之间的一个索引表,把数据库的没一条记录假设为文档,那么这个索引表其实保存的就是这条记录的关键词及其对应的文档id 1.sphinx的安装 下 ...