流畅交互体验:实现Vue中el-dialog拖动效果的完美指南

2023-11-07

        在使用elementUI中的Dialog组件时,总有无理的产品提需求,在右上角增加可点击全屏的功能、给我实现弹出框可任意拖拽的功能......这种情况下,组件就不能很好的使用了,那么,只能由我们前端攻城狮进行代码攻克了,接下来就实现其中的可拖拽功能

        话不多说我将用使用自定义指令的方式(适用于多el-dialog实现可拖拽的需求,如B端系统、ERP系统等)

        当然也有使用第三方库的方式进行实现,在这里就不做过多赘述了,推荐使用vuedraggable

        好了,回归正题,接下来看实现过程

1.  创建draggable.js文件

// draggable.js

export default {
  bind(el) {
    let startPosition = { x: 0, y: 0 };
    let dialogPosition = { x: 0, y: 0 };
    let dragging = false;

    const handleMouseDown = (e) => {
      startPosition.x = e.clientX;
      startPosition.y = e.clientY;
      dialogPosition.x = parseInt(el.style.left, 10) || 0;
      dialogPosition.y = parseInt(el.style.top, 10) || 0;

      document.addEventListener('mousemove', handleMouseMove);
      document.addEventListener('mouseup', handleMouseUp);

      dragging = true;

      e.stopPropagation();
      e.preventDefault();
    };

    const handleMouseMove = (e) => {
      if (dragging) {
        const offsetX = e.clientX - startPosition.x;
        const offsetY = e.clientY - startPosition.y;
        el.style.left = `${dialogPosition.x + offsetX}px`;
        el.style.top = `${dialogPosition.y + offsetY}px`;
      }
    };

    const handleMouseUp = () => {
      document.removeEventListener('mousemove', handleMouseMove);
      document.removeEventListener('mouseup', handleMouseUp);

      dragging = false;
    };

    el.addEventListener('mousedown', handleMouseDown);
  },
};

2.  在需要拖拽功能的组件内

<template>
  <div>
    <el-dialog
      title="可拖拽对话框"
      :visible="dialogVisible"
      :close-on-click-modal="false"
      :before-close="handleClose"
      v-draggable
    >
      <span>这是一个可拖拽的对话框。</span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">关闭</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import draggable from './draggable.js';

export default {
  directives: {
    draggable,
  },
  data() {
    return {
      dialogVisible: false,
    };
  },
  methods: {
    handleClose(done) {
      done();
    },
  },
};
</script>

 看效果:

方式总结:

        将新建的draggable.js文件正确的引入组件中,进行自定义指令的注册,也可以将指令进行全局注册,相信可谓同学都会,在这我就不写了。

        上述代码中我仅实现简单直接的拖拽方式,所以 v-draggable 指令没有传递任何参数,如果有同学想要更繁琐的拖拽实现的话可以私信、评论区讨论呦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流畅交互体验:实现Vue中el-dialog拖动效果的完美指南 的相关文章

  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • Eslint errorring 导入没有扩展名的 jsx

    我正在尝试在 es6 中导入 jsx 文件而不需要 jsx 扩展名 import LoginErrorDialog from LoginErrorDialogView Not import LoginErrorDialog from Log
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 在重复内容区域添加

    我有一个菜单组件 简单地说 它接受一个带有一系列选项的道具 并为每个选项在菜单中呈现一个项目 我希望能够根据用例自定义每个菜单项内的标记 因此我在菜单项元素内使用了占位符 你可以在这个中看到一个例子fiddle https jsfiddle
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 引导程序提前输入未填充承诺的响应

    我的引导程序预输入如下
  • Snap.svg - 停止在可悬停元素的子元素上重新触发悬停事件

    对于一个项目 我使用的 SVG 形状由背景多边形和背景多边形上方的一些文本 我已将其转换为路径 组成 我正在使用 Snap svg 为我的形状设置动画 当我将鼠标悬停在多边形上时 形状应该缩放到特定尺寸 包括其中的所有内容 鼠标移开时 形状
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 如何在生产模式下为 Chrome 扩展启用 Vue 开发工具?

    我正在构建一个 chrome 扩展 并使用 vue cli webpack 配置 我希望能够在运行后使用 vue devtoolsnpm 运行构建命令 我尝试添加Vue config devtools true 在 main js 中 或者
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz

随机推荐

  • windows11 - 快速实现局域网内传文件

    一条命令就可以实现局域网内共享传输文件 windows 简单共享目录 打开cmd 先cd进一个要共享的目录 这个步骤可以简化一步到达 参考这个链接 然后执行 python m http server 8010 其他设备 手机或者电脑 用浏览
  • dcmtk源码编译 (windows和 linux)

    说一下我们的项目是Java的dicom影像 但是有些医院的胶片打印机用的国产化的 dcm4che的通信模块不能使用 需要用 dcmtk的 dcmpsprt exe 和 dcmprscu exe的命令行服务 下面跟着我一起开始编译 1 dcm
  • 阿里云ECS服务器 2核4G/2核8G/4核8g配置的区别及如何选择【 可供新手小白参考】

    简介 阿里云服务器2核4G 2核8G 4核8g是企业级服务器中的热门选择 而且阿里云官方也一直在力推这三款配置作为企业级应用的首选 在阿里云的各种活动页面都能够看到这三款配置 基于这几款配置在活动中能见到的机型是计算型sn1ne实例 计算型
  • Linux下虚拟机终端背景颜色更改

    下载安装完虚拟机 发现背景颜色是白色的 总结了更改背景颜色的方法 基于CentOS 7演示 方法 1 进入终端2 选择 编辑 gt 首选项 3 更改主题类型 亮色 白底 暗色 黑底 4 若更改其他更多颜色 进入终端 选择 编辑 gt 配置文
  • 耕地单目标语义分割实践——Pytorch网络过程实现理解

    一 卷积操作 一 普通卷积 Convolution 二 空洞卷积 Atrous Convolution 根据空洞卷积的定义 显然可以意识到空洞卷积可以提取到同一输入的不同尺度下的特征图 具有构建特征金字塔的基础 三 深度可分离卷积 Dept
  • Qt 读取多行文本框中的内容

    本文介绍将plainTextEdit中的多行文本内容按行读取为字符串的方法 QTextDocument doc ui gt plainTextEdit gt document 将plainTextEdit中的内容读取到doc中 int co
  • 【Kubernetes系列】Container(容器)

    文章目录 Container Container Image 容器镜像 镜像名称 更新镜像 镜像拉取策略 默认镜像拉取策略 强制拉去镜像 ImagePullBackOff 使用私有仓库 容器环境 容器信息 集群信息 Runtime Clas
  • pycharm如何安装pythoncard_pycharm的各种设置,配置

    本博客一直在同步更新中 内容包含 pycharm学习技巧 Learning tips PyCharm3 0默认快捷键 翻译的 pycharm常用设置 pycharm环境和路径配置 Pycharm实用拓展功能 pycharm中清除已编译 py
  • 有关数据结构上机实验的问题

    1 收到学弟提醒 http chuantu xyz t6 741 1605524547x 1566660945 png 本实验不允许公开实验代码 2 原专栏设置付费 本意是希望大家不要再看了 但是有同学订阅了 特此表示歉意 考虑不周 3 原
  • Python爬虫怎么挣钱?6个Python爬虫赚钱方式,搞搞副业不是问题

    1 最典型的就是找爬虫外包活儿 网络爬虫最通常的的挣钱方式通过外包网站 做中小规模的爬虫项目 向甲方提供数据抓取 数据结构化 数据清洗等服务 新入行的程序员大多都会先尝试这个方向 直接靠技术手段挣钱 这是我们技术人最擅长的方式 因项目竞价的
  • redis监控命令monitor(监控内容写入文件)

    redis有一个monitor命令 使用该命令可以实时监控redis正在执行的命令 先登录redis集群 redis app 3 2 12 bin redis cli h 192 168 177 122 p 6379 a abcdef c
  • USB数据线串联电阻知识总结

    一 为什么USB的特性阻抗为90欧姆 USB设备具有简单易用 支持热插拔 速度快等特点 很快被广泛应用于个人电脑和移动设备等信息通讯产品 并扩展至摄影器材 数字电视 机顶盒 游戏机等其它相关领域 可以说USB是目前最为成功的I O技术 而且
  • DDOS高防IP的用途

    DDOS高防IP是为了应对互联网的DDOS攻击而产生的一款付费增值产品 那么该怎么使用呢 DDOS高防IP根据不同的业务接入的方法也不同 在开通这款DDOS高防IP时服务商会给到对应的高防IP作为对外IP和业务IP使用 游戏业务就需要将之前
  • 带你看懂CTC算法

    转自 https zhuanlan zhihu com p 161186907 在文本识别模型CRNN中 涉及到了CTC算法的使用 由于算法的原理涉及内容较多 所以特另开一篇文章对其原理进行叙述 自己在学习CTC过程中也是看了诸多资料才大概
  • 【AI面试】损失函数(Loss),定义、考虑因素,和怎么来的

    神经网络学习的方式 就是不断的试错 知道了错误 然后沿着错误的反方向 梯度方向 不断的优化 就能够不断的缩小与真实世界的差异 此时 如何评价正确答案与错误答案 错误的有多么的离谱 就需要一个评价指标 这时候 损失和损失函数就运用而生 开始之
  • 终端软件MobaXterm新建会话与本地虚拟机连接失败原因分析:Network error: connection refused

    一 首先第一步 检查虚拟机与本机的连通性 在本机powershell终端执行ping 虚拟机ip 虚拟机ip的获取实在虚拟机中执行ifconfig 第一个四位数字就是ip地址 二 ping过之后 发现很正常 那就检查ssh ps e gre
  • Java中的基础----序列化与反序列化的作用

    Java提供两种对象持久化的方式 分别序列化和外部序列化 1 序列化 Serialization 在分布式环境下 无论是何种数据 都会以二进制序列的形式在网络上传输 序列化是一种将对象以一连串的字节描述的过程 用于解决在对对象流进行读写操作
  • Unicode 编码表下载

    概述 很多项目都使用了Unicode 编码表 在此 做个笔录 官网 1 第一入口 https home unicode org 2 第二入口 Unicode 14 0 Character Code Charts 3 第三入口 http ww
  • 如何获得ISO测试版软件,苹果发布iOS11.4 beta2公测版 如何申请iOS11公测资格

    在对应开发者版本推送一天之后 苹果今天凌晨又向公测用户推送了 iOS 11 4 和 tvOS 11 4 的第二个测试版系统更新 iOS 11 4 的 beta 版系统主要用来测试隔空播放 2 以及 iCloud 信息等新功能 tvOS 11
  • 流畅交互体验:实现Vue中el-dialog拖动效果的完美指南

    在使用elementUI中的Dialog组件时 总有无理的产品提需求 在右上角增加可点击全屏的功能 给我实现弹出框可任意拖拽的功能 这种情况下 组件就不能很好的使用了 那么 只能由我们前端攻城狮进行代码攻克了 接下来就实现其中的可拖拽功能