css基础--位移和定位1

元素定位是动态网页设计的基础,用户通过访问和设置元素的css位置属性(left和top)可以模拟各种网页的运动效果;

获取相对包含框的位置;获取定位包含框的位置;设置元素的偏移位置;设置元素的相对位置

<div id="warp">
            <div id="sub">
                <div id="box">
                </div>
            </div>
        </div>
        <script type="text/javascript">
            function getPoint(ele){//0.获取指定元素距离左上角偏移坐标
                var x=y=0;//初始化临时变量
                while(ele.offsetParent){
                    x+=ele.offsetLeft;//累计总的x轴偏移距离
                    y+=ele.offsetTop;//累计总的y轴偏移距离
                    ele=ele.offsetParent;//把当前元素的offsetParent属性值传递给循环条件表达式
                }
                return {//遍历到body元素后,没有offsetParent属性,循环停止,把叠加的值赋值给对象直接量,并返回该对象
                    "x":x,
                    "y":y
                }
            }

offsetParent属性的支持

对于IE:当前定位元素(ID为box的div元素)的offsetParent属性将指向ID为sub的div元素。对于sub元素的offsetParent指向ID为wrap的div元素

对于支持DOM的浏览器,则当前定位元素的向ID为wrap的div元素

            //1.获取相对包含框的位置(获取相对父级元素的位置
            function getP(ele){
                if(ele.parentNode==ele.offsetParent){//ele.offsetParent是否指向父级
                    
                    var x=ele.offsetLeft;
                    var y=ele.offsetTop;
                }else{
                    var o=getPoint(ele);
                    var p=getPoint(ele.parentNode);
                    var x=o.x-p.x;
                    var y=o.y-p.y;
                }
                return {
                    "x":x,
                    "y":y
                };
            }
            
//            var box=document.getElementById("box");
//            var o=getP(box);//获取指定元素的相对父元素的偏移坐标
//            alert(o.x);//51
//            alert(o.y);//51

//2.获取指定元素的距离包含框元素左上角的偏移坐标

function  getStyle(e,n){//e表示元素,n表示属性名,如“width”、“borderColor”
                if(e.style[n]){//若果在style中显示定义
                    return e.style[n];
                    }else if(e.currentStyle){//否则,在IE
                        return e.currentStyle[n]
                    }else if(document.defaultView&&document.defaultView.getComputedStyle){//非ie(DOM标准)
                        n=n.replace(/([A-Z])/g,"-$1");//转换参数的属性名  borderColor--> border-Color
                        n=n.toLocaleLowerCase();//border-Color-->border-color
                        var s= document.defaultView.getComputedStyle(e,null);
                        if(s){
                            return s.getPropertyValue(n)
                        }
                    }else{
                        return null;//如果不支持,返回null
                    }
            }
            function getB(ele){\\获取指定元素的距离包含框元素左上角的偏移坐标
                return {
                    "x":(parseInt(getStyle(ele,"left"))||0),
                    "y":(parseInt(getStyle(ele,"top"))||0)
                }
            }
            
            var box=document.getElementById("box");
            var o=getB(box);//获取指定元素的距离包含框元素左上角的偏移坐标
            alert(o.x);//0
            alert(o.y);//0
            
            //3.设置元素的偏移位置(重新定位元素的位置,不考虑元素可能存在的定位置,考虑页面中经常使用绝对定位来定位元素的位置)
            function setP(ele,o){//ele设置位置的元素,o={"x":x,"y":y}
                (ele.style.position)||(ele.style.position="absolute");//如果元素静态显示,则对其进行绝对定位
                ele.style.left=o.x+"px";
                ele.style.top=o.y+"px";
                
            }
            
            //4.设置元素的相对位置(动画设计中常用到设置元素以当前位置为起点进行偏移)
            function offsetP(ele,o){//ele设置位置的元素,o={"x":x,"y":y}
                (ele.style.position)||(ele.style.position="absolute");
                ele.style.left=getB(ele).x+o.x+"px";
                ele.style.top=getB(ele).y+o.y+"px";
            }

以下对应4的html和js

        <style>
            div{
                width: 200px;height: 100px;border: solid 1px red;padding:50px;
                position:absolute;left:50px;top:50px;
            }
        </style>
        <div id="warp">
            <div id="sub">
                <div id="box">
                </div>
            </div>
        </div>
        <script type="text/javascript">
             var sub=document.getElementById("sub");
             offsetP(sub,{
                 x:10,
                 y:100
             })
        </script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值