• JS clientHeight,scrollHeight,offsetHeight,scrollTop,offsetTop概念


      JS滚动页面到某一位置时触发指定事件能够增强用户体验或是提高性能,其中使用最多的场景是加载更多,当鼠标滚动至页面下方时,自动加载下一页的内容。另一个常用的场景是当用户滚动至页面某一地方时,页面会给出提示或是将某些重要信息或按钮显示出来。实现这些效果的关键是要区分clientHeight、scrollHeight、offsetHeight等属性的区别。刚好最近项目中有用到过这些概念,今天就抽空整理下关于这几个属性的区别。

    1.概念

    clientHeight/clientWidth

    指元素可见区域的高度,容器的高度,不包括border和滚动条的高度。clientHeight与height值差不多,如果没有边框和滚动条的话,两者值相等,都是指容器的高度。火狐与IE下的值是一样的。

    //获得元素的可见区域高度 不传参数表示获取浏览器窗口的可视高度
    getClientHeight:function(_elem){
        if(!!_elem){
            return _elem.clientHeight;
        }else{
            return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
        }
    }
                

    offsetHeight/offsetWidth

    指元素容器的高度,加上边框和滚动条的高度,如果有设置boder和滚动条的话。

    getOffsetHeight:function(_elem){
        if(_elem){
            return _elem.offsetHeight;
        }else{
            return document.documentElement.offsetHeight || document.body.offsetHeight;
        }
    }

     

    scrollHeight/scrollWidth

    指元素内容的高度,而不是容器的高度。当元素内容的高度大于容器高度时,指元素内容的高度。

    getScrollHeight:function(_elem){
        if(_elem){
            return _elem.scrollHeight;
        }else{
            return document.documentElement.scrollHeight || document.body.scrollHeight;
        }
    }

    offsetTop/offsetLeft

    offsetTop:元素距离父元素顶端的距离。当前对象到其上级层顶部的间隔。
    offsetLeft:元素距离父元素左侧的距离。当前对象到其上级层左侧的间隔。

    scrollTop/scrollLeft

    scrollTop:元素中垂直滚动条滚动的距离。若元素中没有滚动条,则滚动距离为0。
    scrollLeft:元素中水平滚动条滚动的距离。若元素中没有滚动条,则滚动距离为0。

    2.案例 

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;">
    <title>JS滚动显示指定内容</title>
    <meta name="author" content="rainna" />
    <meta name="keywords" content="rainna's js lib" />
    <meta name="description" content="js" />
    <style>
    *{padding:0;margin:0;}
    
    .m-cnt{width:600px;margin:0 auto;line-height:2;}
    .m-cnt img{display:block;width:100%;}
    .m-cnt .info{background:rgba(97, 207, 247, 0.5);line-height:80px;}
    
    .pos{position:fixed;top:0;width:600px;}
    </style>
    </head>
    
    <body>
    <div class="m-cnt">
        <p>JS滚动页面到某一位置时触发指定事件能够增强用户体验或是提高性能,其中使用最多的场景是加载更多,当鼠标滚动至页面下方时,自动加载下一页的内容。另一个常用的场景是当用户滚动至页面某一地方时,页面会给出提示或是将某些重要信息或按钮显示出来。实现这些效果的关键是要区分clientHeight、scrollHeight、offsetHeight属性的区别。刚好最近项目中有用到过这些概念,今天就抽空整理下关于这几个属性的区别。</p>
        <p><strong>clientHeight/clientWidth</strong>:指元素可见区域的高度,容器的高度,不包括border和滚动条的高度。clientHeight与height值差不多,如果没有边框和滚动条的话,两者值相等,都是指容器的高度。火狐与IE下的值是一样的。</p>
        <p><strong>offsetHeight/offsetWidth</strong>:指元素容器的高度,加上边框和滚动条的高度,如果有设置boder和滚动条的话。</p>
        <p><strong>scrollHeight/scrollWidth</strong>:指元素内容的高度,而不是容器的高度。当元素内容的高度大于容器高度时,指元素内容的高度。</p>
        <p><strong>offsetTop/offsetLeft</strong>:offsetTop:元素距离父元素顶端的距离。当前对象到其上级层顶部的间隔。<br />offsetLeft:元素距离父元素左侧的距离。当前对象到其上级层左侧的间隔。</p>
        <p><strong>scrollTop/scrollLeft</strong>:scrollTop:元素中垂直滚动条滚动的距离。若元素中没有滚动条,则滚动距离为0。<br />scrollLeft:元素中水平滚动条滚动的距离。若元素中没有滚动条,则滚动距离为0。</p>
        <p class="info" id="info">特殊显示的内容特殊显示的内容特殊显示的内容特殊显示的内容</p>
        <p><img src="http://m2.img.srcdd.com/farm5/d/2014/1020/15/BC20A76398278107A49FFC5761F67587_B1280_1280_650_650.jpeg" /></p>
        <p><img src="http://m3.img.srcdd.com/farm4/d/2014/1020/15/556E38E2D06F144114550AF1C699E60D_B1280_1280_650_650.jpeg" /></p>
        <p><img src="http://m3.img.srcdd.com/farm4/d/2014/1020/15/390F43577E8994667B8CA1C178F90730_B1280_1280_650_650.jpeg" /></p>
    </div>
    <script>
    var scroll = {
        info:document.getElementById('info'),
        
        //获得元素的可视高度 容器高度,不包括滚动条和边框,不传参数表示浏览器窗口的可视高度
        getClientHeight:function(_elem){
            if(!!_elem){
                return _elem.clientHeight;
            }else{
                return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
            }
        },
        //获得元素的可视高度 容器高度,包括滚动条和边框,不传参数表示浏览器窗口的可视高度
        getOffsetHeight:function(_elem){
            if(_elem){
                return _elem.offsetHeight;
            }else{
                return document.documentElement.offsetHeight || document.body.offsetHeight;
            }
        },
        //获得元素的内容高度,包括显示的内容和隐藏的内容,不传参数表示页面整个文档的高度
        getScrollHeight:function(_elem){
            if(_elem){
                return _elem.scrollHeight;
            }else{
                return document.documentElement.scrollHeight || document.body.scrollHeight;
            }
        },
        
        //获得元素距离父元素的顶端的距离
        getOffsetTop:function(_elem){
            return _elem.offsetTop;
        },
        //获得元素中滚动条纵向滚动的距离,不传参数表示浏览器滚动条的纵向滚动距离
        getScrollTop:function(_elem){
            if(!!_elem){
                return _elem.scrollTop;
            }else{
                return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
            }
        },
        //初始化
        init:function(){
            var that = this;
            var _offsetTop = that.getOffsetTop(that.info);
            document.body.addEventListener("mousewheel", function(event) {
                that.info.className = that.getScrollTop() > _offsetTop ? 'info pos' : 'info';
            });
        }    
    }
    
    scroll.init();
    </script>
    </body>
    </html>
  • 相关阅读:
    openssl rsautl和openssl pkeyutl(文件的非对称加密)
    Card Stacking 队列模拟
    poj 2456 Aggressive cows 贪心+二分
    E. MaratonIME does (not do) PAs
    B. Yet Another Crosses Problem
    hdu 2578 Dating with girls(1) 满足条件x+y=k的x,y有几组
    poj 3262 Protecting the Flowers 贪心 牛吃花
    hdu 1789 Doing Homework again 贪心
    贪心总结
    E. Third-Party Software
  • 原文地址:https://www.cnblogs.com/zourong/p/4049012.html
Copyright © 2020-2023  润新知