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>


相关推荐
w***7655几秒前
PHP vs Python:如何选择?
开发语言·python·php
e***98572 分钟前
PHP8.4重磅更新:性能飙升新特性
开发语言
Remember_9934 分钟前
Java 入门指南:从零开始掌握核心语法与编程思想
java·c语言·开发语言·ide·python·leetcode·eclipse
sheji34164 分钟前
【开题答辩全过程】以 基于Python的街区医院管理系统的设计与实现为例,包含答辩的问题和答案
开发语言·python
C_心欲无痕4 分钟前
Next.js 的哲学思想
开发语言·前端·javascript·ecmascript·nextjs
hxjhnct4 分钟前
Vue-Router 哈希路由 vs 历史路由详解
javascript·vue.js·哈希算法
海鸥两三8 分钟前
登录页面form表单
前端·javascript·css
[H*]9 分钟前
Flutter框架跨平台鸿蒙开发——Pattern Matching模式匹配
android·javascript·flutter
prettyxian12 分钟前
【QT】信号与槽:自定义信号、参数传递与Lambda
开发语言·qt
jiaguangqingpanda14 分钟前
Day23-20260119
java·开发语言