当前位置: 首页 > news >正文

vue directive自定义指令实现弹窗可拖动

vue2

创建一个js文件

// draggable.js
export default {// 定义 Vue 插件install(Vue) {Vue.directive('draggable', { // 全局指令名为 v-draggableinserted(el) {el.onmousedown = function (ev) {// 获取鼠标按下时的偏移量(鼠标位置 - 元素位置)const disX = ev.clientX - el.offsetLeftconst disY = ev.clientY - el.offsetTopdocument.onmousemove = function (ev) {// 获取鼠标实时移动时,元素的位置(鼠标实时位置 - 偏移量)const l = ev.clientX - disXconst t = ev.clientY - disY// 实时设置元素位置el.style.left = l + 'px'el.style.top = t + 'px'}document.onmouseup = function () {// 鼠标抬起时,销毁移动事件和鼠标抬起事件document.onmousemove = document.onmouseup  = null}}}})}
}

全局注册

// main.js
import draggable from '@/utils/draggable.js'
Vue.use(draggable)

使用

<div v-draggable><div>内容</div>
</div>//鼠标样式
cursor: move;

vue3

创建js文件

// draggable.js
export default {// 定义 Vue 插件install(Vue) {Vue.directive('draggable', { // 全局指令名为 v-draggablemounted(el) {el.onmousedown = function (e) {// 获取鼠标按下时的偏移量(鼠标位置 - 元素位置)const disX = e.clientX - el.offsetLeftconst disY = e.clientY - el.offsetTopdocument.onmousemove = function (e) {// 获取鼠标实时移动时,元素的位置(鼠标实时位置 - 偏移量)const l = e.clientX - disXconst t = e.clientY - disY// 实时设置元素位置el.style.left = l + 'px'el.style.top = t + 'px'}document.onmouseup = function () {// 鼠标抬起时,销毁移动事件和鼠标抬起事件document.onmousemove = document.onmouseup  = null}}}})}
}

全局注册

//main.js
import draggable from './utils/draggable';const app = createApp(App);
app.use(router).use(draggable).mount('#app')

http://www.lryc.cn/news/233356.html

相关文章:

  • 07-流媒体-RTMP推流
  • Neo4j安装(Docker中安装Neo4j)
  • 面试求职者
  • Java NIO 详解
  • css设置下划线
  • 【献给过去的自己】栈实现计算器(C语言)
  • 如何利用ChatGPT撰写学术论文?
  • 【PG】PostgreSQL高可用方案repmgr管理之配置文件
  • labelme自动标注工具
  • 【C++学习手札】模拟实现vector
  • Python将图片按照表格形式排列
  • Linux 简要命令记录
  • 深度学习与深度强化学习
  • C++函数重载中形参是引用类型和常量引用类型的调用方法
  • Quest 3期间Sui上游戏处理了数百万笔交易
  • Python中如何定义类、基类、函数和变量?
  • 打开文件 和 文件系统的文件产生关联
  • 【Rust】快速教程——模块mod与跨文件
  • crontab定时任务是否执行
  • MATLAB程序设计:牛顿迭代法
  • B031-网络编程 Socket Http TomCat
  • gRPC之metadata
  • 【OpenCV实现图像:OpenCV进行OCR字符分割】
  • 景联文科技入选量子位智库《中国AIGC数据标注产业全景报告》数据标注行业代表机构
  • ClickHouse SQL操作
  • Ubuntu安装Python环境(使用VSCode)
  • QTcpSocket发送结构体的做法
  • 微服务学习 | Ribbon负载均衡、Nacos注册中心、微服务技术对比
  • 【FPGA】zynq 单端口RAM 双端口RAM 读写冲突 写写冲突
  • 【备忘】websocket学习之挖坑埋自己