原生js实现楼层联动(只适用W3C标准)

1、复制并运行代码,即可显示效果

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
	*{
		margin: 0;
		padding: 0;
		font-size:12px;
	}
	ul{
		list-style:none;
	}
	.floorNav{
		width:30px;
		height:auto;
		border:1px solid #ccc;
		position:fixed;
		top:100px;
		left:30px;
        z-index:2;
	}
	.floorNav li{
		width:30px;
		height:30px;
		line-height:30px;
		text-align:center;
		position:relative;
		border-bottom:1px solid #ccc;
	}
	.floorNav li.hover span{
		display:block;
		background: #f30;
		color:#fff;
	}
	.last{
		border:none;
		background: #f30;
		color:#fff;
	}
	.floorNav li span{
		width:30px;
		height:30px;
		display:none;
		position:absolute;
		top:0;left:0;
		background: #f30;
		color:#fff;
	}
	.floorNav li span.active{
		display:block;
		background: #fff;
		color:#f00;
	}
	.floorNav li.hover span.active{
		background: #f30;
		color:#fff;
	}
	#header,#footer{
		width:800px;
		height:1000px;
		background: #ff7;
        margin: 0 auto;
	}
	#main{
		width:800px;
		height:auto;
		margin:0 auto;
	}
	#main .floor{
		width:800px;
		height:600px;
		line-height:600px;
		text-align:center;
		font-size:50px;
	}
</style>
</head>
<body>
	<!-- 楼层导航 -->
	<ul class="floorNav">
		<li>1F<span>服饰</span></li>
		<li>2F<span>手机</span></li>
		<li>3F<span>数码</span></li>
		<li>4F<span>家电</span></li>
		<li>5F<span>美妆</span></li>
		<li>6F<span>户外</span></li>
		<li class="last">Top</li>
	</ul>
    <!-- 楼层开始 -->
    <div id="header"></div>
    <div id="main">
        <div class="floor" style="background: #f34;">服饰</div>
        <div class="floor" style="background: #f0f;">手机</div>
        <div class="floor" style="background: #345;">数码</div>
        <div class="floor" style="background: #987;">家电</div>
        <div class="floor" style="background: #a6b;">美妆</div>
        <div class="floor" style="background: #0f9;">户外</div>
    </div>
    <div id="footer"></div>
	<script>
        var FloorNav = document.getElementsByClassName('floorNav')[0];
        var NavList  = FloorNav.querySelectorAll('li');
        var NavSpan = FloorNav.querySelectorAll('span');
        var Main = document.getElementById('main');
        var MainFloor = Main.querySelectorAll('div');
        console.log(FloorNav,NavList,Main,MainFloor,NavSpan)
        //记录当前的滚动高度
        var currentHeight = 0;
        // for循环使用es6
        for(let i=0;i<NavList.length-1;i++){
            //滑上左侧列表显示其内容
            NavList[i].addEventListener('mouseover',function () {
                NavList[i].classList.add('hover');
            })
            //离开左侧列表隐藏其内容
            NavList[i].addEventListener('mouseout',function () {
                NavList[i].classList.remove('hover');
            })
            // 点击左侧列表为该项添加class名
            NavList[i].addEventListener('click',function () {
                for(let j=0;j<NavSpan.length;j++){
                    NavSpan[j].classList.remove('active');
                }
                NavSpan[i].classList.add('active');
                var Height = MainFloor[i].offsetTop;
                var timer = setInterval(function() {
                    if(currentHeight < Height-20){
                        currentHeight += 30
                    } else if(currentHeight > Height+20){
                        currentHeight -= 30
                    }else{
                        currentHeight = Height
                        clearInterval(timer)
                    }
                    document.body.scrollTop = currentHeight;
                    document.documentElement.scrollTop = currentHeight;
                },1)
            })
        }
        window.addEventListener('scroll',function() {
            //获取当前滚动高度
            let Sheight = document.documentElement.scrollTop||document.body.scrollTop;
            for(let i=0;i<MainFloor.length;i++){
                let floorHeight = MainFloor[i].offsetTop;
                if(Sheight >= floorHeight && Sheight <= floorHeight+MainFloor[i].clientHeight/2){
                    for(let j=0;j<NavSpan.length;j++){
                        NavSpan[j].classList.remove('active');
                    }
                    NavSpan[i].classList.add('active');
                }
            }
        })
	</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值