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

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>

在上述代码中,我们通过监听 mousedownmousemovemouseup 事件,实现了拖拽移动的效果。具体步骤如下:

  • 当用户点击鼠标按下时,记录下当前鼠标位置和弹窗的初始位置。
  • 随后,通过监听鼠标的移动事件,计算鼠标移动的距离,并实时更新弹窗的位置。
  • 当鼠标释放时,停止拖拽。

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. 拓展与分析 &#x1f389;欢迎来到Java学习路线专栏~ElementUI的Dialog弹窗实现拖拽移动功能 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&a…...

生成式AI模型量化简明教程

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

机器人制作开源方案 | 智能快递付件机器人

一、作品简介 作者&#xff1a;贺沅、聂开发、王兴文、石宇航、盛余庆 单位&#xff1a;黑龙江科技大学 指导老师&#xff1a;邵文冕、苑鹏涛 1. 项目背景 受新冠疫情的影响&#xff0c;大学校园内都采取封闭式管理来降低传染的风险&#xff0c;导致学生不能外出&#xff0c…...

PostgreSQL技术大讲堂 - 第34讲:调优工具pgBagder部署

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第34讲&#…...

《Python日志新宠——Loguru,轻松记录,笑对Bug!》

嘿&#xff0c;程序媛和程序猿们&#xff01;&#x1f469;‍&#x1f4bb;&#x1f468;‍&#x1f4bb; 你们是不是也曾为日志处理这个“小事”而头疼&#xff1f;别着急&#xff0c;今天我给你们介绍一个简直比拥抱泰迪熊还要温暖的Python库——Loguru&#xff01;这货不仅强…...

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认证&#xff1f; 信息安全服务资质&#xff0c;是信息安全服务机构提供安全服务的一种资格&#xff0c;包括法律地位、资源状况、管理水平、技术能力等方面的要求。 信息安全服务资质&#xff08;CCRC&#xff09;是依据国家法律法规、国家标准、行业标准和技术规范…...

linux内核面试题(2)

整理了一些网上的linux驱动岗位相关面试题&#xff0c;如果错误&#xff0c;欢迎指正。 工作队列是运行在进程上下文&#xff0c;还是中断上下文&#xff1f;它的回调函数是否允许睡眠&#xff1f; 工作队列是运行在进程上下文的。工作队列的回调函数是允许睡眠的&#xff0c;…...

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(四)消费者消费消息

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

Python uiautomation获取微信内容!聊天记录、聊天列表、全都可获取

Python uiautomation 是一个用于自动化 GUI 测试和操作的库&#xff0c;它可以模拟用户操作来执行各种任务。 通过这个库&#xff0c;可以使用Python脚本模拟人工点击&#xff0c;人工操作界面。本文使用 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数据库&#xff0c;并且嵌入式QT环境下使用C语言来构建一个sqlite数据库&#xff0c;使用sqlite browser进行数据库的可视化。 1、安装sqlite 在ubuntu系统中的安装需要先下载一个安装包&#xff0c;SQLite Download Page 安装命令&a…...

计算机网络:网络层ARP协议

在实现IP通信时使用了两个地址&#xff1a;IP地址&#xff08;网络层地址&#xff09;和MAC地址&#xff08;数据链路层地址&#xff09; 问题&#xff1a;已知一个机器&#xff08;主机或路由器&#xff09;的IP地址&#xff0c;如何找到相应的MAC地址&#xff1f; 为了解决…...

集成环信IM时常见问题及解决——包括消息、群组、推送

一、消息 环信是不支持空会话的&#xff0c;在插入一个会话&#xff0c;一定要给这个会话再插入一条消息&#xff1b; 发送透传消息也就是cmd消息时&#xff0c;value的em_开头的字段为环信内部消息字段&#xff0c;如果使用会出现收不到消息回调的情况&#xff1b; 如果发送…...

Selenium自动化测试框架

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

C#实现观察者模式

观察者模式是一种软件设计模式&#xff0c;当一个对象的状态发生变化时&#xff0c;其所有依赖者都会自动得到通知。 观察者模式也被称为“发布-订阅”模式&#xff0c;它定义了对象之间的一对多的依赖性&#xff0c;当一个对象状态改变时&#xff0c;所有依赖于它的对象都会得…...

什么是持续部署

管理软件开发和部署有 3 种常见的方法&#xff1a;持续集成、持续交付&#xff0c;然后是持续部署。尽管它们经常被混淆&#xff0c;但它们是明显不同的。 正如您将在本文后面看到的&#xff0c;它们相互融合&#xff0c;并补充彼此的风格。但这篇文章并不是关于他们三个。今天…...

【Python】Loguru模块更简洁的日志记录库

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

智慧环保:科技驱动下的环境保护新篇章

智慧环保&#xff1a;科技驱动下的环境保护新篇章 环境保护已经成为当今社会的重要议题&#xff0c;而科技的飞速发展为我们开启了智慧环保的新篇章。在这篇文章中&#xff0c;我们将介绍智慧环保所带来的机会和创新&#xff0c;以及科技在环境保护中的重要作用。 智慧环保的理…...

Noisereduce的PyTorch实现:将降噪算法集成到神经网络中的完整教程

Noisereduce的PyTorch实现&#xff1a;将降噪算法集成到神经网络中的完整教程 【免费下载链接】noisereduce Noise reduction in python using spectral gating (speech, bioacoustics, audio, time-domain signals) 项目地址: https://gitcode.com/gh_mirrors/no/noisereduc…...

Hitboxer:专业级SOCD按键重映射工具,3分钟解决游戏输入冲突

Hitboxer&#xff1a;专业级SOCD按键重映射工具&#xff0c;3分钟解决游戏输入冲突 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 还在为游戏中同时按下相反方向键导致角色卡顿而烦恼吗&#xff1f;Hitboxer是…...

数据架构演进:从数据仓库到湖仓一体与流批融合实战

1. 从“数据仓库”到“数据湖”&#xff1a;一场思维范式的革命干了十几年数据&#xff0c;从最早的Oracle报表&#xff0c;到后来的Hadoop集群&#xff0c;再到现在的云原生数据平台&#xff0c;我亲眼见证了数据架构这十几年的风云变幻。如果说大数据时代的开启是一声惊雷&am…...

如何彻底禁用iOS过热降频:thermalmonitordDisabler终极指南

如何彻底禁用iOS过热降频&#xff1a;thermalmonitordDisabler终极指南 【免费下载链接】thermalmonitordDisabler A tool used to disable iOS daemons. 项目地址: https://gitcode.com/gh_mirrors/th/thermalmonitordDisabler 你是否曾在游戏激战时遭遇iPhone突然卡顿…...

淘金币全自动脚本终极指南:每天节省20分钟,淘宝任务一键完成

淘金币全自动脚本终极指南&#xff1a;每天节省20分钟&#xff0c;淘宝任务一键完成 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本&#xff0c;包含蚂蚁森林收取能量&#xff0c;芭芭农场全任务&#xff0c;解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/t…...

TLV320AIC3254音频编解码器:核心架构、配置实战与典型应用

1. 项目概述&#xff1a;从一颗“全能”音频芯片说起最近在做一个需要高保真音频采集和处理的嵌入式项目&#xff0c;选型时又一次把目光投向了TI的TLV320AIC3254。这颗芯片在音频工程师的圈子里名气不小&#xff0c;常被戏称为“音频界的瑞士军刀”。它本质上是一颗超低功耗的…...

前端转行网络安全 漏洞挖掘赚钱前景分析

前言 最近&#xff0c;一个做运维的朋友跟我说他在学渗透测试。他说&#xff0c;公司请别人做渗透测试的费用是 2千/人天&#xff0c;一共2周。2周 2w 的收入&#xff0c;好香~ 于是&#xff0c;我也对渗透测试产生了兴趣。开始了探索之路~ 什么是渗透测试 渗透测试这名字听…...

RTOS如何通过确定性调度与内存管理增强嵌入式系统安全可靠性

1. 项目概述&#xff1a;为什么我们需要关注实时操作系统的安全与可靠&#xff1f;在嵌入式、工业控制、汽车电子乃至航空航天这些领域里&#xff0c;系统一旦“死机”或“反应迟钝”&#xff0c;后果往往不是重启一下那么简单。轻则产线停摆、设备损坏&#xff0c;重则可能危及…...

Windows 和 Ubuntu 安装 OpenClaw 全攻略

文章目录【开场白】【先说结论&#xff1a;Windows 用户推荐走 WSL2】【Windows 安装&#xff1a;4 步搞定】第 1 步&#xff1a;装 WSL2第 2 步&#xff1a;更新系统第 3 步&#xff1a;一键装 OpenClaw第 4 步&#xff1a;初始化配置【WSL2 必做配置&#xff1a;让 OpenClaw …...

如何在5分钟内为MASA模组全家桶安装中文汉化包:实用指南

如何在5分钟内为MASA模组全家桶安装中文汉化包&#xff1a;实用指南 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Minecraft中MASA模组的英文界面而烦恼吗&#xff1f;MASA模组…...