画线

111 阅读1分钟
<!DOCTYPE html>
<html lang="en">

<head>
    <!-- 设置页面编码为UTF-8 -->
    <meta charset="UTF-8">
    <!-- 设置页面标题 -->
    <title>Draw Arrow</title>
    <style>
        /* 定义一个名为page的类,用于布局 */
        .page {
            width: 100%;
            height: 100%;
            display: flex;
        }

        /* 定义一个名为box1的类,用于样式设置 */
        .box1 {
            width: 50px;
            height: 50px;
            background: orange;
        }

        /* 定义一个名为box2的类,用于样式设置 */
        .box2 {
            width: 50px;
            height: 50px;
            background: rgb(84, 125, 238);
            margin-left: 100px;
        }

        /* 定义一个名为arrow的类,用于箭头元素的样式设置 */
        .arrow {
            position: absolute;
            background-color: green;
            width: 10px;
            height: 2px;
        }
    </style>
</head>

<body>
    <div id="app">
        <!-- 创建一个容器,使用page类进行布局 -->
        <div class="page">
            <!-- 创建一个具有box1类的div元素,用作起始点 -->
            <div class="box1" @mousedown="handleMouseDown"></div>
            <!-- 创建一个具有box2类的div元素,用作终点 -->
            <div class="box2" @mouseup="handleMouseUp"></div>
        </div>
    </div>

    <!-- 引入Vue.js库 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                isDrawing: false,
                startX: 0,
                startY: 0,
                endX: 0,
                endY: 0
            },
            methods: {
                // 鼠标按下事件处理方法
                handleMouseDown(event) {
                    // 记录鼠标按下时的坐标和目标元素
                    this.startX = event.clientX;
                    this.startY = event.clientY;
                    this.target = event.target;
                },
                // 鼠标释放事件处理方法
                handleMouseUp(event) {
                    // 获取鼠标释放时的坐标和目标元素
                    const endX = event.clientX;
                    const endY = event.clientY;
                    const target = event.target;

                    // 如果目标元素具有box2类名
                    if (target.classList.contains('box2')) {
                        // 创建一个div元素作为箭头表示,并设置其样式属性
                        const arrow = document.createElement('div');
                        arrow.classList.add('arrow');
                        arrow.style.left = this.startX + 'px';
                        arrow.style.top = this.startY + 'px';
                        arrow.style.width = Math.max(endX - this.startX, 0) + 'px';
                        arrow.style.transform = `rotate(${Math.atan((endY - this.startY) / (endX - this.startX))}rad)`;
                        // 将箭头元素添加到目标元素中
                        target.appendChild(arrow);
                    }
                }
            }
        });
    </script>
</body>

</html>