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 小时前
我用 50 行代码重写了 React Router 核心,终于搞懂了前端路由原理
前端·javascript·react.js
Asize6 小时前
HTML5 Canvas 基础:从按帧动画到 ECharts 数据可视化
前端·javascript·canvas
默_笙6 小时前
🎄 后端给我一堆扁平数据,我 10 行代码把它变成了树
前端·javascript
前端Hardy6 小时前
又一个 AI 神器火了!
前端·javascript·后端
PBitW7 小时前
GPT训练我的第二天,我表示不过如此!!!😕😕😕
前端·javascript·面试
kyriewen8 小时前
白宫直接给 OpenAI 下了限制令,GPT-5.6 不能随便放出来了
前端·javascript·面试
默_笙12 小时前
🍞 我用 CSS 画了一个会转的 3D 立方体,同事以为我学了 Three.js(这节课真的很神奇,我很喜欢)
javascript
sarasuki13 小时前
JavaScript的对象、new的机制与原型包装类
javascript·后端
weedsfly13 小时前
JavaScript 事件流:彻底搞懂捕获、冒泡与事件委托
前端·javascript·react.js
candyTong14 小时前
阿里开源 AI Code Review 工具:ocr review 的执行链路解析
javascript·后端·架构