zoukankan      html  css  js  c++  java
  • js offset系列属性


    • offsetParent:返回该元素有定位的父级,如果父级都没有定位则返回body
    • offsetTop:返回元素相对父级(带有定位的父级)上方的偏移
    • offsetLeft:返回元素相对父级(带有定位的父级)左边框的偏移
    • offsetWidth:返回自身的宽度,包括padding、border、内容区,返回数值不带单位
    • offsetHeight:返回自身的高度,包括padding、border、内容区,返回数值不带单位
    • style.width 只能获取行内样式的数据,返回有单位,能用js修改数值
    • offsetWidth只能读不能改,返回无单位

    注意:<style></style>要放在js代码前面,js中才能正确获取offset系列属性。如果style代码要放在js代码后面,需要使用 window.onload 等待资源加载完毕再执行js代码。


    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
            <div class="parent">
                <div class="child">child</div>
                <div id="style" style=" 88px;height: 66px;background-color: #00FFFF;">
                    test style
                </div>
            </div>
            
        </body>
        <script>
        window.onload = function(){
            /**
             * offsetParent:返回该元素有定位的父级,如果父级都没有定位则返回body
             * 
             * offsetTop:返回元素相对父级(带有定位的父级)上方的偏移
             * offsetLeft:返回元素相对父级(带有定位的父级)左边框的偏移
             * offsetWidth:返回自身的宽度,包括padding、border、内容区,返回数值不带单位
             * offsetHeight:返回自身的高度,包括padding、border、内容区,返回数值不带单位
             * 
             * style.width 只能获取行内样式的数据,返回有单位,能用js修改数值
             * offsetWidth只能读不能改,返回无单位
             * */
            var parent = document.querySelector(".parent");
            console.log("parentNode:",parent.parentNode);
            var child = document.querySelector(".child");
            console.log("offsetParent:", child.offsetParent);
            console.log("offsetTop:", child.offsetTop);
            console.log("offsetLeft:", child.offsetLeft);
            console.log("offsetWidth:", child.offsetWidth);
            console.log("offsetHeight:", child.offsetHeight);
            
            console.log("--------------------------------");
            var style = document.querySelector("#style");
            console.log("offsetWidth:",style.offsetWidth);
            console.log("style.",style.style.width);
            style.style.width = 111+"px";//这句生效,注意加单位
            console.log(style.style.width);
            style.offsetWidth = 222+"px";//这句不生效
            console.log(style.offsetWidth);
        }
        </script>
    
        <style>
            * {
                padding: 0;
                margin: 0;
            }
    
            .parent {
                position: relative;
                display: inline-block;
                width: 200px;
                height: 200px;
                margin: 50px;
                background-color: #008000;
            }
    
            .child {
                display: inline-block;
                position: absolute;
                width: 50px;
                height: 50px;
                margin: 10px;
                border: 5px solid yellow;
                background-color: red;
            }
            #style{
                position: absolute;
                bottom: 0;
                right: 0;
            }
        </style>
    </html>

    style和offsetWidth的区别:

    • style.width 只能获取行内样式的数据,返回有单位,能用js修改数值
    • offsetWidth只能读不能改,返回无单位

    对于“style.width 只能获取行内样式的数据 ”,如果没有行内样式,第一次获取style.width 会是空,但是给style.width 赋值后,再次获取能正常获取到值。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <style type="text/css">
                div{
                    width: 100px;
                    height: 100px;
                    position: absolute;
                    background-color: #008099;
                }
            </style>
        </head>
        <body>
            <div></div>
        </body>
        <script type="text/javascript">
            var div = document.querySelector("div");
            // div.style.left = 102 + "px";
            console.log(div.style.left);
        </script>
    </html>

    div.style.left = 102 + "px";
    console.log(div.style.left);

  • 相关阅读:
    JSON的序列化与还原
    正则表达式的一些基础
    跨域二三事
    与Web服务器通信
    与 Web 服务器通信
    代码重构
    构造函数与各种继承方法特点
    this指向问题——严格、非严格模式,事件处理程序
    《JavaScript设计模式与开发实践》学习笔记——单例模式
    Git常用命名及常见操作流程
  • 原文地址:https://www.cnblogs.com/sunshine233/p/15627484.html
Copyright © 2011-2022 走看看