前端学习笔记

day26
九宫格盒子的拖动换位

<!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>
        .outer {
            position: relative;

        }

        div {
            width: 100px;
            height: 100px;
            position: absolute;
            border-radius: 25%;
            line-height: 100px;
            text-align: center;


        }
    </style>
</head>

<body>
    <div class="outer">
        <div>A</div>
        <div>B</div>
        <div>C</div>
        <div>D</div>
        <div>E</div>
        <div>F</div>
        <div>G</div>
        <div>H</div>
        <div>I</div>
    </div>

    <script>

        var mg = 10
        var perWidth = 100 + mg
        function randomColor() {       //随机颜色函数
            let r = Math.floor(Math.random() * 255);
            let g = Math.floor(Math.random() * 255);
            let b = Math.floor(Math.random() * 255);

            return `rgb(${r},${g},${b})`;
        }
        var out = document.querySelector(".outer")
        var oDivs = out.querySelectorAll("div")
        //给div上色
        oDivs.forEach(function (v, i) {
            v.style.backgroundColor = randomColor();

        });     //放前三个div
        for (var i = 0; i < 3; i++) {
            oDivs[i].style.left = i * perWidth + "px"
            oDivs[i].style.top = 0

        }
        //根据前三个div的top和left放剩下的div
        for (var i = 3; i < oDivs.length; i++) {
            oDivs[i].style.left = oDivs[i - 3].style.left
            oDivs[i].style.top = parseInt(oDivs[i - 3].style.top) + perWidth + "px"

        }

        function minindex(a) {
            var min = 0

            for (var i = 1; i < a.length; i++) {
                if (a[min] > a[i]) {
                    min = i
                }


            } return min

        }

        //实现拖拽
        out.onmousedown = function (e) {
            //确定鼠标点的位置

            var tag = e.target
            var a = e.clientX - parseInt(tag.style.left)
            var b = e.clientY - parseInt(tag.style.top)
            var kelong = tag.cloneNode(true)//克隆
            out.replaceChild(kelong, tag)
            out.appendChild(tag)

            document.onmousemove = function (e) {
                //更新位置
                e.preventDefault();
                var x = e.clientX - a
                var y = e.clientY - b
                tag.style.left = x + "px";
                tag.style.top = y + "px";
            }
            document.onmouseup = function () {

                var arr = [];

                var oDivs = out.querySelectorAll("div")

                for (var i = 0; i < oDivs.length - 1; i++) {
                    var a = tag.offsetLeft - oDivs[i].offsetLeft
                    var b = tag.offsetTop - oDivs[i].offsetTop
                    var c = Math.sqrt(a * a + b * b)

                    arr.push(c)



                }

                console.log(arr);

                var min = minindex(arr)

                tag.style.left = oDivs[min].style.left
                tag.style.top = oDivs[min].style.top
                oDivs[min].style.left = kelong.style.left
                oDivs[min].style.top = kelong.style.top

                out.removeChild(kelong)

                document.onmouseup = null
                document.onmousemove = null;






            }


        }






    </script>
</body>

相关推荐

  1. 前端学习笔记

    2024-06-09 03:50:04       57 阅读
  2. 前端学习笔记

    2024-06-09 03:50:04       63 阅读
  3. vue前端学习笔记

    2024-06-09 03:50:04       69 阅读
  4. 前端】JQuery(学习笔记

    2024-06-09 03:50:04       52 阅读
  5. 前端学习笔记

    2024-06-09 03:50:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 03:50:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 03:50:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 03:50:04       82 阅读
  4. Python语言-面向对象

    2024-06-09 03:50:04       91 阅读

热门阅读

  1. Python | 刷题笔记

    2024-06-09 03:50:04       31 阅读
  2. C++ extern “C”

    2024-06-09 03:50:04       30 阅读
  3. 1130. 【二维数组】打印螺旋矩阵

    2024-06-09 03:50:04       30 阅读
  4. Android 13 亮度调节代码分析

    2024-06-09 03:50:04       29 阅读
  5. 中国剩余定理学习

    2024-06-09 03:50:04       31 阅读
  6. 【React】前端插件 uuidjs 的使用 --随机生成id

    2024-06-09 03:50:04       28 阅读
  7. 浅谈一下关系型数据库中json类型字段的处理

    2024-06-09 03:50:04       24 阅读
  8. MySQL学习——INFORMATION_SCHEMA触发器表

    2024-06-09 03:50:04       29 阅读