zoukankan      html  css  js  c++  java
  • 元素scroll系列属性

    scroll翻译过来,就是滚动的,我们使用scroll系列的相关属性可以动态的得到该元素的大小、滚动距离等。

    scroll系列属性 作用
    element.scrollTop 返回被卷上去的上侧距离,返回数值不带单位
    element.scrollLeft 返回被卷上去的左侧距离,返回数值不带单位
    element.scrollWidth 返回自身实际的宽度,不含边框,返回数值不带单位
    element.scrollHeight 返回自身实际的高度,不含边框,返回数值不带单位

    案例:仿淘宝固定右侧侧边栏

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

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

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

    分析:

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

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

    3.页面被卷上去的头部:可以通过window.pageYOffset获得

    4.注意: 元素被卷上去的头部是element.scrollTop,如果是页面被卷去的头部,则是window.pageYOffset。

    5.其实这个值 可以通过盒子的 offsetTop可以得到,如果大于等于这个值,就可以让盒子固定定位了。

     1         //1. 获取元素
     2         var sliderbar = document.querySelector('.slider-bar');
     3         var banner = document.querySelector('.banner');
     4         // banner.offestTop 就是被卷去头部的大小 一定要写到滚动的外面
     5         var bannerTop = banner.offsetTop
     6             // 当我们侧边栏固定定位之后应该变化的数值
     7         var sliderbarTop = sliderbar.offsetTop - bannerTop;
     8         // 获取main 主体元素
     9         var main = document.querySelector('.main');
    10         var goBack = document.querySelector('.goBack');
    11         var mainTop = main.offsetTop;
    12         // 2. 页面滚动事件 scroll
    13         document.addEventListener('scroll', function() {
    14             // window.pageYOffset 页面被卷去的头部
    15             // console.log(window.pageYOffset);
    16             // 3 .当我们页面被卷去的头部大于等于了 172 此时 侧边栏就要改为固定定位
    17             if (window.pageYOffset >= bannerTop) {
    18                 sliderbar.style.position = 'fixed';
    19                 sliderbar.style.top = sliderbarTop + 'px';
    20             } else {
    21                 sliderbar.style.position = 'absolute';
    22                 sliderbar.style.top = '300px';
    23             }
    24             // 4. 当我们页面滚动到main盒子,就显示 goback模块
    25             if (window.pageYOffset >= mainTop) {
    26                 goBack.style.display = 'block';
    27             } else {
    28                 goBack.style.display = 'none';
    29             }
    30         })

    页面被卷上去的头部兼容性解决方案

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

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

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

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

    封装统一方法getScroll(),使用getScroll().left

    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  } 

     他们主要用法:

    1.offset系列,经常用于获得元素位置: offsetLeft offsetTop

    2.client经常用于获取元素大小clientWidth、 clientHeight

    3.scroll经常用于获取滚动距离scrollTop、scrollLeft

    4.注意页面滚动的距离通过window.pageXOffset获得

  • 相关阅读:
    [原译]Lambda高手之路第一部分
    阿里巴巴5月5日综合算法题详解
    [原译]Lambda高手之路第三部分
    [原译]多线程揭秘
    Leadtools控件变组件问题的解决方法
    写派生控件时不要随便override!
    关于foreach使用限制的一点误解
    WinForm中使用GDI+实现滚动动画
    注意:在SQL SERVER中使用NChar、NVarchar和NText
    局域网中禁止客户端用户直接访问服务器共享文件夹的简单解决方案
  • 原文地址:https://www.cnblogs.com/guwufeiyang/p/12996960.html
Copyright © 2011-2022 走看看