zoukankan      html  css  js  c++  java
  • jquery的height()和javascript的height总结,js获取屏幕高度

    jquery的height()和javascript的height总结,js获取屏幕高度
    在javascript和jquery中,都有对各种高度的写法,在这里,我们就着重讲一下窗口、文档等高度的理解。(宽度和高度差不多!)
    jquery的各种高度

    首先来说一说$(document)和$(window),如下:

    $(document).height();//整个网页的高度
    $(window).height();//浏览器可视窗口的高度
    $(window).scrollTop();//浏览器可视窗口顶端距离网页顶端的高度(垂直偏移)

    用一句话理解就是:当网页滚动条拉到最低端时,

    $(document).height() == $(window).height() + $(window).scrollTop()。

    注意,是拉到最低端!

    当网页高度不足浏览器窗口时$(document).height()返回的是$(window).height()

    假如您要获取整个网页的高度,不建议用$("html").height()、$("body").height()的高度,

    原因:

    $("body").height():body可能会有边框,获取的高度会比$(document).height()小; $("html").height():在不同的浏览器上获取的高度的意义会有差异,说白了就是浏览器不兼容。

    说道这里,提及边框和margin还有padding,我们自然想到了jquery的另外的两个高度,那就是innerHeight()和outerHeight()

    innerHeight()和outerHeight()不适用于window 和 document对象,对于window 和 document对象可以使用.height()代替。innerHeight()和outerHeight()主要用来获取标签的高度。
    innerHeight()

    enter image description here

    innerHeight:高度+补白

    outerHeight:高度+补白+边框,参数为true时:高度+补白+边框+边距

    innerHeight(value)

    这个“value”参数可以是一个字符串(数字加单位)或者是一个数字,如果这个“value”参数只提供一个数字,jQuery会自动加上像素单位(px)。如果只提供一个字符串,任何有效的CSS尺寸都可以为高度赋值(就像100px, 50%, 或者 auto)。注意在现代浏览器中,CSS高度属性不包含padding, border, 或者 margin, 除非box-sizingCSS属性被应用。
    jquery高度,放到浏览器中试一下

    alert($(window).height());                           //浏览器当前窗口可视区域高度
    alert($(document).height());                        //浏览器当前窗口文档的高度
    alert($(document.body).height());                //浏览器当前窗口文档body的高度
    alert($(document.body).outerHeight(true));  //浏览器当前窗口文档body的总高度 包括border padding margin
    alert($(window).width());                            //浏览器当前窗口可视区域宽度
    alert($(document).width());                        //浏览器当前窗口文档对象宽度
    alert($(document.body).width());                //浏览器当前窗口文档body的宽度
    alert($(document.body).outerWidth(true));  //浏览器当前窗口文档body的总宽度 包括border padding margin

    javascript的各种高度

    网页可见区域宽[仅针对body]: document.body.clientWidth
    网页可见区域高[仅针对body]: document.body.clientHeight
    网页可见区域宽[仅针对body]: document.body.offsetWidth (包括滚动条和边框,若滚动条和边框为0,则和clientWidth相等)
    网页可见区域高[仅针对body]: document.body.offsetHeight (包括滚动条和边框,若滚动条和边框为0,则和clientHeight相等)
    可视窗口宽度(包括滚动轴宽度):window.innerWidth; //IE9+、Chrome、Firefox、Opera 以及 Safari
    可视窗口高度,不包括浏览器顶部工具栏: window.innerHeight;//IE9+、Chrome、Firefox、Opera 以及 Safari
    网页正文全文宽(不包括滚动轴的宽度): document.body.scrollWidth
    网页正文全文高:document.body.scrollHeight
    //假如网页中没有滚动轴,document.body.scrollWidth和window.innerWidth相等,document.body.scrollHeight和window.innerHeight相等。
    网页被卷去的高: document.body.scrollTop
    网页被卷去的左: document.body.scrollLeft
    网页正文部分上: window.screenTop
    网页正文部分左: window.screenLeft
    屏幕分辨率的高(整个屏幕的高度): window.screen.height
    屏幕分辨率的宽(整个屏幕的宽度): window.screen.width
    屏幕可用工作区高度: window.screen.availHeight
    屏幕可用工作区宽度: window.screen.availWidth
    整个浏览器可用工作区高度: window.outerHeight
    整个浏览器可用工作区宽度: window.outerWidth

    结束语

    注意,在运用jquery的innerHeight()和outerHeight()的时候,可能会有浏览器的兼容问题,不同浏览器出现不同高度,总之,实践得真知,你可以测试一下,写几个小的demo,总结一下!

    http://www.haorooms.com/post/js_jquery_height

    js和jquery懒加载之可视区域加载
    在制作js可视区域加载之前,我们首先必须了解各种高度,我之前的一篇文章javascript的height总结,大家可以看一下,复习一下!

    了解了各种高度之后,我们开始我们的js代码吧!

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>haorooms前端博客-可视区域加载之 javascript</title>
        <style>
        img{100%;margin-bottom: 30px; min-height: 400px; background-color: #ddd;}

        </style>
    </head>
    <body>
        <img haoroomslazyload="Chrysanthemum.jpg" src="" >
        <img haoroomslazyload="Desert.jpg" src="" >
        <img haoroomslazyload="Hydrangeas.jpg" src="" >
        <img haoroomslazyload="Koala.jpg" src="" >
        <img haoroomslazyload="Lighthouse.jpg" src="" >
        <img haoroomslazyload="Penguins.jpg" src="" >
        <img haoroomslazyload="Tulips.jpg" src="" >

        <script>
        var imgNum=document.getElementsByTagName('img').length;
        var imgObj=document.getElementsByTagName("img");
        var l=0;

            window.onscroll=function(){
                    var seeHeight = document.documentElement.clientHeight;
                    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
                    for(var i=l;i<imgNum;i++){
                        if(imgObj[i].offsetTop < seeHeight + scrollTop){
                            console.log(imgObj[i].getAttribute("src"));
                            console.log(imgObj[i].src );
                            if(imgObj[i].getAttribute("src") == ""){
                                imgObj[i].src = imgObj[i].getAttribute("haoroomslazyload");
                            }
                        }
                        if(imgObj[i].offsetTop > seeHeight + scrollTop){
                            l=i;
                            break;
                        }
                    }
            }

    </script>

    大家注意看我的两个console输出,console.log(imgObj[i].src );获取的是整个浏览器地址!
    jquery懒加载之可视区域加载

    上面的js用jquery翻译版!

    var l=0
    //js方法翻译版
    $(window).bind("scroll", function(event){

                    for(var i=l;i<$("img").length;i++){
                        if($("img").eq(i).offset().top < parseInt($(window).height()) + parseInt($(window).scrollTop())){
                            if($("img").eq(i).attr("src") == ""){
                                var lazyloadsrc=$('img').eq(i).attr("haoroomslazyload");
                                $("img").eq(i).attr("src",lazyloadsrc);
                            }
                        }
                        if($("img").eq(i).offset().top  > parseInt($(window).height()) + parseInt($(window).scrollTop())){
                            l=i;
                            break;
                        }
                    }

     });

    另外一种方法,可以参考我之前写的一个延迟加载的插件:http://www.haorooms.com/post/touchweb_canvas_lazyload

    其中是这么写的。

    我把这个写法拎了出来,如下:

    $(window).bind("scroll", function(event){
    $("img").each(function(){
              //窗口的高度+看不见的顶部的高度=屏幕低部距离最顶部的高度  
                var thisButtomTop = parseInt($(window).height()) + parseInt($(window).scrollTop());  
                var thisTop = parseInt($(window).scrollTop()); //屏幕顶部距离最顶部的高度  
                    var PictureTop = parseInt($(this).offset().top);  
                     if (PictureTop >= thisTop && PictureTop <= thisButtomTop && $(this).attr("haoroomslazyload") != $(this).attr("src")) {
                       $(this).attr("src", $(this).attr("haoroomslazyload"));
                     }
    });
    })

    可视区域加载延伸

    例如一个动画效果,或者一个canvas图片,我想达到的效果是,初始进来不加载,当滚动到这个动画或者图表上面的时候,进行加载,那么我们就可以根据上面的代码进行如下改进:

    $(window).bind("scroll", function(event){

              //窗口的高度+看不见的顶部的高度=屏幕低部距离最顶部的高度  
                var thisButtomTop = parseInt($(window).height()) + parseInt($(window).scrollTop());  
                var thisTop = parseInt($(window).scrollTop()); //屏幕顶部距离最顶部的高度  
                    var PictureTop = parseInt($("你的要滚动加载的ID").offset().top);  
                     if (PictureTop >= thisTop && PictureTop <= thisButtomTop) {
                      //  $("#你的要滚动加载的ID").attr("src", $("#你的要滚动加载的ID").attr("haoroomslazyload"));

                       //此处可以执行你的加载函数,加载函数由原来的document.ready中,移到这里来!



                     }
    })

  • 相关阅读:
    python3调用js的库之execjs
    字体替换 re.sub
    asyncio和aiohttp
    微信公众号数据抓取
    celery
    Airtest 的连接安卓模拟器
    Scrapy同时启动多个爬虫
    随机IP代理插件Scrapy-Proxies
    Charles和mitmproxy代理设置
    win下删除EFI分区
  • 原文地址:https://www.cnblogs.com/andydao/p/6037946.html
Copyright © 2011-2022 走看看