5offsetLeft,offsetParent,getBoundingClientRect

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        div{padding:100px;}
        #div1{background-color: #FFF5EE;position:relative;}
        #div2{background-color: #F4F4F4;}
        #div3{background-color: #C1FFC1;position:relative;}
    </style>
</head>
<body>
    <div id="div1">
        <div id="div2">
            <div id="div3">

            </div>
        </div>
    </div>
    <script>
        /*offsetParent  最近的有定位属性的祖先节点*/
        var div3 = document.getElementById("div3");
        console.log(div3.offsetParent);
        /*结果导向证明,div3的最近的有定位属性的祖先节点是body;
            当div1和div3都有定位的时候,div3的offsetParent是idv1
            如果祖先节点都没有定位,默认为body,子元素和父元素都有定位,而且其他浏览器为了兼容,div还要有宽高.
        */
    </script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{margin:0;padding:0;}
        #div1{background-color: #FFF5EE;position:relative;width: 200px;height: 200px;left:30px;top:30px; border:3px solid #7D26CD;}
        #div2{background-color: #FF7F00;position:relative;width: 100px;height:100px;left:30px;top:30px; border:3px solid #7D26CD;}
        #div3{background-color: #C1FFC1;
            position:absolute;
            width: 50px;
            height: 50px;top:20px;
             border:3px solid #7D26CD;
             left:0;/*important*/
             transition:1s left;}
    </style>
</head>
<body>
    <input id = "btn" type="button" value = "点击移动">
    <div id="div1">
        <div id="div2">
            <div id="div3">

            </div>
        </div>
    </div>
    <script>
        /*offsetLeft  左外边框到最近的有定位父级的左内边框的距离*/
        /*offsetTop  上外边框到最近的有定位父级的上内边框的距离*/
        /*offsetRight offsetBottom 是没有的*/
        var div3 = document.getElementById("div3");
        console.log(div3.offsetParent);
        console.log(getComputedStyle(div3).left);/*20px*/
        console.log(div3.offsetLeft);
        console.log(div3.offsetTop);/*20*/
        /*如果子元素和父级元素都没有定位的话,offsetLeft是8px,取消margin和padding之后,是0px*/

        /*需求:当点击按钮的时候,div3移动到左顶边*/
        var btn = document.getElementById("btn");

        btn.onclick = function(){
            var left = 0;
            var elem = div3;
            var div3B = parseInt(getComputedStyle(div3).borderLeftWidth);
            while(elem){//如果有elem这个元素,就会走这个循环
                left+=elem.offsetLeft+parseInt(getComputedStyle(elem).borderLeftWidth);
                elem=elem.offsetParent;//第一次计算之后elem就会由div3变成div2

            }
            left -= div3B;
            div3.style.left=-left+"px";
            console.log(left);
        }


    </script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{margin:0;padding:0;}
        #div1{background-color: #FFF5EE;position:relative;width: 200px;height: 200px;left:30px;top:30px; border:3px solid #7D26CD;}
        #div2{background-color: #FF7F00;position:relative;width: 100px;height:100px;left:30px;top:30px; border:3px solid #7D26CD;}
        #div3{background-color: #C1FFC1;
            position:absolute;
            width: 50px;
            height: 50px;top:20px;
             border:3px solid #7D26CD;
             left:0;/*important*/
             transition:1s left;}
    </style>
</head>
<body>
    <input id = "btn" type="button" value = "点击移动">
    <div id="div1">
        <div id="div2">
            <div id="div3">

            </div>
        </div>
    </div>
    <script>
        /*offsetLeft  左外边框到最近的有定位父级的左内边框的距离*/
        /*offsetTop  上外边框到最近的有定位父级的上内边框的距离*/
        /*offsetRight offsetBottom 是没有的*/
        var div3 = document.getElementById("div3");
        console.log(div3.offsetParent);
        console.log(getComputedStyle(div3).left);/*20px*/
        console.log(div3.offsetLeft);
        console.log(div3.offsetTop);/*20*/
        /*如果子元素和父级元素都没有定位的话,offsetLeft是8px,取消margin和padding之后,是0px*/

        /*需求:当点击按钮的时候,div3移动到左顶边*/
        var btn = document.getElementById("btn");

        btn.onclick = function(){

                div3.style.left=-div3.getBoundingClientRect().left+"px";
                /*
                    getBoundingVlientRect : 返回值为一个对象,获取某个元素的信息(高版本:left,right,top,bottom,width,height)
                    距离可视区屏幕的上下左右的距离.
                */

            }




    </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值