• Offset等一些类似属性的使用


    1.offset系列

    // offset 系列
    var father = document.querySelector('.father');
    var son = document.querySelector('.son');
    // 1.可以得到元素的偏移 位置 返回的不带单位的数值  
    console.log(father.offsetTop);
    console.log(father.offsetLeft);
    // 它以带有定位的父亲为准  如果么有父亲或者父亲没有定位 则以 body 为准
    console.log(son.offsetLeft);
    var w = document.querySelector('.w');
    // 2.可以得到元素的大小 宽度和高度 是包含padding + border + width 
    console.log(w.offsetWidth);
    console.log(w.offsetHeight);
    // 3. 返回带有定位的父亲 否则返回的是body
    console.log(son.offsetParent); // 返回带有定位的父亲 否则返回的是body
    console.log(son.parentNode); // 返回父亲 是最近一级的父亲 亲爸爸 不管父亲有没有定位
    ript>

    offset和style有关属性的比较

    1.是否可读写:

    拿offsetWidth和style.width来说,我们执行一下以下代码:

            .box {
                width: 200px;
                height: 200px;
                background-color: pink;
                padding: 10px;
            }

    我们把盒子的长度和宽度都设置为了200px,log一下二者:

            var box = document.querySelector('.box');
            console.log(box.offsetWidth);
    // 220 console.log(box.style.width);
    // 200px

    从中我们得到了3个信息

    1.二者都是可读的。

    2.style会带单位。

    并且根据规范对其赋值的时候也应该带单位,所以当我们通过offset获得的值再使用style时应在其后方加上px;

    3.offset会把padding包含在内。

    再分别对其进行赋值操作:

            var box = document.querySelector('.box');
            box.offsetWidth = '300';
            console.log(box.offsetWidth); //220
            console.log(box.style.width); //200px
            box.style.width = '300px';
            console.log(box.offsetWidth); //320
            console.log(box.style.width); //300px

    发现前者并不能对元素的属性进行写的操作,这也意味着如果我们如果通过offset得到的属性而要对页面元素进行操作的时候,应该选用与style配合的方法;

    这里有个动态拖拽框的小案例,有兴趣的朋友不妨试试。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            
            .login_header {
                 100%;
                /* height: 30px; */
                line-height: 30px;
                text-align: center;
                font-size: 24px;
                margin-top: 8px;
            }
            
            a {
                text-decoration: none;
                color: #000;
            }
            
            .login {
                position: fixed;
                left: 50%;
                top: 50%;
                transform: translate(-50%, -50%);
                 512px;
                height: 280px;
                background-color: #fff;
                border: 1px solid #cccccc;
                box-shadow: 0px 0px 20px #dddddd;
                display: none;
            }
            
            .login_title {
                margin-top: 20px;
                text-align: center;
                font-size: 20px;
                cursor: move;
            }
            
            .login_uname,
            .login_password {
                margin: 20px 0;
            }
            
            .login_uname input,
            .login_password input {
                outline: none;
                text-indent: 5px;
                height: 38px;
                 350px;
                border: 1px solid #cccccc;
            }
            
            .login_button {
                text-align: center;
                line-height: 40px;
                position: absolute;
                left: 50%;
                transform: translateX(-50%);
                 256px;
                height: 40px;
                font-size: 16px;
                border: 1px solid #cccccc;
            }
            
            label {
                text-align: right;
                display: inline-block;
                 100px;
                height: 35px;
                padding-right: 10px;
                /*  20px; */
            }
            
            .login_close a {
                position: absolute;
                top: -15px;
                right: -15px;
                display: block;
                 35px;
                height: 35px;
                line-height: 35px;
                text-align: center;
                font-size: 14px;
                background-color: #fff;
                border-radius: 50%;
                box-shadow: 0px 0px 20px #dddddd;
            }
            
            .mask {
                position: fixed;
                top: 0;
                 100%;
                height: 100%;
                background-color: #B2B2B2;
                z-index: -99;
                display: none;
            }
        </style>
    </head>
    
    <body>
        <div class="login_header"><a href="javascript:;" id="enter_login">点击,弹出登录框</a></div>
        <div class="login">
            <div class="login_title" id="title">登录会员</div>
            <div class="login_uname">
                <label for="uname">用户名:</label>
                <input type="text" placeholder="请输入用户名" id="uname">
            </div>
            <div class="login_password">
                <label for="password">登录密码:</label>
                <input type="password" placeholder="请输入密码" id="password">
            </div>
            <a class="login_button" href="javascript:;">登录会员</a>
            <div class="login_close">
                <a href="javascript:;" id="close">关闭</a>
            </div>
        </div>
        <div class="mask"></div>
        <script>
            var title = document.querySelector('#title');
            var enter_login = document.querySelector('#enter_login');
            var login = document.querySelector('.login');
            var login_uname = document.querySelector('.login_uname').querySelector('input');
            var login_password = document.querySelector('.login_password').querySelector('input');
            var close_button = document.querySelector('#close');
            var mask = document.querySelector('.mask');
            enter_login.addEventListener('click', function() {
                login.style.display = 'block';
                mask.style.display = 'block';
    
            })
            close_button.addEventListener('click', function() {
                login.style.display = 'none';
                mask.style.display = 'none';
            })
    
            function onFocus(input) {
                input.addEventListener('focus', function() {
                    this.style.borderColor = 'skyblue';
                })
                input.addEventListener('blur', function() {
                    this.style.borderColor = '#ccc';
                })
            }
            onFocus(login_uname);
            onFocus(login_password);
            title.addEventListener('mousedown', function(e) {
                var x = e.pageX - login.offsetLeft;
                var y = e.pageY - login.offsetTop;
    
                function move(e) {
                    var moveX = e.pageX - x;
                    var moveY = e.pageY - y;
                    login.style.left = moveX + 'px';
                    login.style.top = moveY + 'px';
                }
                title.addEventListener('mousemove', move);
                title.addEventListener('mouseup', function() {
                    title.removeEventListener('mousemove', move);
                })
    
            })
        </script>
    </body>
    
    </html>
    View Code

    2.鼠标当前的坐标及其在某盒子内的坐标

    在事件的函数中传入e,通过e.pageX,e.pageY获取当前鼠标在页面中的位置坐标。

    这里我们综合上面的offset来计算一下鼠标在当前盒子中的坐标:

    思路:盒子中的x坐标为鼠标再页面中距离左端的距离e.pagex减去盒子距离左端的长度box.offsetLeft。

            window.addEventListener('load', function() {
                var div = document.querySelector('div');
                div.addEventListener('mousemove', function(e) {
                    var x = e.pageX - div.offsetLeft;
                    var y = e.pageY - div.offsetTop;
                    console.log(x);
                    console.log(y);
                    div.innerHTML = '鼠标在盒子内的X坐标是' + x + '  y坐标是' + y;
                })
            })

    3.Client系列

    我们使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client 系列的相关属性可以动态的得到该元素的边框大小、元素大小等。

    用法与offset一致,同样含有Left Top Width Height区别在于client不包含边框!

    4.Scroll系列

    这里我们用一张图来解释一下

    scrollTop是指被卷曲的长度,Height是文字的总长度。

  • 相关阅读:
    左偏树
    论在Windows下远程连接Ubuntu
    ZOJ 3711 Give Me Your Hand
    SGU 495. Kids and Prizes
    POJ 2151 Check the difficulty of problems
    CodeForces 148D. Bag of mice
    HDU 3631 Shortest Path
    HDU 1869 六度分离
    HDU 2544 最短路
    HDU 3584 Cube
  • 原文地址:https://www.cnblogs.com/dokom666/p/12861007.html
Copyright © 2020-2023  润新知