webAPI系列之_5分钟玩转BOM_02篇

webAPI系列之_5分钟玩转BOM_02篇

知识导航:

  1. offset系列
  2. client系列
  3. scroll系列

4 offset系列

4.1 概述

offset 译为偏移量,在这里我们使用 offset系列相关属性可以动态的得到元素的位置(偏移)、大小等。

常见属性:

在这里插入图片描述

值得注意的是:它获取的数值是不带单位的

4.2 offset与style属性的区别

style

  • style 只能得到行内样式表中的样式值
  • style.width 获得的是带有单位的字符串
  • style.width 获得不包含padding和border 的值
  • style.width 是可读写属性,可以获取也可以赋值

offset

  • offset 可以得到任意样式表中的样式值
  • offset 系列获得的数值是没有单位
  • offsetWidth 包含padding+border+width
  • offsetWidth 等属性是只读属性,只能获取不能赋值

故一般获取元素的大小偏移量可以用offset,设置则用style

4.3 栗子

4.3.1 拖拽模态框

效果:

在这里插入图片描述

相关思路:

这个小案例的思想是主要想清楚要移动盒子的top和left值。首先经过发现可以看出首先鼠标和盒子的相对位置是不变的

看图:

在这里插入图片描述

相关代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        input {
            outline: none;
        }
        
        a {
            text-decoration: none;
        }
        
        .con {
            padding-left: 500px;
        }
        
        .out {
            display: none;
            position: fixed;
            width: 100%;
            height: 1000px;
            background-color: dimgrey;
            top: 0;
            left: 0;
        }
        
        .inside {
            position: absolute;
            width: 500px;
            height: 300px;
            background-color: beige;
            left: 50%;
            transform: translateX(-50%);
            top: 200px;
        }
        
        .inside .close {
            position: absolute;
            display: inline-block;
            padding-top: 3px;
            width: 28px;
            height: 20px;
            border: 3px solid #bbb;
            border-radius: 50%;
            color: white;
            font-size: 12px;
            text-align: center;
            top: -20px;
            right: -15px;
        }
        
        .inside .top01 {
            width: 500px;
            height: 40px;
            border-bottom: 1px solid #999;
        }
        
        .inside .top01:hover {
            cursor: move;
        }
        
        .inside .buttom {
            text-align: center;
        }
        
        .inside .buttom div {
            height: 30px;
            margin: 40px;
        }
        
        .inside .buttom div input {
            padding-left: 3px;
            height: 30px;
            width: 350px;
            border: 1px solid #888;
            border-radius: 10px;
        }
    </style>
</head>

<body>
    <div class="con">
        <button>按钮</button>
    </div>



    <!-- 模态框模块 -->
    <div class="out">

        <div class="inside">
            <a class="close" href="javascript:;">关闭</a>
            <div class="top01" id="top"></div>
            <div class="buttom">
                <form action="">
                    <div>
                        <label for="name">姓名</label>
                        <input type="text" placeholder="请输入名字" name="name" id="">
                    </div>
                    <div>
                        <label for="password">密码</label>
                        <input type="password" placeholder="请输入密码" name="password" id="">
                    </div>
                    <div>
                        <input type="submit" value="提交">
                    </div>


                </form>
            </div>
        </div>

</body>
<script>
    var btn = document.querySelector("button");
    var outDiv = document.getElementsByClassName("out")[0];
    var inside = document.getElementsByClassName("inside")[0];
    var close = document.getElementsByClassName("close")[0];
    var top01 = document.getElementsByClassName("top01")[0];
    btn.addEventListener("click", function(e) {
        outDiv.style.display = "block";
    })
    close.addEventListener("click", function() {
        outDiv.style.display = "none";

    })


    // 鼠标按下时获得坐标
    top01.addEventListener("mousedown", function(e) {
        var x = e.clientX - inside.offsetLeft;
        var y = e.clientY - inside.offsetTop;
        document.addEventListener("mousemove", move);

        function move(e1) {
            inside.style.left = e1.clientX - x + "px";
            inside.style.top = e1.clientY - y + "px";
        }
        document.addEventListener("mouseup", function() {
            document.removeEventListener('mousemove', move);

        })
    })
</script>

</html>

5 client系列

5.1 概述

client 译为客户端,在这里我们可以使用 client 系列的相关属性来动态的获取元素可视区的相关信息。如该元素的边框大小、元素大小

常用属性:

在这里插入图片描述

6 scroll系列

6.1 概述

scroll 译为滚动,这里我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等。

常用属性:

在这里插入图片描述
看图:

在这里插入图片描述

6.2 栗子

用到的事件:页面滚动事件 scroll ,随着页面滚动会触发该事件
页面被卷去的头部:可以通过window.pageYOffset 获得,水平也即改成X

6.2.1 返回顶部

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .content {
            height: 2000px;
            background-color: aquamarine;
        }
        
        .goBack {
            display: none;
            text-decoration: none;
            width: 50px;
            height: 50px;
            background-color: yellow;
            font-size: 18px;
        }
    </style>
</head>

<body>
    <div class="content"></div>

    <a class="goBack" href="javascript:;">返回顶部</a>



    <script>
        // 开始时候隐藏
        // 下滑到100px的时候出来并且固定住
        // 一按返回顶部
        var goBack = document.querySelector(".goBack");

        document.addEventListener("scroll", function() {
            if (window.pageYOffset >= 1000) {

                goBack.style.display = "block";
                goBack.style.position = "fixed";
                goBack.style.right = "10px";
                goBack.style.top = "600px"

            } else {
                goBack.style.display = "none";
            }
        });

        goBack.addEventListener("click", function() {
            window.scroll(0, 0)
        });
    </script>
</body>

</html>
发布了68 篇原创文章 · 获赞 82 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41086511/article/details/104217007