当前位置: 首页 > 知识库问答 >
问题:

vue3中怎么实现多个div通过定义一个函数useDraggable实现拖动?

竺辉
2023-07-16

https://play.vuejs.org/#eNqlVE2PmzAQ/StTLkskStIes9nVtmpV9dBL1...

上面地址中的代码需要修改成:
1:鼠标在红或绿色div上按下后移动鼠标,则相应的div会随着鼠标移动。
2:不管是红还是绿色div鼠标按下移动时不能超出窗口的边界。

有人知道怎么修改不?对鼠标那块的知识不怎么熟,学了忘。

共有1个答案

景凌
2023-07-16
<template>  <div     :style="{ left: `${elRed.x}px`, top: `${elRed.y}px`, position: 'fixed', background: 'red' }"     @mousedown="elRed.start"     @mousemove="elRed.move"     @mouseup="elRed.end"    @mouseleave="elRed.end"  >    Drag me! I am at {{ elRed.x }}, {{ elRed.y }}  </div>  <br/>  <div     :style="{ left: `${elGreen.x}px`, top: `${elGreen.y}px`, position: 'fixed', background: 'green' }"     @mousedown="elGreen.start"     @mousemove="elGreen.move"     @mouseup="elGreen.end"    @mouseleave="elGreen.end"  >    Drag me! I am at {{ elGreen.x }}, {{ elGreen.y }}  </div></template><script setup lang="ts">import { ref } from 'vue';function useDraggable() {  const x = ref(0);  const y = ref(0);  const isDragging = ref(false);  let startX = 0;  let startY = 0;  let initialX = 0;  let initialY = 0;  const start = (event) => {    isDragging.value = true;    startX = event.clientX;    startY = event.clientY;    initialX = x.value;    initialY = y.value;  };  const move = (event) => {    if (isDragging.value) {      const dx = event.clientX - startX;      const dy = event.clientY - startY;      x.value = Math.min(Math.max(initialX + dx, 0), window.innerWidth - 100); // 100 is the width of the div      y.value = Math.min(Math.max(initialY + dy, 0), window.innerHeight - 100); // 100 is the height of the div    }  };  const end = () => {    isDragging.value = false;  };  return {    x,    y,    isDragging,    start,    move,    end  };}const elRed = useDraggable();const elGreen = useDraggable();</script>
 类似资料:
  • 本文向大家介绍怎么实现一个计算一年中有多少周?相关面试题,主要包含被问及怎么实现一个计算一年中有多少周?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先你得知道是不是闰年,也就是一年是365还是366. 其次你得知道当年1月1号是周几。假如是周五,一年365天把1号 2号3号减去,也就是把第一个不到一周的天数减去等于362  

  • vue3实现红包雨怎么实现呢? vue3实现红包雨怎么实现呢?

  • 大佬帮忙修改一下面的代码,鼠标可以分别拖拽div,并且不超过窗口的边界。 https://play.vuejs.org/#eNqlVW1r2zAQ/is3U4gDmdPto5eWbnSMwcZg7...

  • 如果你想定义一个类,你只需要使用class关键字。 class MainActivity{ } 它有一个默认唯一的构造器。我们会在以后的课程中学习在特殊的情况下创建其它额外的构造器,但是请记住大部分情况下你只需要这个默认的构造器。你只需要在类名后面写上它的参数。如果这个类没有任何内容可以省略大括号: class Person(name: String, surname: String) 那么构造函