Js效果:楼层跳跃

个人博客新地址:→点我♪(^∀^●)ノ

实现思路

通过scroll的距离来判断当前的展示区域属于哪一个楼层

布局

Html

  <ul class="nav">
        <li>享受品质</li>
        <li>服饰美妆</li>
        <li>家电手机</li>
        <li>电脑数码</li>
        <li>3C运动</li>
    </ul>
    <ul class="content">
        <li>享受品质</li>
        <li>服饰美妆</li>
        <li>家电手机</li>
        <li>电脑数码</li>
        <li>3C运动</li>
    </ul>

CSS

<style>
*{margin:0;padding:0;}
li{
    list-style: none;
    color: #FFFFFF;
}
.nav{
    position: fixed;
    left: 15px;
    top: 80px;
}
.nav li{
    width: 70px;
    height: 40px;
    line-height: 40px;
    text-align: center;
    font-size: 14px;
    cursor: pointer;
    background: #666;
    color: #FFFFFF;
}
.nav .now{
    background: lightcoral;
}
html, body{
    height: 100%;
}
ul{
    height: 500%;
}
.content li{
    height: 20%;
    font: 100px "Microsoft YaHei";
    text-align: center;
}

</style>

JS实现

<script>
var navLiArr = $('ul')[0].children;
var contentLiArr = $('ul')[1].children;

//给每个不同楼层添加不同的颜色
var colorArr = ['lightgreen','lightseagreen','lightskyblue',
    'lightgray','lightyellow'];

for (var i=0; i<contentLiArr.length;i++){
    contentLiArr[i].style.background = colorArr[i];
}
// 点击转到对应的楼层
for (var i=0;i<navLiArr.length;i++){
  navLiArr[i].index=i;
    navLiArr[i].onclick=click;
}

function click () {
    //改变样式
    var parent=this.parentNode;
    parent.isclick=true;
    for(var j = 0; j <navLiArr .length; j++ ){
        navLiArr[j].className='';
    }
    this.className='now';
    var dis=this.index*document.body.offsetHeight*1;
    clearInterval(window.timer);
    window.timer=setInterval(function () {
        var pos=(dis-scroll().top)/10;
        pos=pos>0?Math.ceil(pos):Math.floor(pos);
        window.scrollTo(0,scroll().top+pos);
        if(dis==scroll().top){
            clearInterval(window.timer);
            parent.isclick=false;
        }
    })

}

window.onscroll=function (ev) {
// console.log(ev)
    if(!navLiArr[0].parentNode.isClick){
        //滚动到相应板块  改变样式
        //获取滚动距离 scroll()。top
        var dis=document.body.offsetHeight;
        var topDis=scroll().top;
        var t=topDis/dis;
        //t 与 navLiArr[i].index 比较
        t=Math.round(t);
        console.log(t);
        for(var k = 0; k <navLiArr .length; k++ ){
            navLiArr[k].className='';
        }
        navLiArr[t].className='now';
    }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值