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>


相关推荐
你不会困1 分钟前
什么?每天早上准时9点给你发送github项目推荐邮件
前端·javascript·nestjs
MarvinP12 分钟前
python基础:位置互换
开发语言·python·算法
Gauss松鼠会14 分钟前
GaussDB回调机制深度实践:从事件驱动到系统集成
开发语言·javascript·数据库·sql·gaussdb
独隅14 分钟前
Lua 函数使用的完整指南
开发语言·junit·lua·lua5.4
Surprisec34 分钟前
动手实践YJS:构建你的第一个实时协作文档编辑器
前端·javascript·面试
患得患失94936 分钟前
【前端】【React】useCallback的作用与使用场景总结
前端·javascript·react.js
柚子81640 分钟前
真不要依赖dom结构
javascript·dom
江沉晚呤时40 分钟前
深入解析策略模式在C#中的应用与实现
java·服务器·开发语言·前端·.netcore
居然是阿宋41 分钟前
Kotlin 中的 `reified` 关键字全解析:保留类型信息 + 优化高阶函数的双重魔法
android·开发语言·kotlin
程序员易晶1 小时前
vue2添加背景水印-手动实现(无组件模式)
javascript·vue.js·elementui