vue el-dialog实现可拖拉

ops/2024/12/19 17:51:20/

el-dialog实现拖拉,每次点击度居中显示,以下贴出代码具体实现,我是可以正常拖拉并且每次度显示在中间,效果还可以,需要的可以丢上去跑跑

组件部分: 

<el-dialog:visible.sync="dialogVisible":close-on-click-modal="false"custom-class="draggable-dialog"ref="dialog"@open="onDialogOpen"@opened="onDialogOpened"@close="onDialogClose"width="646px"><div slot="title" class="header" @mousedown="startDrag"><span>公式设置</span></div><el-divider></el-divider><div >这里写你的dialog业务代码</div></el-dialog>

定义变量:

函数部分:

startDrag(event) {event.preventDefault();this.dragging = true;this.startX = event.clientX;this.startY = event.clientY;const dialogRef = this.$refs.dialog.$el;if (!dialogRef) {console.error('无法找到对话框引用');return;}console.log('获取打开后的位置dialogRef-->',dialogRef);console.log('获取打开后的位置dialogRef.style.left-->',dialogRef.style.left);console.log('获取打开后的位置dialogRef.style.top-->',dialogRef.style.left);// 获取当前对话框的位置const style = window.getComputedStyle(dialogRef);this.currentX = parseFloat(style.left || '0');this.currentY = parseFloat(style.top || '0');console.log('this.currentX---------->',this.currentX);console.log('this.currentY---------->',this.currentY);document.onmousemove = this.doDrag.bind(this);document.onmouseup = this.stopDrag.bind(this);},doDrag(event) {if (!this.dragging) return;const deltaX = event.clientX - this.startX;const deltaY = event.clientY - this.startY;// 更新当前位置this.currentX += deltaX;this.currentY += deltaY;// 更新起始点this.startX = event.clientX;this.startY = event.clientY;const dialogRef = this.$refs.dialog.$el;if (dialogRef) {dialogRef.style.left = `${this.currentX}px`;dialogRef.style.top = `${this.currentY}px`;event.preventDefault();}},stopDrag() {this.dragging = false;document.onmousemove = null;document.onmouseup = null;},onDialogOpen() {// 对话框即将打开时,重置位置数据this.currentX = 0;this.currentY = 0;},onDialogOpened() {},onDialogClose() {// 对话框关闭时,取消所有事件监听器document.onmousemove = null;document.onmouseup = null;const dialogRef = this.$refs.dialog.$el;dialogRef.style.left= 0;dialogRef.style.top = 0;},

CSS部分:

<style scoped>/**以下是dialog */
.draggable-dialog {position: fixed !important; /* �保对话框是固定定位 */top: 50%;left: 50%;transform: translate(-50%, -50%);transition: all .3s ease;overflow: auto; /* �保对话框内部可以滚动 *//*width: 600px;  �定宽度 *//* height: 900px; /* �定高度 */
}
.header {cursor: move;
}
</style>


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

相关文章

使用VLC 搭建 RTSP 服务器

第一步&#xff1a;打开 VLC &#xff0c;媒体--->流 第二步&#xff1a;添加一个选择本地的文件&#xff0c;然后点击选择"串流" 第三步&#xff1a;确认你选择的文件&#xff0c;然后点击下一个 第四步&#xff1a; 配置 选择的视频文件使用哪种 流输出&#xf…

Git工具

一.Git概述 1.1 Git的应用场景 备份&#xff1a;Git通过仓库管理文件&#xff0c;在Git中存在远程仓库&#xff0c;如果本地文件丢失还可以从远程仓库获取。 代码还原&#xff1a; Git在管理文件过程中会记录日志&#xff0c;方便回退到历史版本。 Git除了可以帮我们保存代…

Python | 虚拟环境01 - 什么是虚拟环境、它的由来

导言 python3真的不是安装了就完事&#xff0c;必须理解虚拟环境是什么才算是初步掌握python环境。 学习python3虚拟环境&#xff0c;建议参考B站教程。这位博主用了6个视频&#xff0c;每一个视频仅仅几分钟。居然把python3的虚拟环境讲明白了。 虚拟环境&#xff08;Virtual…

SEO初学者-SEO基础

SEO 基础SEO 初期设置SEO怎么做如何跟踪 SEO 效果免费的 SEO 工具 如果您希望人们通过 Google 找到您的网站&#xff0c;您需要了解 SEO 的基础知识。这些知识比您想象的要简单。 什么是 SEO&#xff1f; 搜索引擎优化 (SEO) 是增加网站自然搜索流量的过程。在这一过程中&am…

深入探究 Redis 集群:主从复制实现原理

主服务器可以进行读写操作&#xff0c;当发生写操作时自动将写操作同步给从服务器&#xff0c;而从服务器一般是只读&#xff0c;并接受主服务器同步过来写操作命令&#xff0c;然后执行这条命令。 通过再B服务器上执行replicaof <服务器 A 的 IP 地址> <服务器 A 的 …

解锁CSS新维度:预处理器之LessSass

在现代前端开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;是用于控制网页外观的主要技术。然而&#xff0c;随着项目的复杂度增加&#xff0c;传统的CSS编写方式逐渐显现出其局限性&#xff0c;如变量复用、嵌套规则、模块化管理等需求难以满足。为此&#xff0c;出…

【错误收集】tomcat资源访问404

在使用tomcat的时候&#xff0c;tomcat 能够正常访问&#xff0c;index.html也能正常访问。报错界面&#xff1a; 但是只有WebServlet的资源无法访问&#xff0c;原因是&#xff1a;servlet的版本太高。 改正后的maven: <?xml version"1.0" encoding"UTF-…

[ClickHouse 运维系列] 数据 TTL 学习笔记整理

一、clickhouse TTL ClickHouse的MergeTree引擎支持数据生命周期管理&#xff0c;即TTL&#xff08;Time To Live&#xff09;。TTL可以通过设置列字段或整张表的过期时间来实现。列字段的TTL会在时间到期时删除该列数据&#xff0c;而表级别的TTL会删除整张表的数据。如果同…