vue3自定义拖拽指令

javascript 复制代码
<template>
  <div v-move class="box">
    
  </div>
</template>

<script setup lang="ts"> 
import { Directive } from 'vue'
const vMove:Directive = (el:HTMLElement) =>{
  const mousedown = (e:MouseEvent) =>{
    // 鼠标按下
    const startX = e.clientX - el.offsetLeft;
    const startY = e.clientY  - el.offsetHeight;
    const move = (e:MouseEvent)=> {
      console.log('坐标',e.clientX, e.clientY);
      // 鼠标移动
      const moveX = e.clientX;
      const moveY = e.clientY;
      const disX = moveX - startX;
      const disY = moveY - startY;
      el.style.top = disY + 'px'
      el.style.left = disX + 'px'
    }
    const up = () => {
      // 鼠标抬起
      document.removeEventListener('mousemove',move)
      document.removeEventListener('mouseup',up)
    } 
    document.addEventListener('mousemove',move)
    document.addEventListener('mouseup',up)
  }
  el.addEventListener('mousedown',mousedown)
} 
</script>

<style scoped>
.box {
  width: 400px;
  height: 400px;
  background: pink;
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
</style>


相关推荐
布莱克60519 小时前
C++ 中 set 与 map 的区别详解
开发语言·c++·算法·哈希
Wang's Blog19 小时前
Java 项目实战: 交友项目 - 圈子互动
java·开发语言·交友
尤水就下19 小时前
🔥说一说在线文档的 Block 架构是如何实现的
前端·javascript·架构
jimy119 小时前
构造函数表达式的值类别是:prvalue
开发语言·c++
小嘉丶学长19 小时前
Day06 · 数据类型与类型检测
开发语言·python·学习·1024程序员节
多弗朗皮卡丘19 小时前
C++特殊类设计
开发语言·c++·设计模式
Wang's Blog20 小时前
Java 项目实战: 交友项目 - 查询单条动态:动态详情页的接口与实现
java·开发语言·交友
yuniko-n20 小时前
【JUC】CAS
java·开发语言
紧跟先前的步伐20 小时前
Go AI Agent 实战 17|模型适配层设计:让模型可替换
开发语言·人工智能·后端·ai·golang
晓得迷路了20 小时前
栗子前端技术周刊第 151 期 - ViteConf 2026、React Router 8.5、React Native 0.88...
前端·javascript·vue.js