vue3自定义拖拽指令

ops/2025/2/14 5:52:15/

自定义拖拽指令: 鼠标位置相对于当前文档的x坐标 - 鼠标位置相对于当前物体的x坐标 就是 物体在文档中的位置


<script setup>
const vMove = {mounted(el) {let x, y;el.addEventListener("mousedown", elMounseDown);function elMounseDown(e) {console.log("pagex:", e.pageX, "pagey:", e.pageY);x = pageOffset(e).x - parseInt(getStyles(this, 'left'));y = pageOffset(e).y - parseInt(getStyles(this, 'top'));const elMouseMove = (e) => {el.style.left = pageOffset(e).x - x + "px";el.style.top = pageOffset(e).y - y + "px";};document.addEventListener("mousemove", elMouseMove);document.addEventListener("mouseup", () => {document.removeEventListener("mousemove", elMouseMove);});}}
};
function pageOffset(e) {//    获取滚动条的距离var sLeft = getScrollOffset().x,sTop = getScrollOffset().y,//      获取文档的偏移距离,有可能不存在为undefineddShiftTop = document.documentElement.clientTop || 0,dShiftLeft = document.documentElement.clientLeft || 0;return {x: e.clientX + sLeft - dShiftLeft,y: e.clientY + sTop - dShiftTop,};
}
function getScrollOffset() {if (window.pageXOffset) {//w3c标准return {x: window.pageXOffset,y: window.pageYOffset,};} else {return {x: document.documentElement.scrollLeft + document.body.scrollLeft,y: document.documentElement.scrollTop + document.body.scrollTop,};}
}
function getStyles(ele, attr) {if (window.getComputedStyle) {if (attr) {return window.getComputedStyle(ele, null)[attr];} else {return window.getComputedStyle(ele, null);}} else if (ele.currentStyle) {if (attr) {ele.currentStyle[attr];} else {ele.currentStyle;}}
}
</script><template><divclass="move-box"v-move></div>
</template><style scoped>
.move-box {position: relative;top: 0;left: 30px;width: 200px;height: 200px;background-color: #646cffaa;
}
</style>

http://www.ppmy.cn/ops/38813.html

相关文章

软件测试从业人员怎么看待测试工作的前途?

调查背景   工信部发布的2023年软件业经济运行情况显示&#xff0c;全年累计完成软件业务收入123258亿元&#xff0c;同比增长13.4%&#xff0c;增速较上年同期提高2.2个百分点。值得注意的是&#xff0c;亚太地区软件测试市场正在迅速崛起&#xff0c;预计到2026年复合年增长…

Django实验(远程访问+图片显示)

众所周知&#xff0c;Python除了不能生孩子什么都会。Python也是可以做web服务的。 Python做web有一个重点优势是&#xff1a;做一个快速的AI Demo。 第一步&#xff1a;安装一个版本5.0以上django 第二步&#xff1a;构建咱们的Django工程&#xff0c;我取名为BBQ django-adm…

使用gRPC基于Protobuf传输大文件或数据流

文章目录 使用gRPC基于Protobuf传输大文件或数据流1. 背景和技术选择1.1 gRPC的优势1.2 Protocol Buffers的优势 2. 项目配置与环境搭建2.1 安装gRPC和Protocol Buffers2.1.1 安装Cmake2.1.2 设置环境变量2.1.3 安装必要的依赖2.1.4 下载gRPC源码2.1.5 编译gRPC和 [Protocol Bu…

二叉树-堆

树 在数据库中&#xff0c;树是一种数据结构&#xff0c;用于组织和存储数据&#xff0c;使得可以高效地进行插入、删除和查找操作。它通常用于表示层次关系或者有序集合。 基本概念 节点&#xff1a;树结构中的每个元素都称为节点。 根节点&#xff1a;树的最顶端节点。 子…

【漏洞复现】Apahce HTTPd 2.4.49(CVE-2021-41773)路径穿越漏洞

简介&#xff1a; Apache HTTP Server是一个开源、跨平台的Web服务器&#xff0c;它在全球范围内被广泛使用。2021年10月5日&#xff0c;Apache发布更新公告&#xff0c;修复了Apache HTTP Server2.4.49中的一个路径遍历和文件泄露漏洞&#xff08;CVE-2021-41773&#xff09;。…

SparkStructuredStreaming状态编程

spark官网关于spark有状态编程介绍比较少&#xff0c;本文是一篇个人理解关于spark状态编程。 官网关于状态编程代码例子: spark/examples/src/main/scala/org/apache/spark/examples/sql/streaming/StructuredComplexSessionization.scala at v3.5.0 apache/spark (github…

从零手写实现 tomcat-03-基本的 socket 实现

创作缘由 平时使用 tomcat 等 web 服务器不可谓不多&#xff0c;但是一直一知半解。 于是想着自己实现一个简单版本&#xff0c;学习一下 tomcat 的精髓。 系列教程 从零手写实现 apache Tomcat-01-入门介绍 从零手写实现 apache Tomcat-02-web.xml 入门详细介绍 从零手写…

LAMP部署

LAMP 一、LAMP概述 1.1.LAMP平台的构成组件&#xff1a; 二、LAMP部署 2.1.MySQL部署 2.2.PHP部署 2.2.1.部署PHP 2.2.2测试LAMP环境是否可用 三、LAMP架构应用实例 一、LAMP概述 1.1.LAMP平台的构成组件&#xff1a; Linux操作系统&#xff1a;Linux操作系…