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>


相关推荐
kyriewen3 小时前
开源|Image Harvest v1.0.5:AI 智能标签 + Eagle 导出,设计师和开发者的图片工作流神器
前端·javascript·ai编程
覆东流4 小时前
Java开发环境搭建
java·开发语言·后端
阿洛学长4 小时前
VMware安装虚拟机教程(超详细)
java·linux·开发语言
rit84324994 小时前
链路预测(Link Prediction)MATLAB 实现
开发语言·matlab
jiayong234 小时前
01 检查 Python 版本与环境
开发语言·python
就叫_这个吧4 小时前
Java普通类、抽象类、接口的应用和区别
java·开发语言
梅孔立4 小时前
解决Nginx缓存不写入响应体问题:浏览器强制不缓存配置教程
java·开发语言·nginx·spring
代码改善世界4 小时前
【C++进阶】红黑树模拟实现mymap和myset
开发语言·c++
zzj_2626104 小时前
实验七 Python 文件操作与异常处理
开发语言·python
LiLiYuan.4 小时前
【happens-before 八大规则详解】
java·开发语言