• 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{
    				 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");
    							
    						}
    					})		
    				}
    			})
    

     

  • 相关阅读:
    [Bullet3]创建世界(场景)及常见函数
    [erlang]supervisor(监控树)的重启策略
    [game]十字链表的AOI算法实现
    [翻译][erlang]cowboy handler模块的使用
    数据挖掘算法系列目录
    Spark原理分析目录
    Spark实战系列目录
    2019年读书书单
    Hadoop源码解读系列目录
    分布式架构系列目录
  • 原文地址:https://www.cnblogs.com/eyed/p/9037204.html
Copyright © 2020-2023  润新知