电梯导航(锚点导航)

我的实现参考的文章:https://blog.csdn.net/qq_18144239/article/details/88889134?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link

 // 核心代码
    $(function(){
            //给一个颜色数组
            var colorArr = ['red','orange','yellow','green','blue','cyan','purple'];
            //便利给各个导航“span”元素,和各个对应的楼层栏目元素
            for(i=0;i<$('.side-nav span').length;i++){
                $('.side-nav span').eq(i).css({background:colorArr[i]});
                $('.floor').eq(i).css({background:colorArr[i]});
            }
            
            //安利一下知识点
            //arr.push()
            //push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。
            //offset()
            //JQ中获取匹配元素在当前视口的相对偏移。返回的对象包含两个整型属性:top 和 left。此方法只对可见元素有效。
    
            //获取各个楼层的距离浏览器上部偏移量,并放入数组
            var divTopArr = [];
            for(var i=0;i<$('.floor').length;i++){
                divTopArr.push($('.floor').eq(i).offset().top);
            }
             
            //给导航每个栏目按钮添加点击事件,点击导航上的每个栏目按钮,html(body)元素滑动到对应的栏目
            $('.side-nav span').click(function(){
                $('body,html').animate({scrollTop:divTopArr[$(this).index()]+'px'});
                $('.side-nav span').removeClass('active');
                $(this).addClass('active');
            })
            
            
            //添加页面滚轮滚动事件,
            $(window).scroll(function(){
                //获取获取页面当前已经滚动的scrollTop值 
                var scrollTop = $(window).scrollTop();
                //divTopArr 遍历每一个楼层或者每个楼层对应的按钮
                for(i=0;i<$('.side-nav span').length;i++){
                    //判断当前页面已经滚动的top值是否大于最后一个楼层top偏移量(最后一个要拿出来单算)
                    if(scrollTop < divTopArr[divTopArr.length-1]){
    //          给一个循环动态判断的条件,若当前scrollTop值大于数组的arr[i],且小于arr[i+1],就对应的栏目按钮添加样式
                        if(scrollTop >= divTopArr[i] && scrollTop < divTopArr[i+1]){
                            $('.side-nav span').removeClass('active');
                            $('.side-nav span').eq(i).addClass('active');
                        }
                    }else{
                    //若当前scrollTop值大于数组的arr[length-1](即数组的最后一个值,最后一个栏目的offsetTop),
                        $('.side-nav span').removeClass('active');
                        $('.side-nav span').eq(divTopArr.length-1).addClass('active');
                    }
                }
    
            })
            
        })
 

其他参考:

https://blog.csdn.net/weixin_43844392/article/details/89227244
https://blog.csdn.net/shentibeitaokong/article/details/80397826

https://www.jianshu.com/p/62318b3a5664
https://www.cnblogs.com/jinmmm/p/14297195.html

https://blog.csdn.net/liona_koukou/article/details/86087821

https://www.cnblogs.com/wangyihong/p/8056859.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery左侧悬浮导航预览代码 - 代码笔记</title>

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/LiftEffect.js"></script>

<style>
*{
	margin: 0;
	padding: 0;
	list-style-type:none;
}
body{
	height: 4000px;background:#eee;
}
.lift-nav{
	position: fixed;
	top: 100px;
	left: 30px;
	display: none;
}
.lift-nav li{
	width: 30px;
	height: 30px;
	text-align: center;
	line-height: 30px;
	color: #fff;
	padding: 10px 10px;
	margin-bottom: 10px;
	background: skyblue;
	cursor: pointer;
}

.lift-nav li.current{
	background: tomato;
}

.t1,.t2,.t3,.t4,.t5,.t6{
	width: 800px;
	height: 400px;
	text-align: center;
	line-height: 400px;
	background: skyblue;
	margin: 100px auto;
	font-size: 30px;
	color: #fff;
}
.t1{
	margin-top: 200px;
}
.t2{
	background: pink;
}
.t3{
	background: tomato;
}
.t4{
	background: grey;
}
.t5{
	background: yellow;
}
.t6{
	background: seagreen;
}
</style>

</head>
<body>

<div class="lift-nav">
	<ul class="lift">
		<li>1楼</li>
		<li>2楼</li>
		<li>3楼</li>
		<li>4楼</li>
		<li>5楼</li>
		<li>6楼</li>
	</ul>
</div>

<div class="lift-target">
	<div class="t1">这是1楼</div>
	<div class="t2">这是2楼</div>
	<div class="t3">这是3楼</div>
	<div class="t4">这是4楼</div>
	<div class="t5">这是5楼</div>
	<div class="t6">这是6楼</div>
</div>

<script type="text/javascript">
$(function(){
	LiftEffect({
		"control1": ".lift-nav", 						  //侧栏电梯的容器
		"control2": ".lift",                           //需要遍历的电梯的父元素
		"target": [".t1",".t2",".t3",".t4",".t5",".t6"], //监听的内容,注意一定要从小到大输入
		"current": "current" 						  //选中的样式
	});
})
</script>

<div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';">
<p>适用浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗.</p>
<p>来源:<a href="http://www.daimabiji.com/" target="_blank">代码笔记</a></p>
</div>
</body>
</html>
// LiftEffect({
// 	"control1": ".lift2", 						  //侧栏电梯的容器
// 	"control2": "#ccc",                           //需要遍历的电梯的父元素
// 	"target": [".dianti1",".dianti2",".dianti3"], //监听的内容,注意一定要从小到大输入
// 	"current": "xuanzhong" 						  //选中的样式
// });

function LiftEffect(json) {

  var array = []

  for (var i = 0; i < json.target.length; i++) {
    var t = $(json.target[i]).offset().top
    array.push(t)

  }

  function Selected(index) {
    $(json.control2).children().eq(index).addClass(json.current).siblings().removeClass(json.current)
  }


  $(window).on('scroll', Check)

  function Check() {

    var wst = $(window).scrollTop()


    if (wst >= $(json.target[0]).offset().top - 100) {
      $(json.control1).fadeIn(500)
    } else {
      $(json.control1).fadeOut(500)
    }

    var key = 0
    var flag = true
    for (var i = 0; i < array.length; i++) {
      key++
      if (flag) {

        if (wst >= array[array.length - key] - 300) {
          var index = array.length - key
          flag = false
        } else {
          flag = true
        }

      }
    }
    Selected(index)
  }

  $(json.control2).children().on('click', function () {

    $(window).off('scroll')
    var index = $(this).index()
    Selected(index)


    var flag = true
    for (var i = 0; i < array.length; i++) {

      if (flag) {

        if (index == i) {
          $('html,body').stop().animate({
            'scrollTop': array[i] - 50
          }, 500, function () {
            $(window).on('scroll', Check)
          })
          flag = false
        } else {
          flag = true
        }

      }
    }

  })


}





版权声明:本文为weixin_42995876原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。