vue中的拖拽事件

在Vue中实现拖拽事件的方法如下:

  1. 在需要拖拽的元素上绑定mousedown和mouseup事件,分别设置为dragStart和dragEnd函数。
<div class="box" @mousedown="dragStart" @mouseup="dragEnd"></div>

  1. 在dragStart函数中,设置元素的初始位置和鼠标按下时的坐标,并为document对象绑定mousemove事件,设置为dragging函数。
dragStart(event) {
  // 获取元素初始位置和鼠标按下时的坐标
  this.startX = event.clientX;
  this.startY = event.clientY;
  this.offsetX = event.currentTarget.offsetLeft;
  this.offsetY = event.currentTarget.offsetTop;
  // 绑定mousemove事件
  document.addEventListener('mousemove', this.dragging);
}

  1. 在dragging函数中,计算鼠标移动了多少距离,并将元素的位置进行更新。
dragging(event) {
  // 计算鼠标移动了多少距离
  const deltaX = event.clientX - this.startX;
  const deltaY = event.clientY - this.startY;
  // 更新元素的位置
  const newLeft = this.offsetX + deltaX;
  const newTop = this.offsetY + deltaY;
  event.currentTarget.style.left = newLeft + 'px';
  event.currentTarget.style.top = newTop + 'px';
}

  1. 在dragEnd函数中,解除document对象的mousemove事件。
dragEnd() {
  document.removeEventListener('mousemove', this.dragging);
}

完整的示例代码如下:

<template>
  <div class="box" @mousedown="dragStart" @mouseup="dragEnd"></div>
</template>

<script>
export default {
  data() {
    return {
      startX: 0,
      startY: 0,
      offsetX: 0,
      offsetY: 0,
    }
  },
  methods: {
    dragStart(event) {
      // 获取元素初始位置和鼠标按下时的坐标
      this.startX = event.clientX;
      this.startY = event.clientY;
      this.offsetX = event.currentTarget.offsetLeft;
      this.offsetY = event.currentTarget.offsetTop;
      // 绑定mousemove事件
      document.addEventListener('mousemove', this.dragging);
    },
    dragging(event) {
      // 计算鼠标移动了多少距离
      const deltaX = event.clientX - this.startX;
      const deltaY = event.clientY - this.startY;
      // 更新元素的位置
      const newLeft = this.offsetX + deltaX;
      const newTop = this.offsetY + deltaY;
      event.currentTarget.style.left = newLeft + 'px';
      event.currentTarget.style.top = newTop + 'px';
    },
    dragEnd() {
      // 解除mousemove事件
      document.removeEventListener('mousemove', this.dragging);
    },
  },
}
</script>

相关推荐

  1. vue事件

    2023-12-10 10:48:02       58 阅读
  2. Vue3如何将一个div进行

    2023-12-10 10:48:02       39 阅读
  3. Vue3封装可弹窗

    2023-12-10 10:48:02       50 阅读

最近更新

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

    2023-12-10 10:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 10:48:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 10:48:02       82 阅读
  4. Python语言-面向对象

    2023-12-10 10:48:02       91 阅读

热门阅读

  1. Let和Var的区别

    2023-12-10 10:48:02       56 阅读
  2. 项目记录:跨域问题解决方案

    2023-12-10 10:48:02       59 阅读
  3. js new 原理

    2023-12-10 10:48:02       55 阅读
  4. 排序算法——快速排序

    2023-12-10 10:48:02       58 阅读
  5. 在uniapp中,可以使用那些预定义的样式类

    2023-12-10 10:48:02       51 阅读