以下是Vue3 Typescript实现Windows鼠标框选div并获取内容的示例代码:

<template>
  <div class="container" @mousedown="handleMouseDown" @mousemove="handleMouseMove" @mouseup="handleMouseUp">
    <div class="box" ref="box"></div>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';

export default defineComponent({
  name: 'MouseBoxSelect',
  setup() {
    const boxRef = ref<HTMLDivElement | null>(null);
    const startX = ref(0);
    const startY = ref(0);
    const endX = ref(0);
    const endY = ref(0);

    // 鼠标按下时记录起始位置
    const handleMouseDown = (event: MouseEvent) => {
      startX.value = event.clientX;
      startY.value = event.clientY;
      endX.value = event.clientX;
      endY.value = event.clientY;
    };

    // 鼠标移动时更新框选区域
    const handleMouseMove = (event: MouseEvent) => {
      if (boxRef.value) {
        const left = Math.min(startX.value, event.clientX);
        const top = Math.min(startY.value, event.clientY);
        const width = Math.abs(event.clientX - startX.value);
        const height = Math.abs(event.clientY - startY.value);

        boxRef.value.style.left = `${left}px`;
        boxRef.value.style.top = `${top}px`;
        boxRef.value.style.width = `${width}px`;
        boxRef.value.style.height = `${height}px`;

        endX.value = event.clientX;
        endY.value = event.clientY;
      }
    };

    // 鼠标松开时获取框选区域内的内容
    const handleMouseUp = () => {
      if (boxRef.value) {
        const elements = document.elementsFromPoint(endX.value, endY.value);
        const selectedElements = elements.filter((element) => boxRef.value?.contains(element));
        console.log(selectedElements);
      }
    };

    return {
      boxRef,
      handleMouseDown,
      handleMouseMove,
      handleMouseUp,
    };
  },
});
</script>

<style scoped>
.container {
  position: relative;
  width: 500px;
  height: 500px;
  border: 1px solid #ccc;
}

.box {
  position: absolute;
  border: 1px dashed #f00;
  pointer-events: none;
}
</style>

在上面的代码中,我们使用了ref函数创建了一个boxRef引用,用于获取框选区域的div元素。在handleMouseDown事件处理程序中,我们记录了鼠标按下时的位置,并初始化了框选区域的大小。在handleMouseMove事件处理程序中,我们根据鼠标移动的位置更新框选区域的位置和大小。在handleMouseUp事件处理程序中,我们使用document.elementsFromPoint方法获取鼠标松开时框选区域内的所有元素,并使用filter方法过滤出包含在框选区域内的元素,最终将这些元素打印到控制台中

Vue3 Typescript实现Windows鼠标框选div 并且获取鼠标已经框选div内容打印到控制台

原文地址: https://www.cveoy.top/t/topic/exua 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录