站三界导航
首页 jQuery代码jQuery实现固定侧边栏

jQuery实现固定侧边栏

  • jQuery代码
  • 来源:站三界导航
  • 65阅读
  • 2022-09-28

效果:

代码:

<style>
        .w {
            width: 1000px;
            margin: 0 auto;
            margin-top: 10px;
        }
        
        .header {
            height: 200px;
            background-color: purple;
        }
        
        .banner {
            height: 300px;
            background-color: skyblue;
        }
        
        .main {
            height: 1000px;
            background-color: yellowgreen;
        }
        
        span {
            display: none;
            position: absolute;
            bottom: 0;
        }
        
        .slider-bar {
            position: absolute;
            top: 400px;
            left: 50%;
            margin-left: 500px;
            width: 30px;
            height: 100px;
            background-color: pink;
        }
    </style>
<body>
    <div class="slider-bar">
        <span class="goBack">返回顶部</span>
    </div>
    <div class="header w">头部区域</div>
    <div class="banner w">banner区域</div>
    <div class="main w">主体部分</div>
</body>

<script>
        // 1.获取元素
        var slider_bar = document.querySelector('.slider-bar');
        var banner = document.querySelector('.banner');
        //  banner.offsetTop被卷去头部的大小,一定要写在滚动的外面
        var bannerTop = banner.offsetTop;
        // 侧边栏固定定位之后变化的数值
        var sliderbarTop = slider_bar.offsetTop - bannerTop;
        // 获取main主体元素
        var main = document.querySelector('.main');
        var goBack = document.querySelector('.goBack');
        var mainTop = main.offsetTop;
        // 2.页面滚动事件scroll
        document.addEventListener('scroll', function() {
            console.log(window.pageYOffset);
            // 3.被卷去头部大于212时候,侧边栏改为固定定位
            if (window.pageYOffset >= bannerTop) {
                slider_bar.style.position = 'fixed';
                slider_bar.style.top = sliderbarTop + 'px';
            } else {
                slider_bar.style.position = 'absolute';
                slider_bar.style.top = '400px';

            }
            if (window.pageYOffset >= mainTop) {
                goBack.style.display = 'block';
            } else {
                goBack.style.display = 'none';

            }
        });
        // 点击返回顶部模块,让窗口滚动到页面最上方
        goBack.addEventListener('click', function() {
            // 里面的xy不加单位
            //窗口滚动,对象是window 
            animate(window, 0);
        });
        //动画函数
        function animate(obj, target, callback) {
            clearInterval(obj.timer);
            obj.timer = setInterval(function() {
                // 步长值写到定时器的里面
                // 把步长值改为整数,不要出现小数的问题
                var step = (target - window.pageYOffset) / 10;
                step = step > 0 ? Math.ceil(step) : Math.floor(step);
                if (window.pageYOffset == target) {
                    clearInterval(obj.timer);
                    // 回调函数位置:定时器结束的位置
                    if (callback) {
                        // 调用函数
                        callback();
                    }
                }
                // 把每次步长值给为逐渐变小的值(目标值-现在位置/10)
                // obj.style.left = window.pageYOffset + step + 'px';
                window.scroll(0, window.pageYOffset + step);
            }, 15);
        }
    </script>

本文结束
本文来自投稿,不代表站三界导航立场,如若转载,请注明出处:https://www.zhansanjie.com/article/details/10625.html

版权声明:

1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

2、本站仅提供信息发布平台,不承担相关法律责任。

3、若侵犯您的版权或隐私,请联系本站管理员删除。

4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。

分享
相关文章 更多 >>
随机网站 更多 >>
最新小程序 更多>>
最新公众号更多>>
站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。