最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 获取页面元素位置

    正文概述 掘金(XXHolic)   2021-02-22   412

    引子

    最近在尝试一个东西的时候,再次碰到需要获取元素的位置,这次还是自己来整理一下。

    • Origin
    • My GitHub

    基本属性信息

    clientHeight/clientWidth

    var cHeight = element.clientHeight;
    var cWidth = element.clientWidth;
    
    • 只读属性,是元素内容内部高度/宽度,包含内边距(padding),不包括水平/垂直滚动条、边框(border)和外边距(margin)。
    • 此属性会将获取的值四舍五入取整数。

    获取页面元素位置

    innerHeight/innerWidth、outerHeight/outerWidth

    var iHeight = window.innerHeight;
    var iWidth = window.innerWidth;
    
    • 只读属性,浏览器窗口视口的高度。
    • 任何表现类似于窗口的任何窗口或对象(例如框架或选项卡)上都是可用的,如 window、frame、frameset 或 secondary window 。
    var oHeight = window.outerHeight;
    var oWidth = window.outerWidth;
    
    • 只读属性,整个浏览器窗口的高度,包括侧边栏、窗口镶边和窗口调正边框。

    获取页面元素位置

    offset 相关属性

    offset 一类的属性有:offsetTopoffsetLeftoffsetWidthoffsetHeight

    var oLeft = element.offsetLeft;
    var oTop = element.offsetTop;
    var oWidth = element.offsetWidth;
    var oHeight = element.offsetHeight;
    
    • 只读属性。
    • offsetTopoffsetLeft 相对于元素的 offsetParent 内边距边界的偏移像素值,offsetParent 是包含该元素最近的定位元素或者 table、td、th、body 元素。
    • offsetWidth/offsetHeight 包含元素的边框(border)、内边距(padding)、滚动条、以及 CSS 设置的宽度(width)/高度(height)的值。
    • 对于块级元素,以上属性描述相对于 offsetParent ;对于行内元素来说,以上属性描述相对于第一个边界框。

    获取页面元素位置

    scroll 相关属性

    scroll 一类属性有:scrollLeftscrollTop

    var sLeft = element.scrollLeft;
    var sTop = element.scrollTop;
    
    element.scrollTop = intValue
    element.scrollLeft = intValue
    
    • 可读可写。

    注意:以下所说的位置,都是指元素左上角相对于另一个元素左上角的坐标。

    元素相对于父元素位置

    父元素的情况可分为:直接父元素、间接父元素。

    下面将问题具体化,主要使用了 offset 相关属性。复杂的布局情况可以依此类推。

    对最终位置结果可能会产生影响的因素有:

    • 元素的 box-sizing 属性
    • 元素的 position 属性
    • 元素的 border 属性
    • 元素的 padding 属性

    直接父元素

    这是测试页面,移动端访问如下:

    获取页面元素位置

    间接父元素

    这是测试页面,移动端访问如下:

    获取页面元素位置

    元素是否在滚动可视区

    由于不同的布局和 CSS 属性,计算方式可能会有差别,这是一个简单的示例,移动端访问如下:

    获取页面元素位置

    示例主要判断逻辑

    function checkIntoView() {
      var scrollEle = document.querySelector('.list');
      var scrollEleHeight = scrollEle.offsetHeight;
      var itemHeight = -document.querySelector('.item').offsetHeight;
      var intoViewEle = [];
      var scrollTopDis = scrollEle.scrollTop;
      document.querySelectorAll('.item').forEach(function(ele,index) {
        var top = ele.offsetTop;
        var gap = top - scrollTopDis;
        if (gap>itemHeight && gap <=scrollEleHeight) {
          if (intoViewEle.indexOf(index)<0) {
            var indexNum = index + 1;
            intoViewEle.push('元素 '+indexNum)
          }
        }
      })
      var showMsg = intoViewEle.join(',');
      document.querySelector('#result').innerHTML = '部分或全部已在滚动可视区的元素有:<br />'+showMsg;
    }
    

    参考资料

    • Element.clientHeight
    • Element.clientWidth
    • Window.innerHeight
    • Window.innerWidth
    • Window.outerHeight
    • Window.outerWidth
    • HTMLElement.offsetLeft
    • HTMLElement.offsetParent
    • scrollTop
    • scrollLeft

    回眸一喵

    获取页面元素位置


    起源地下载网 » 获取页面元素位置

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元