• 仿淘宝固定侧边栏


    关于scroll

    使用scroll可以动态得到元素的大小、滚动距离等。

    element.scrollTop——返回被卷去的上侧距离,返回数值不带单位;

    element.scrollLeft——返回卷去的左侧距离,返回数值不带单位;

    element.scrollWidth——返回自身实际宽度,不含边框,不带单位;

    element.scrollHeight——返回自身实际高度,不含边框,不带单位。

    案例分析:

    1.原先侧边栏是绝对定位;

    2.当页面滚动到一定位置,侧边栏改为固定定位;

    3.页面继续滚动,会让返回顶部显示出来。

    4.需要用到页面滚动事件scroll,因为是页面滚动,所以事件源是document;

    5.滚动到某个位置,就是判断页面被卷去的上部值;

    6.页面被卷去的头部可以通过window.pageYOffset获得,如果被卷去的是左侧用window.pageXOffset;

    7.注意,元素被卷去的头部是element.scrollTop

    效果:

     

    代码:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6         <style>
     7             *{
     8                 margin: 0;
     9                 padding: 0;
    10             }
    11             .slider-bar{
    12                 position: absolute;
    13                 left: 50%;
    14                 top: 300px;
    15                 margin-left: 250px;
    16                 width: 50px;
    17                 height: 130px;
    18                 background-color: rgb(203, 252, 184,0.4);
    19             }
    20             .w
    21             {
    22                 width: 500px;
    23                 margin: 10px auto;
    24             }
    25             .header{
    26                 height: 100px;
    27                 background-color: rgb(147, 222, 252, 0.2);
    28             }
    29             .banner{
    30                 height: 400px;
    31                 background-color: rgba(253, 234, 147, 0.2);
    32             }
    33             .main{
    34                 height: 1000px;
    35                 background-color: rgba(248, 25, 237, 0.1);
    36             }
    37             span{
    38                 display: none;
    39                 font-size: 20px;
    40                 position: absolute;
    41                 bottom: 0;
    42             }
    43         </style>
    44     </head>
    45     <body>
    46         <div class="slider-bar">
    47             <span class="goBack">返回顶部</span>
    48         </div>
    49         <div class="header w">头部区域</div>
    50         <div class="banner w">banner区域</div>
    51         <div class="main w">主体部分</div>
    52         <script>
    53             // 1.获取元素
    54             var sliderbar = document.querySelector('.slider-bar');
    55             var banner = document.querySelector('.banner');
    56             var bannerTop = banner.offsetTop;       //写在外面 因为滚动的时候banner.offsetTop会改变
    57             var sliderTop = sliderbar.offsetTop - bannerTop;    //当我们侧边栏固定定位之后slider的top值应该变化的数值
    58 
    59             var main = document.querySelector('.main');
    60             var goBack = document.querySelector('.goBack');
    61             var mainTop = main.offsetTop;
    62             // 2.页面滚动事件 scroll
    63             document.addEventListener('scroll',function(){
    64                 // 3.当滚动到banner位置 此时侧边栏改为固定定位
    65                 if(window.pageYOffset >= bannerTop){
    66                     sliderbar.style.position = 'fixed';
    67                     sliderbar.style.top = sliderTop + 'px';
    68                 }else{
    69                     sliderbar.style.position = 'absolute';
    70                     sliderbar.style.top = '300px';
    71                 }
    72                 //4.当滚动到main位置  显示“返回顶部”
    73                 if(window.pageYOffset >= mainTop){
    74                     goBack.style.display = 'block';
    75                 }else{
    76                     goBack.style.display = 'none';
    77                 }
    78             })
    79         </script>
    80     </body>
    81 </html>

    注意:

    需要注意的是,页面被卷去的头部,有兼容性问题,因此被卷去的头部通常有如下几种写法:

    1.声明了DTD,使用document.documentElement.scrollTop;

    2.未声明DTD,使用document.body.scrollTop;

    3.新方法window.pageYOffset和window.pageXOffset,IE9开始支持。

    1             function getScroll(){
    2                 return{
    3                     left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,
    4                     top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
    5                 };
    6             }
    7             // 使用的时候 getScroll().left
  • 相关阅读:
    mysql 触发器 插入
    【经验】STL的list vector在iterator迭代器的循环中 使用erase 造成的BUG
    C/C++ 关于 for循环 的第二个表达式右侧非常量的时候
    MySQL C API的一个让我头疼的问题,获得一行记录中包括NULL
    vim粘贴代码的时候,恶心的缩进.
    [转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】
    [转]对于孩子:旅行的意义何在?
    libc中的标准函数 localtime和localtime_r 的用法
    【腾讯面试题目】非循环方式 计算一个32位整数中被置1的位数
    C++对带有分隔符的字符串 分割为数字的通用解决方案
  • 原文地址:https://www.cnblogs.com/cy1227/p/13046514.html
Copyright © 2020-2023  润新知