zoukankan      html  css  js  c++  java
  • 获取元素距离浏览器窗口左部,顶部的距离

    点击一个元素,获取元素距离窗口左边,上边的距离,直接用的  offsetLeft   offsetTop, 之前用的时候没问题, 但是这次不行了, 获得的结果一直是0,怎么回事? 查了资料终于发现 offsetLeft 跟  offsetLeft 没想象的那么简单。

    这里要先说下  offsetParent,看下图:

    中间 offsetWidth 部分是目标元素,offsetLeft 就是目标元素距离 offsetParent左边的距离,这个 offsetParent 就有点说法了。

    offsetParent :

    这里主要说三种情况

     【1】元素自身有fixed定位,offsetParent的结果为null

      当元素自身有 fixed 固定位置时,由于固定定位的元素相对于视口进行定位,此时没有定位父级,offsetParent的结果为null

      [注意]firefox浏览器有兼容性问题

    <div id="test" style="position:fixed"></div>    
    <script>
    //firefox并没有考虑固定定位的问题,返回<body>,其他浏览器都返回null
    console.log(document.querySelector('#test').offsetParent);
    </script>

    【2】元素自身无fixed定位,且父级元素都未经过定位(包括:relative ,absoluted, fixed),offsetParent的结果为<body>

    <div id="test"></div>    
    <script>
    console.log(document.querySelector('#test').offsetParent);//<body> </script>

    【3】元素自身无fixed定位,且父级元素存在经过定位的元素(包括:relative ,absoluted, fixed),offsetParent的结果为离自身元素最近的经过定位的父级元


    我这次遇到的坑就是,父级有个元素设置了 relative    这时候获取  offsetParent   得到的就是设置relative 的这个元素,不是body元素,所以获取的 offsetLeft 就不是我需要的,但是这个父级元素还必须设置 relatvie ,这就麻烦了,于是就找到了另一种解决方案: getBoundingClientRect

    getBoundingClientRect:

    先看下图:

    left就是元素左边距离body的距离,top 就是上边距离body的距离, 还有 其他参数也都有了, 查了兼容性,也没问题,good ! 

  • 相关阅读:
    web全栈第四讲:后端框架express.js初步体验。
    web全栈第三讲:Angular单页面应用
    Web第六讲:HTML基础
    关于命令模式的一点意见
    黑猫白猫读《大话设计模式》
    排序二叉树的实现和我的一个数据结构设计
    《算法与数据结构C语言描述》优先队列
    《算法与数据结构C语言描述》里的农夫过河
    读《算法与数据结构c语言描述》
    《算法与数据结构C语言描述》里的求多项达式值
  • 原文地址:https://www.cnblogs.com/yalong/p/10076698.html
Copyright © 2011-2022 走看看