资讯专栏INFORMATION COLUMN

浏览器的各种位置值获取

lvzishen / 1785人阅读

摘要:包括和属性是可以赋值的,并且会立即自动滚动网页到相应位置,因此可以利用它们改变网页元素的相对位置。另外,方法也有类似作用,可以使网页元素出现在浏览器窗口的左上角。网页元素的位置那就是使用方法。就是透过浏览器看内容的这个区域高度。

获取网页的大小

一张网页的全部面积,就是它的大小,通常是由内容和css样式表决定的。
浏览器窗口的大小,是在浏览器中看到的那部分网页面积。又叫做viewport(视口)。
如果网页的内容能够在浏览器窗口中全部显示(也就是不出现滚动条),那么网页的大小和浏览器窗口的大小是相等的。如果不能全部显示,则滚动浏览器窗口,可以显示出网页的各个部分。

浏览器窗口可视区大小,浏览器窗口尺寸 (不含工具栏和滚动条,只读模式,不能赋值)

    function getViewport(){
    if (document.compatMode == "BackCompat"){//(兼容quirks模式)
        //document.compatMode用来判断当前浏览器采用的渲染方式。
           //BackCompat:标准兼容模式关闭。CSS1Compat:标准兼容模式开启。
      return {
        width: document.body.clientWidth,
        height: document.body.clientHeight
      }
    } else {
      return {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight
      }
    }
  }
             浏览器窗口内部高 window.innerHeight
                      内部宽 window.innerWidth

    IE 5 6 7 8      //一般返回的是正确值,documentElement代表根元素,一般指html             
     html文档所在窗口的当前高度 document.documentElement.clientHeight
                          宽度 document.documentElement.clientWidth             
   或者Document对象的body属性对应HTML文档的Body标签
                    document.body.clientHeight
                    document.body.clientWidth 

网页大小

    function getPagearea(){
     if (document.compatMode == "BackCompat"){
       return {//判断网页内容刚好在浏览器中全部显示,取最大值
         width: Math.max(document.body.scrollWidth,
                  document.body.clientWidth),
         height: Math.max(document.body.scrollHeight,
                   document.body.clientHeight)
       }
     } else {
       return {
         width: Math.max(document.documentElement.scrollWidth,
                  document.documentElement.clientWidth),
         height: Math.max(document.documentElement.scrollHeight,
                   document.documentElement.clientHeight)
       }
     }       
    }

网页实际内容的宽度和高度(包含滚动条在内的该元素的视觉面积,滚动条滚过的所有长度和宽)

      scrollHeight             
      scrollWidth           
 网页内容宽高(包含滚动条等边线,会随着窗口的显示大小改变)             
          offsetHeight
          offsetHeight=clientHeight+滚动条+边框             
          offsetWidth
元素绝对位置

网页元素的绝对位置,指该元素的左上角相对于整张网页左上角的坐标。这个绝对位置要通过计算才能得到。
首先,每个元素都有offsetTop和offsetLeft属性,表示该元素的左上角与父容器(offsetParent对象)左上角的距离。所以,只需要将这两个值进行累加,就可以得到该元素的绝对坐标。

     function getElementLeft(element){
     var actualLeft = element.offsetLeft;
     var current = element.offsetParent;
     while (current !== null){
       actualLeft += current.offsetLeft;
       current = current.offsetParent;
     }
     return actualLeft;       
    }   
 
    function getElementTop(element){ //元素距顶部文档的距离
     var actualTop = element.offsetTop;
     var current = element.offsetParent;
     while (current !== null){
       actualTop += current.offsetTop;
       current = current.offsetParent;
     }
     return actualTop;       
    }
 
 
元素的相对位置

网页元素的相对位置,指该元素左上角相对于浏览器窗口左上角的坐标。
有了绝对位置以后,获得相对位置就很容易了,只要将绝对坐标减去页面的滚动条滚动的距离就可以了。滚动条滚动的垂直距离,是document对象的scrollTop属性;滚动条滚动的水平距离是document对象的scrollLeft属性。

     function getElementViewLeft(element){//offset包括border
     var actualLeft = element.offsetLeft;
     var current = element.offsetParent;
     while (current !== null){
       actualLeft += current.offsetLeft;
       current = current.offsetParent;
     }
     if (document.compatMode == "BackCompat"){
       var elementScrollLeft=document.body.scrollLeft;
     } else {
       var elementScrollLeft=document.documentElement.scrollLeft; 
     }
     return actualLeft-elementScrollLeft;   
    }   

    function getElementViewTop(element){
     var actualTop = element.offsetTop;
     var current = element.offsetParent;
     while (current !== null){
       actualTop += current. offsetTop;
       current = current.offsetParent;
     }
      if (document.compatMode == "BackCompat"){
       var elementScrollTop=document.body.scrollTop;
     } else {
       var elementScrollTop=document.documentElement.scrollTop; 
     }
     return actualTop-elementScrollTop;   
    }

scrollTop和scrollLeft属性是可以赋值的,并且会立即自动滚动网页到相应位置,因此可以利用它们改变网页元素的相对位置。另外,element.scrollIntoView()方法也有类似作用,可以使网页元素出现在浏览器窗口的左上角。

网页元素的位置

那就是使用getBoundingClientRect()方法。它返回一个对象,其中包含了left、right、top、bottom四个属性,分别对应了该元素的左上角和右下角相对于浏览器窗口(viewport)左上角的距离。
所以,网页元素的相对位置就是this=ele
  

 var X= this.getBoundingClientRect().left;   
 var Y=this.getBoundingClientRect().top;

再加上滚动距离,就可以得到绝对位置
  

 var X=this.getBoundingClientRect().left+document.documentElement.scrollLeft;
 var Y=this.getBoundingClientRect().top+document.documentElement.scrollTop;
滚动条的位置
    function getScrollTop() {
        if (window.pageYOffset) {
            scrollPos = window.pageYOffset;//
        }
        else if (document.compatMode && document.compatMode != "BackCompat") {
            scrollPos = document.documentElement.scrollTop;
        }
        else if (document.body) {
            scrollPos = document.body.scrollTop;
        }
        return scrollPos;
    }
滚动距离和偏移量
    scrollLeft 设置或者取位于给定对象左边界与窗口中目前可见内容的最左端之间的距离
    scrollTop 设置或取位于对象最顶端与窗口中可见内容的最顶端之间的距离
    offsetLeft 获取指定对象位于版面或由offsetParent属性指定的父坐标的计算左侧位置
    offsetTop 获得指定对象相对于版面或由offsetParent属性指定的父坐标的计算顶端位置    

    offsetParent指的是布局中设置position属性 Relative Absolute Fixed的父容器,
                从最近的父节点开始,一层层向上找,直到html的body
                

屏幕的宽高

 1. 整个屏幕的宽高: screen对象: 封装当前屏幕的信息
      完整屏幕宽高: screen.width/height
      去掉任务栏后,可用的宽高: 
      screen.availWidth/availHeight
              : 如何判断用户现在使用设备的种类: 
       1. screen.width/height
       
2. 获得鼠标的坐标位置: 
      获得鼠标相对于屏幕的位置: e.screenX/screenY

图片描述
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth 

ele.scrollHeight: 获取对象的滚动高度。 
ele.scrollWidth:获取对象的滚动宽度
ele.scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 
ele.scrollTop:设置或获取元素到文档顶部的距离,滚动条拉动的距离 

//可用style.width,height,left,top来设置
offsetWidth:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度 
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置 

event.clientX 相对文档的水平座标 
event.clientY 相对文档的垂直座标 
event.offsetX 相对容器的水平坐标 
event.offsetY 相对容器的垂直坐标 

document.documentElement.scrollTop 垂直方向滚动的值 
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量
这里是JavaScript中建造迁移转变代码的常用属性
页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth   (包含边线的宽);
网页可见区域高: document.body.offsetHeight (包含边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文项目组上: window.screenTop;
网页正文项目组左: window.screenLeft;
屏幕辨别率的高: window.screen.height;
屏幕辨别率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;

2、clientHeight
都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个对象条以下到状况栏以上的这个区域,与页面内容无关。

clientHeight 就是透过浏览器看内容的这个区域高度。
offsetHeightscrollHeight 都是网页内容高度,只不过当网页内容高度< clientHeight 时,scrollHeight = clientHeight,而 offsetHeight 可以< clientHeight

offsetHeight = 可视区域 clientHeight + 滚动条 + 边框。scrollHeight 则是网页内容实际高度。

3、scrollLeft
scrollTop 是“卷”起来的高度值,示例:

 

若是为 p 设置了scrollTop,这些内容可能不会完全显示。

因为为外层元素 p 设置了 scrollTop,所以内层元素会向上卷。

我们已经知道 offsetHeight 是自身元素的宽度。
scrollHeight 是内部元素的绝对宽度,包含内部元素的隐蔽的项目组。
上述中 pscrollHeight 为 300(内部元素撑起来的高度),而 poffsetHeight 为 100(自身的高度)。

1.offsetTop :
当前对象到其上级层顶部的间隔.
不可对其进行赋值.设置对象到页面顶部的间隔请用style.top属性.
2.offsetLeft :
当前对象到其上级层左边的间隔.
不可对其进行赋值.设置对象到页面左部的间隔请用style.left属性.
3.offsetWidth :
当前对象的宽度.
style.width属性的差别在于:如对象的宽度设定值为百分比宽度,则无论页面变大还是变小,style.width都返回此百分比,而offsetWidth则返回在不合页面中对象的宽度值而不是百分比值
4.offsetHeight :
style.height属性的差别在于:如对象的宽度设定值为百分比高度,则无论页面变大还是变小,style.height都返回此百分比,而offsetHeight则返回在不合页面中对象的高度值而不是百分比值
5.offsetParent   :
当前对象的上级层对象.
重视.若是对象是包含在一个DIV中时,此DIV不会被当做是此对象的上级层,(即对象的上级层会跳过DIV对象)上级层是Table时则不会有题目.
哄骗这个属性,可以获得当前对象在不合大小的页面中的绝对地位.
6.scrollLeft :
对象的最左边到对象在当前窗口显示的局限内的左边的间隔.
便是在呈现了横向滚动条的景象下,滚动条拉动的间隔.
7.scrollTop
对象的最顶部到对象在当前窗口显示的局限内的顶边的间隔.
便是在呈现了纵向滚动条的景象下,滚动条拉动的间隔.

 一、jQuery获取的相关方法
jquery 获取滚动条高度

获取浏览器显示区域的高度 :

$(window).height(); 

获取浏览器显示区域的宽度 :

$(window).width(); 

获取页面的文档高度 :
$(document).height();
获取页面的文档宽度 :$(document).width();

获取滚动条到顶部的垂直高度 :

$(document).scrollTop(); 

获取滚动条到左边的垂直宽度 :

$(document).scrollLeft();

计算元素位置和偏移量:

$(id).offset();

offset方法是一个很有用的方法,它返回包装集中第一个元素的偏移信息。默认情况下是相对body的偏移信息。结果包含 topleft两个属性。

offset(options, results)

options.relativeTo指定相对计算偏移位置的祖先元素。这个元素应该是relativeabsolute定位。省略则相对body

options.scroll是否把滚动条计算在内,默认TRUE
options.padding  是否把padding计算在内,默认false
options.margin是否把margin计算在内,默认true

options.border是否把边框计算在内,默认true

VUE一个滚动切换监听的实例
    
    
    
    
    

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87232.html

相关文章

  • HTML元素和事件对象中各种宽高和位置

    摘要:元素和事件对象中的各种宽高和位置标签经常被一堆的弄混,统一整理一下。元素中的宽高和位置属性表示元素的内部宽度,以像素计。表示元素实际占用的高度,包括其边框,内边距和元素内容。 HTML元素和事件对象中的各种宽高和位置 标签: js [TOC] 经常被一堆的xxxWidth,xxxLeft弄混,统一整理一下。 1. HTML元素中的宽高和位置属性 clientWidth 表示元素的内...

    gggggggbong 评论0 收藏0
  • JavaScript中各种宽高以及位置总结

    摘要:和这一对属性是用来读取元素的的宽度和高度的。第二部分对象在中,对于元素的运动的操作通常都会涉及到对象,而对象也存在很多位置属性,且由于浏览器兼容性问题会导致这些属性间相互混淆,这里一一讲解。文章转自中的各种宽高以及位置总结 在javascript中操作dom节点让其运动的时候,常常会涉及到各种宽高以及位置坐标等概念,如果不能很好地理解这些属性所代表的意义,就不能理解js的运动原理,同时...

    microelec 评论0 收藏0
  • 基于 jQuery 页脚实现

    摘要:目标实现页面页脚效果,即页脚部分在页面内容较少没有占满全部屏幕的时候可以处于页面最底部,当页面内容较多的时候则处于正常布局位置。此时我们可以添加事件,使得页脚元素能够在浏览器尺寸发生变化时一直处于正确的位置。 目标:实现页面页脚效果,即页脚部分在页面内容较少(没有占满全部屏幕)的时候可以处于页面最底部,当页面内容较多的时候则处于正常布局位置。 1. 思路 1. 首先我们得到页脚元素 ...

    AlphaGooo 评论0 收藏0
  • Javascript零碎之各种宽高属性及应用

    摘要:一挂在上的上最常用的只有其中,永远都是窗口的大小,跟随窗口变化而变化。这个是距该元素最近的不为的祖先元素,如果没有则指向元素。 在Javascript的开发过程中,我们总会看到类似如下的边界条件判断(懒加载): const scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.b...

    DevYK 评论0 收藏0

发表评论

0条评论

lvzishen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<