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

vue系列--vue封装拖拽指令v-drag

1.首先将下面的代码引入代码中

export const initVDrag = (Vue) => {Vue.directive("drag", (el) => {const oDiv = el // 当前元素const minTop = oDiv.getAttribute("drag-min-top")const ifMoveSizeArea = 20oDiv.onmousedown = (e) => {let target = oDivwhile (window.getComputedStyle(target).position !== "absolute" &&target !== document.body) {target = target.parentElement}document.onselectstart = () => {return false}if (!target.getAttribute("init_x")) {target.setAttribute("init_x", target.offsetLeft)target.setAttribute("init_y", target.offsetTop)}const initX = parseInt(target.getAttribute("init_x"))const initY = parseInt(target.getAttribute("init_y"))// 鼠标按下,计算当前元素距离可视区的距离const disX = e.clientX - target.offsetLeftconst disY = e.clientY - target.offsetTopdocument.onmousemove = (e) => {// 通过事件委托,计算移动的距离// 因为浏览器里并不能直接取到并且使用clientX、clientY,所以使用事件委托在内部做完赋值const l = e.clientX - disXconst t = e.clientY - disY// 计算移动当前元素的位置,并且给该元素样式中的left和top值赋值target.style.left = l + "px"// target.style.top = (t < minTop ? minTop : t) + "px"target.style.top = t + "px"if (Math.abs(l - initX) > ifMoveSizeArea ||Math.abs(t - initY) > ifMoveSizeArea) {target.setAttribute("dragged", "")} else {target.removeAttribute("dragged")}}document.onmouseup = (e) => {document.onmousemove = nulldocument.onmouseup = nulldocument.onselectstart = null}// return false不加的话可能导致黏连,拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效return false}})
}

2.在main.js中

import {initVDrag} from "directives/dragscroll";
initVDrag(Vue)

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

相关文章:

  • devc++ 使用 winsock 实现 UDP 局域网 WIFI 广播
  • JS实现根据数组对象的某一属性排序
  • CSP-J 2023 复赛第2题:公路 ← 贪心算法
  • 【LeetCode打卡】Day23|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
  • Transformer位置表示(Position Encoding)
  • LPDDR6与LPDDR5 State Diagram技术探讨
  • AliLinux的使用Docker初始化服务(详细)
  • docker环境常用容器安装
  • 【论文阅读|基于 YOLO 的红外小目标检测的逆向范例】
  • 【presto权威指南】常用操作
  • Python程序员面试准备:八股文题目与解答思路
  • 如何系统地自学Python?
  • mysql 2-21
  • 【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推
  • LeetCode23.合并K个升序链表
  • (01)Hive的相关概念——架构、数据存储、读写文件机制
  • 二维码扫码登录原理,其实比你想的要简单的多
  • Java 实现 Awaitable(多线程并行等待,类似 AutoEventReset 的作用)
  • AI之Sora:Sora(文本指令生成视频的里程碑模型)的简介(能力/安全性/技术细节)、使用方法、案例应用之详细攻略
  • IListManger feeds流
  • 视频推拉流EasyDSS视频直播点播平台授权出现激活码无效并报错400是什么原因?
  • 设计模式三:工厂模式
  • 2024.2.15 模拟实现 RabbitMQ —— 消息持久化
  • 【技巧】金融企业在搭建服务器时,选择私有云方案还是全栈专属云?
  • 【大厂AI课学习笔记】【2.2机器学习开发任务实例】(10)模型评测
  • 【C++游戏开发-03】贪吃蛇
  • 如何理解CSS的边框宽度?
  • java 写入写出 zip
  • 问题解决:‘telnet‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
  • 从基础到高级:Linux用户与用户组权限设置详解