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>


相关推荐
前端Hardy几秒前
Electrobun 正式登场:仅 12MB,JS 桌面开发迎来轻量化新方案!
前端·javascript·electron
叫我一声阿雷吧12 分钟前
JS 入门通关手册(20):构造函数与原型:JS 面向对象第一课
开发语言·javascript·前端开发·前端面试·构造函数·js进阶·js面向对象
2501_9454235413 分钟前
C++与Rust交互编程
开发语言·c++·算法
小王不爱笑13214 分钟前
Java Set 集合全家桶:HashSet、LinkedHashSet、TreeSet 详解与实战
java·开发语言
早點睡39017 分钟前
ReactNative项目Openharmony三方库集成实战:@react-native-ohos/react-native-image-picker
javascript·react native·react.js
code_whiter28 分钟前
C++2(类与对象上篇)
开发语言·c++
六元七角八分30 分钟前
学习笔记二《JavaScript 流程控制》
javascript·笔记
Teable任意门互动34 分钟前
中小企业进销存实战:Teable多维表格从零搭建高效库存管理系统
开发语言·数据库·excel·飞书·开源软件
En^_^Joy37 分钟前
JavaScript Web API:DOM操作全解析
开发语言·前端·javascript
m0_7432974238 分钟前
嵌入式LinuxC++开发
开发语言·c++·算法