ElementUI的Dialog弹窗实现拖拽移动功能
文章目录
- 1. ElementUI简介
- 2. 弹窗基本使用
- 3. 实现拖拽移动功能
- 4. 拓展与分析

🎉欢迎来到Java学习路线专栏~ElementUI的Dialog弹窗实现拖拽移动功能
- ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
- ✨博客主页:IT·陈寒的博客
- 🎈该系列文章专栏:Java学习路线
- 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
- 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
- 📜 欢迎大家关注! ❤️
在Web应用中,弹窗是常见的交互组件之一,ElementUI 是 Vue.js 非常流行的 UI 框架之一,提供了丰富的组件库,其中的 Dialog 弹窗组件功能强大。但是,在某些场景下,我们可能需要自定义一些交互行为,比如实现 Dialog 弹窗的拖拽移动功能。本文将介绍如何在 ElementUI 的 Dialog 弹窗中实现拖拽移动的功能,并通过适当的代码插入、详细的步骤展开说明,同时进行相关的拓展和分析。
1. ElementUI简介
ElementUI 是饿了么前端团队基于 Vue.js 开发的一套开源的 UI 组件库,包含了丰富的组件,适用于快速构建美观的Web界面。其中,Dialog 组件是常用的弹窗组件,提供了诸如打开、关闭、拖拽等功能。
2. 弹窗基本使用
首先,我们需要确保项目中已经引入了 ElementUI。然后,我们可以使用 Dialog 组件来创建一个基本的弹窗:
<template><div><el-button @click="openDialog">打开弹窗</el-button><el-dialog :visible.sync="dialogVisible" title="我的弹窗"><p>这是一个基本的弹窗</p></el-dialog></div>
</template><script>
import { ElButton, ElDialog } from 'element-plus';export default {components: {ElButton,ElDialog,},data() {return {dialogVisible: false,};},methods: {openDialog() {this.dialogVisible = true;},},
};
</script>
上述代码中,我们通过 el-button
组件触发打开弹窗的事件,而弹窗则由 el-dialog
组件实现。现在,我们需要在这个基础上添加拖拽移动的功能。
3. 实现拖拽移动功能
为了实现 Dialog 弹窗的拖拽移动功能,我们可以利用原生的 DOM 事件来监听鼠标的按下、移动和释放动作,从而计算弹窗的位置。下面是具体的实现:
<template><div><el-button @click="openDialog">打开弹窗</el-button><el-dialog:visible.sync="dialogVisible"title="我的弹窗":top="dialogTop":left="dialogLeft"@visible-change="handleVisibleChange"ref="dialog"><p>这是一个可以拖拽移动的弹窗</p></el-dialog></div>
</template><script>
import { ElButton, ElDialog } from 'element-plus';export default {components: {ElButton,ElDialog,},data() {return {dialogVisible: false,dialogTop: '50px',dialogLeft: '50px',dragging: false,mouseX: 0,mouseY: 0,};},methods: {openDialog() {this.dialogVisible = true;},handleVisibleChange(visible) {if (visible) {// 弹窗显示时,监听鼠标事件this.$nextTick(() => {this.bindDragEvent();});}},bindDragEvent() {const dialog = this.$refs.dialog.$el.querySelector('.el-dialog');dialog.style.position = 'absolute';dialog.style.cursor = 'move';dialog.addEventListener('mousedown', this.handleMouseDown);document.addEventListener('mousemove', this.handleMouseMove);document.addEventListener('mouseup', this.handleMouseUp);},handleMouseDown(event) {this.dragging = true;this.mouseX = event.clientX;this.mouseY = event.clientY;},handleMouseMove(event) {if (this.dragging) {const deltaX = event.clientX - this.mouseX;const deltaY = event.clientY - this.mouseY;this.dialogTop = `${parseInt(this.dialogTop) + deltaY}px`;this.dialogLeft = `${parseInt(this.dialogLeft) + deltaX}px`;this.mouseX = event.clientX;this.mouseY = event.clientY;}},handleMouseUp() {this.dragging = false;},},
};
</script>
在上述代码中,我们通过监听 mousedown
、mousemove
和 mouseup
事件,实现了拖拽移动的效果。具体步骤如下:
- 当用户点击鼠标按下时,记录下当前鼠标位置和弹窗的初始位置。
- 随后,通过监听鼠标的移动事件,计算鼠标移动的距离,并实时更新弹窗的位置。
- 当鼠标释放时,停止拖拽。
4. 拓展与分析
拖拽移动的实现是一种常见的前端交互行为,它可以提高用户体验,使得弹窗的位置更加灵活。在实际项目中,我们可能还会遇到一些需求,比如限制弹窗的拖拽范围、响应式设计时的适配等。这时候,我们可以根据具体的情况对拖拽功能进行进一步的拓展。
总体而言,通过原生的 DOM 事件和 ElementUI 的组件特性,我们能够相对轻松地实现 Dialog 弹窗的拖拽移动功能。这种能够自由操作弹窗位置的交互方式,使得用户在使用系统时更加得心应手。
在实际开发中,为了提高代码的复用性,我们还可以将拖拽功能封装成一个独立的组件,以便在多个地方复用。这样一来,无论是 Dialog 弹窗还是其他可拖拽的元素,都可以轻松地添加拖拽功能,提高了代码的可维护性。
通过这个例子,我们不仅实现了 ElementUI Dialog 弹窗的拖拽移动功能,还对拖拽的基本原理进行了一定的解析。希望读者在实际项目中能够灵活运用这一技术,提升用户体验,创造更加友好的界面。
🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:
- 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
- 【Java学习路线】2023年完整版Java学习路线图
- 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
- 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
- 【数据结构学习】从零起步:学习数据结构的完整路径
相关文章:

ElementUI的Dialog弹窗实现拖拽移动功能
文章目录 1. ElementUI简介2. 弹窗基本使用3. 实现拖拽移动功能4. 拓展与分析 🎉欢迎来到Java学习路线专栏~ElementUI的Dialog弹窗实现拖拽移动功能 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏&a…...

生成式AI模型量化简明教程
在不断发展的人工智能领域,生成式AI无疑已成为创新的基石。 这些先进的模型,无论是用于创作艺术、生成文本还是增强医学成像,都以产生非常逼真和创造性的输出而闻名。 然而,生成式AI的力量是有代价的—模型大小和计算要求。 随着生…...

机器人制作开源方案 | 智能快递付件机器人
一、作品简介 作者:贺沅、聂开发、王兴文、石宇航、盛余庆 单位:黑龙江科技大学 指导老师:邵文冕、苑鹏涛 1. 项目背景 受新冠疫情的影响,大学校园内都采取封闭式管理来降低传染的风险,导致学生不能外出,…...

PostgreSQL技术大讲堂 - 第34讲:调优工具pgBagder部署
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第34讲&#…...
《Python日志新宠——Loguru,轻松记录,笑对Bug!》
嘿,程序媛和程序猿们!👩💻👨💻 你们是不是也曾为日志处理这个“小事”而头疼?别着急,今天我给你们介绍一个简直比拥抱泰迪熊还要温暖的Python库——Loguru!这货不仅强…...

NET8 ORM 使用AOT SqlSugar
.NET AOT8 基本上能够免强使用了, SqlSugar ORM也支持了CRUD 能在AOT下运行了 Nuget安装 SqlSugarCore 具体代码 StaticConfig.EnableAot true;//启用AOT 程序启动执行一次就好了//用SqlSugarClient每次都new,不要用单例模式 var db new SqlSugarClient(new ConnectionC…...

CCRC认证是什么?
什么是CCRC认证? 信息安全服务资质,是信息安全服务机构提供安全服务的一种资格,包括法律地位、资源状况、管理水平、技术能力等方面的要求。 信息安全服务资质(CCRC)是依据国家法律法规、国家标准、行业标准和技术规范…...
linux内核面试题(2)
整理了一些网上的linux驱动岗位相关面试题,如果错误,欢迎指正。 工作队列是运行在进程上下文,还是中断上下文?它的回调函数是否允许睡眠? 工作队列是运行在进程上下文的。工作队列的回调函数是允许睡眠的,…...
YOLOV5----修改损失函数-ShuffleAttention
主要修改yolo.py、yolov5s.yaml及添加ShuffleAttention.py 一、ShuffleAttention.py import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def...

Kafka(四)消费者消费消息
文章目录 如何确保不重复消费消息?消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…...

Python uiautomation获取微信内容!聊天记录、聊天列表、全都可获取
Python uiautomation 是一个用于自动化 GUI 测试和操作的库,它可以模拟用户操作来执行各种任务。 通过这个库,可以使用Python脚本模拟人工点击,人工操作界面。本文使用 Python uiautomation 进行微信电脑版的操作。 以下是本次实验的版本号。…...
Java通过Lettuce访问Redis主从,哨兵,集群
操作 首先需要maven导入依赖 <dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.3.0.RELEASE</version> </dependency> 测试连接 public class LettuceDemo {public static voi…...
嵌入式数据库Sqlite
本文主要是介绍如何再Ubuntu下使用sqlite数据库,并且嵌入式QT环境下使用C语言来构建一个sqlite数据库,使用sqlite browser进行数据库的可视化。 1、安装sqlite 在ubuntu系统中的安装需要先下载一个安装包,SQLite Download Page 安装命令&a…...

计算机网络:网络层ARP协议
在实现IP通信时使用了两个地址:IP地址(网络层地址)和MAC地址(数据链路层地址) 问题:已知一个机器(主机或路由器)的IP地址,如何找到相应的MAC地址? 为了解决…...

集成环信IM时常见问题及解决——包括消息、群组、推送
一、消息 环信是不支持空会话的,在插入一个会话,一定要给这个会话再插入一条消息; 发送透传消息也就是cmd消息时,value的em_开头的字段为环信内部消息字段,如果使用会出现收不到消息回调的情况; 如果发送…...

Selenium自动化测试框架
一.Selenium概述 1.1 什么是框架? 框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的 结构用于去解决或者处理复杂的问题。 框架是整个或部分系统的可重用设计,表现为一组抽象构件及…...

C#实现观察者模式
观察者模式是一种软件设计模式,当一个对象的状态发生变化时,其所有依赖者都会自动得到通知。 观察者模式也被称为“发布-订阅”模式,它定义了对象之间的一对多的依赖性,当一个对象状态改变时,所有依赖于它的对象都会得…...
什么是持续部署
管理软件开发和部署有 3 种常见的方法:持续集成、持续交付,然后是持续部署。尽管它们经常被混淆,但它们是明显不同的。 正如您将在本文后面看到的,它们相互融合,并补充彼此的风格。但这篇文章并不是关于他们三个。今天…...

【Python】Loguru模块更简洁的日志记录库
Loguru: 更优雅的日志记录解决方案! loguru 是一个Python 简易且强大的第三方日志记录库,该库旨在通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python 日志记录的痛苦。 使用自带自带的 logging 模块的话,则需要…...

智慧环保:科技驱动下的环境保护新篇章
智慧环保:科技驱动下的环境保护新篇章 环境保护已经成为当今社会的重要议题,而科技的飞速发展为我们开启了智慧环保的新篇章。在这篇文章中,我们将介绍智慧环保所带来的机会和创新,以及科技在环境保护中的重要作用。 智慧环保的理…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...