js仿淘宝侧边栏滚动条

Posted 做个机灵鬼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js仿淘宝侧边栏滚动条相关的知识,希望对你有一定的参考价值。

利用缓动动画函数实现

<body>
     <div id="header"></div>
     <div id="banner"></div>
     <div id="navBox">
         <span id="goBack">返回顶部</span>
     </div>
    
     <div id="main"></div>
     <script>
        //获取元素
         var navBox = document.querySelector('#navBox');
       
        var banner = document.querySelector('#banner');
        var main = document.querySelector('#main');
        var goBack = document.querySelector('#goBack');
        var bannerTop = banner.offsetTop;
        //获取侧边栏到页面最顶部的距离
        var navTop = navBox.offsetTop;
        //侧边栏停止后需要给它一个距离,否侧会出现回弹的效果
        var stopTop  = navTop - bannerTop;
        //获取main模块到页面顶部的距离
        var mainTop = main.offsetTop;
        //页面滚动事件
        document.addEventListener('scroll',function()
              //window.pageYOffset浏览器页面在Y轴上卷去的距离
              if(window.pageYOffset >= bannerTop) 
                  navBox.style.position = 'fixed';
                  navBox.style.top = stopTop + 'px';
               else 
                  navBox.style.position = 'absolute';
                  //绝对定位,并等于它一开始距离页面顶部的距离
                  navBox.style.top = navTop + 'px';
               
              //返回顶部事件 
              if(window.pageYOffset >= mainTop)
                    goBack.style.display = 'block';
               else 
                  goBack.style.display = 'none';
              

        )
        //给goBack返回顶部注册一个点击事件
        goBack.addEventListener('click',function()
           antimer(window,0);
        )
         //给动画函数增加一个回调函数
         function antimer(obj,distance,callback) 
            //避免多个元素拥有定时器时引起歧义 节省内存空间 var timer改成obj的一个属性
            //在每次执行定时器函数的时,清除上一个定时器
            clearInterval(obj.timer);
            obj.timer = setInterval(function()
            //设置缓动动画 公式:目标距离 - 现在的距离 / 10;
            //给步长取整 当step大于0的时候向上取整,负数的时候向下取整
            var step = (distance - window.pageYOffset) / 10;
            step = step > 0 ? Math.ceil(step) : Math.floor(step);
            if(window.pageYOffset == distance)
                clearInterval(obj.timer);
                //函数执行完的标记,再判断是否有回调函数
                if(callback) 
                    callback();
                
            
            // obj.style.left = obj.offsetLeft + step +'px';
            window.scroll(0,window.pageYOffset + step);
        ,15);
    
     </script>
</body>

以上是关于js仿淘宝侧边栏滚动条的主要内容,如果未能解决你的问题,请参考以下文章

仿淘宝固定侧边栏

Web API (scroll系列)(仿淘宝侧边栏效果实现)(mouseenter与mouseover的区别)(动画的原理)(缓动动画)

模仿淘宝侧边栏的滚动条

jQuery实际案例⑤——仿京东侧边栏(楼层)

侧边导航栏滚动条---CSS overflow实现

js之选项卡效果(淘宝侧边栏)