实现滚动导航效果

由于近期有一个页面需要滚动加导航效果,以前在网上搜了一个鼠标滚动事件做了一个效果,但代码太冗余,不喜欢,所以抽时间研究了一下,使用jquery+滚动监听写了一个小demo,希望能帮助到有需要的朋友。

代码如下:

<style type="text/css">
            .cont li{
                display: inline-block;
                width: 100px;
                height: 100px;
                margin: 0 20px;
            }
            .cont ul{
                display: inline-block;
                width: 500px;
                text-align:left;
                border: 1px dotted #FFACAC;
            }
            .cont{
                text-align: center;
                width: 600px;
                margin: 0 auto;
                border:1px solid #00FFFF
            }
            .menu{
                position: fixed;
                right: 500px;
                top: 100px;
            }
            .menu ul{
                list-style: none;
            }
            .menu li{
                cursor: pointer;
            }
            .menu ul a{
                color: #00FFFF;
                text-decoration: none;
            }
            .menu ul li.act a{
                color: #FF6666;
            }
</style>
<div class="menu">
            <ul>
                <li class="act" data-url="item1"><a>第一个</a></li>
                <li data-url="item2"><a>第二个</a></li>
                <li data-url="item3"><a>第三个</a></li>
                <li data-url="item4"><a>第四个</a></li>
            </ul>
        </div>
        <div class="cont">
            <ul>
                <p id="item" data-val="0">第一个</p>
                <li><a href=""><img src=""/></a></li>
            </ul>
            <ul>
                <p id="item" data-val="1">第二个</p>
                <li><a href=""><img src="/></a></li>
            </ul>
            <ul>
                <p id="item" data-val="2">第三个</p>
                <li><a href=""><img src=""/></a></li>
                
            </ul>
            <ul>
                <p id="item" data-val="3">第四个</p>
                <li><a href=""><img src=""/></a></li>
            </ul>
</div>
<script type="text/javascript">
$(function(){
                var top1=$("#item1").offset().top;
                var top2=$("#item2").offset().top;
                var top3=$("#item3").offset().top;
                var top4=$("#item4").offset().top;
                
                $(".menu li").click(function(){
                    scrollH=$("#"+$(this).attr("data-url")).offset().top;
                    $("html,body").animate({ "scrollTop": scrollH }, 600);
                })
                
                $(window).scroll(function(){//鼠标滚动监听
                    var h=$(window).scrollTop();//获取滚动条高度
                    console.log(top4,h)
                    if(h>top4-100){
                        $(".menu li").removeClass();
                        $(".menu li")[3].setAttribute("class","act")
                    }else if(h>top3-100){
                        $(".menu li").removeClass();
                        $(".menu li")[2].setAttribute("class","act")
                    }else if(h>top2-100){
                        $(".menu li").removeClass();
                        $(".menu li")[1].setAttribute("class","act")
                    }else if(h>top1-100){
                        $(".menu li").removeClass();
                        $(".menu li")[0].setAttribute("class","act")
                    }
                })
                
            })
</script>

这个js内容比较多,然后我又优化了一下,当然,两个js都可以实现,但是使用上面一个js需要将html里面的p标签的class改为对应的item1...,还有,html里面的内容必须要把整个页面的内容都撑开,不然无法使用。

<script type="text/javascript">
$(function(){
                //获取页面上的item
                var items=$(".cont #item");
                console.log(items)
                $(".menu li").click(function(){
                    var i=$(this).index();
                    console.log(items[i])
                    scrollH=items[i].offsetTop;
                    $("html,body").animate({ "scrollTop": scrollH }, 600);
                })
                $(window).scroll(function(){//鼠标滚动监听
                    var h=$(window).scrollTop();//获取滚动条高度
                    items.each(function(){
                        if(h>$(this).offset().top-100){
                            var i=$(this).attr("data-val");
                            $(".menu li").removeClass();
                            $(".menu li")[i].setAttribute("class","act");
                        }
                    })
                })
            })
 </script>

配图:

 注:此demo实现思路是借鉴了慕课网https://www.imooc.com/video/782的案例。但是里面使用的是css的 expression表达式得到的,由于在网上了解到 expression具有危险性,所有并没有使用此方法。

猜你喜欢

转载自www.cnblogs.com/xiaojianwei/p/10255423.html