vue中的拖拽事件

简介: 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>
相关文章
|
3天前
|
缓存 监控 JavaScript
探讨优化Vue应用性能和加载速度的策略
【5月更文挑战第17天】本文探讨了优化Vue应用性能和加载速度的策略:1) 精简代码和组件拆分以减少冗余;2) 使用计算属性和侦听器、懒加载、预加载和预获取优化路由;3) 数据懒加载和防抖节流处理高频事件;4) 图片压缩和选择合适格式,使用CDN加速资源加载;5) 利用浏览器缓存和组件缓存提高效率;6) 使用Vue Devtools和性能分析工具监控及调试。通过这些方法,可提升用户在复杂应用中的体验。
10 0
|
3天前
|
JavaScript 前端开发
vue(1),小白看完都会了
vue(1),小白看完都会了
|
2天前
|
JavaScript 开发工具 git
Vue 入门系列:.env 环境变量
Vue 入门系列:.env 环境变量
9 1
|
3天前
|
JavaScript
vue知识点
vue知识点
11 0
|
3天前
|
JavaScript 前端开发 定位技术
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
|
3天前
|
JavaScript
Vue中避免滥用this去读取data中数据
Vue中避免滥用this去读取data中数据
|
3天前
|
JavaScript
vue中使用pinia及持久化
vue中使用pinia及持久化
6 0
|
3天前
|
JavaScript 前端开发 UED
Vue class和style绑定:动态美化你的组件
Vue class和style绑定:动态美化你的组件
|
3天前
|
JavaScript 前端开发 API
Vue 监听器:让你的应用实时响应变化
Vue 监听器:让你的应用实时响应变化
|
3天前
|
JavaScript
vue封装svg
vue封装svg
9 0