javascript 楼层滚动效果实现

实现效果

 

HTML部分

<!--侧边选择栏-->
<ul class="sidebar">
    <li>楼层1</li>
    <li>楼层2</li>
    <li>楼层3</li>
    <li>楼层4</li>
</ul>

<!--楼层-->
<div class="floor">楼层一</div>
<div class="floor">楼层二</div>
<div class="floor">楼层三</div>
<div class="floor">楼层四</div>

CSS部分

/* body 高度,方便查看效果 */
body {
    height: 3000px;
}

/* 楼梯样式 */
.sidebar {
    /* 清除ul li前 自带小圆点 */
    list-style: none;
    /* 固定定位 */
    position: fixed;
    right: 20%;
    /* 设置top 位于浏览器上下 50%的位置 */
    top: 50%;
    transform: translateY(-50%);
}

/* 楼层样式 */
.floor {
    /* 设置楼层居中 */
    margin: 0 auto;
    /* 设置宽 500, 高 300 */
    width: 500px;
    height: 300px;
    /* 设置盒子边框 */
    border: 1px solid #000;
    /* 设置盒子距离下一个盒子的底部距离 */
    margin-bottom: 20px; 
}

JavaScript 部分

<script>
    //获取每一个楼层
    let floors = document.querySelectorAll('.floor');
    //获取楼梯
    let sidebarLis = document.querySelectorAll('.sidebar li');
    //遍历所有的楼梯
    sidebarLis.forEach(function(item,i) { //item 每一个楼梯的位置 i 每一个楼梯的索引
        //获取当前滚动条位置----- document.documentElement.scrollTop
        let current = document.documentElement.scrollTop
        //获取目标滚动距离----- 目标楼层的offsetTop
        let target = floors[i].offsetTop
        //定义一个空的timer
        let timer = null

        //开启定时器 每隔一段时间,滚筒条距离 + 10px
        timer =  setInterval(function() {
            //判断当前楼层距离是否大于滚动条距离 
            if(target > current){ 
                //滚动条增加距离
                current += 10 
                //将滚动条增加距离赋值给 当前滚动条
                document.documentElement.scrollTop = current 
            } else { 
                //滚动条减少距离
                current -= 10 
                //将滚动条减少距离赋值给 当前滚动条
                document.documentElement.scrollTop =  current 
            }
            //Math的绝对值 abs
            // 判断 当前楼层-当前滚动条 是否小于滚动距离
            if (Math.abs(target - current) <= 10) { 
                //清空定时器
                clearInterval(timer);
                //timer重新定义为空
                timer = null;
                //当前滚动条等于当前楼层
                document.documentElement.scrollTop = target 
            }
        },10)
    })
})
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值