• 获取页面大小和元素位置offset、client、scroll


    一、offset(偏移)

      JS:

            // 父元素中存在position时,获取该元素相对第一个具有定位的父元素的距离
            // 父元素中不存在position时,获取元素相对祖先元素html的距离
            // 获取的距离会自动取整(测试时谷歌三舍四入、火狐四舍五入)
            let offsetLeft = document.getElementById('s_box').offsetLeft
            let offsetTop = document.getElementById('s_box').offsetTop
            // 获取元素的大小(border内,含border、含滚动条)
            let offsetWidth = document.getElementById('s_box').offsetWidth
            let offsetHeight = document.getElementById('s_box').offsetHeight
            // 获取body宽高
            let bodyWidth = document.querySelector('body').offsetWidth
            let bodyHeight = document.querySelector('body').offsetHeight    

      JQ:

            // 始终获取的元素距离body的距离,保留小数
            $('#s_box').offset().top
            $('#s_box').offset().left

    二、client(当前)

      // 获取元素border宽度
      let clientLeft = document.getElementById('s_box').clientLeft
      let clientTop = document.getElementById('s_box').clientTop
      // 获取元素可视范围的宽高(border内,不含border、不含滚动条)
      let clientWidth = document.getElementById('s_box').clientWidth
      let clientHeight = document.getElementById('s_box').clientHeight
      // 获取可视区的高度
      document.documentElement.clientHeight

    三、scroll(滚动) 

            // 获取页面滚动距离
            // 没有DOCTYPE声明==>23467有效
            // 有DOCTYPE声明==>12345有效
            console.log(document.documentElement.scrollTop, '---->1')
            console.log(window.pageYOffset, '---->2')
            console.log($(window).scrollTop(), '---->3')
            console.log($(document).scrollTop(), '---->4')
            console.log($('html').scrollTop(), '---->5')
            console.log(document.body.scrollTop, '---->6')
            console.log($('html body').scrollTop(), '---->7')
            // js兼容写法
            let bodyScrollTop = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
            // 获取子元素在父元素内的滚动距离,即父容器滚动距离(这里的#box是父元素)
            $('#box').scroll(function () {
                console.log($('#box').scrollTop())
                console.log(document.getElementById('box').scrollTop)
            })
            //滚动位置可以重写,其他xxTop、xxLeft都是只读
            $('#box').scrollTop(100)
            //scrollHeight,个人理解是指元素滚动范围的高度
            //scrollHeight=父容器高度(不含border)+元素可滚动的最大距离(即scrollTop最大值)
            //scrollHeight=子元素高度(含border)+父容器的padding
            console.log(document.getElementById('box').scrollHeight)

       

    四、X、Y

            $('#box').click(function(e){
                // 鼠标点击位置相对父容器的坐标
                console.log(e.offsetX)
                console.log(e.offsetY)
                // 鼠标点击位置相对文档视口的坐标(不受滚动条影响)
                console.log(e.clientX)
                console.log(e.clientY)
                // 鼠标点击位置屏幕的坐标
                console.log(e.screenX)
                console.log(e.screenY)
                // 鼠标点击位置相对整个文档的坐标(随滚动条变化)
                console.log(e.pageX)
                console.log(e.pageY)
            })

      实用demo:通过外部点击操作,使盒子内对应元素滚动到盒子顶部

            $('.content_select').on('click', '.content_select_circular', function (e) {
                let num = $(this).index()
                let scrollTop = $('#box').scrollTop();//父容器滚动距离
                let dotop = $('#box>.subject').eq(num).offset().top;//滚动元素距离文档顶部距离
                let hei = $('#box').offset().top;//父容器距离文档顶部距离
                $('#box').animate({
                    scrollTop: scrollTop + dotop - hei
                }, 500);
            })
  • 相关阅读:
    设备arduino的编译目录
    c# await 关键字错误
    开篇 hello 内Cool超人
    在Windows Azure虚拟机上开发Windows 8 应用
    使用LVS实现负载平衡之Windows Server 2008配置
    IDC Digital Transition Annual Festival(2018.10.19)
    Dell Technology Summit(2018.10.17)
    Lean Data Innovation Sharing Salon(2018.09.15)
    Trusted Block Chain Summit(2018.10.09)
    Artificial Intelligence Computing Conference(2018.09.12)
  • 原文地址:https://www.cnblogs.com/jing-zhe/p/12642386.html
Copyright © 2020-2023  润新知