vue element 实现弹窗可拖拽

可视化elementUI一键生成代码,拖拽自动布局 一个不错的elementUI代码生成器,,可视化拖拽自动布局,一键生成代码,一键导出代码,网页设计的低代码平台 阅读详情

1.安装

npm install vuedraggable --save

2.在公共组件中新建个js文件,搭配vue自定义指令来实现拖拽的效果
directive.js文件

import Vue from 'vue'

// v-dialogDrag: 弹窗拖拽
Vue.directive('dialogDrag', {
  bind(el, binding, vnode, oldVnode) {
    const dialogHeaderEl = el.querySelector('.el-dialog__header')
    const dragDom = el.querySelector('.el-dialog')
    dialogHeaderEl.style.cursor = 'move'

    // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
    const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)

    dialogHeaderEl.onmousedown = (e) => {
      // 鼠标按下,计算当前元素距离可视区的距离
      const disX = e.clientX - dialogHeaderEl.offsetLeft
      const disY = e.clientY - dialogHeaderEl.offsetTop

      // 获取到的值带px 正则匹配替换
      let styL, styT

      // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
      if (sty.left.includes('%')) {
        styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
        styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
      } else {
        styL = +sty.left.replace(/\px/g, '')
        styT = +sty.top.replace(/\px/g, '')
      }

      document.onmousemove = function(e) {
        // 通过事件委托,计算移动的距离
        const l = e.clientX - disX
        const t = e.clientY - disY

        // 移动当前元素
        dragDom.style.left = `${l + styL}px`
        dragDom.style.top = `${t + styT}px`

        // 将此时的位置传出去
        // binding.value({x:e.pageX,y:e.pageY})
      }

      document.onmouseup = function(e) {
        document.onmousemove = null
        document.onmouseup = null
      }
    }
  }
})

// v-dialogDragWidth: 弹窗宽度拖大 拖小
Vue.directive('dialogDragWidth', {
  bind(el, binding, vnode, oldVnode) {
    const dragDom = binding.value.$el.querySelector('.el-dialog')

    el.onmousedown = (e) => {
      // 鼠标按下,计算当前元素距离可视区的距离
      const disX = e.clientX - el.offsetLeft

      document.onmousemove = function(e) {
        e.preventDefault() // 移动时禁用默认事件

        // 通过事件委托,计算移动的距离
        const l = e.clientX - disX
        dragDom.style.width = `${l}px`
      }

      document.onmouseup = function(e) {
        document.onmousemove = null
        document.onmouseup = null
      }
    }
  }
})

3.main.js引入

import '@/components/directive.js' // 拖拽弹窗,在需要用到拖拽功能的弹窗标签上加v-dialogDrag

4.在需要用到拖拽功能的弹窗标签上加v-dialogDrag

<template>
  <el-dialog
    v-dialogDrag
    :visible.sync="dialogVisible"
    width="700px"
    title="弹窗拖拽"
  >
  </el-dialog>
</template>
基于vue和element-ui实现的表单设计器 通过拖拽方式快速生成一个表单页面 基于vue和element-ui实现的表单设计器。通过拖拽方式快速生成一个表单页面,表单可以导出json格式,也可以将其他人绘制的表单通过json导入方式进行还原。针对选择性控件(radio,select,checkbox)提供选择后触发调用,支持表达式。对选择性控件支持数据联动功能,通过此功能可以做多级联动。动态表格提供单独的弹框进行填写和编辑。布局方式多样化,提供栅格,表格等多种布局方式。支持表单预览模式,表单内容全部非组件化,全部文本显示。针对选择性控件(radio,select,checkbox)选择后将对应的label进行单独存储,方便展示 立即下载

相关推荐

Vue拖拽组件列表实现动态页面配置功能

主要介绍了Vue拖拽组件列表实现动态页面配置功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

Element-UI技巧分享:自定义拖拽列表的制作方法

Element-UI技巧分享:自定义拖拽列表的制作方法

weixin_43263566的博客 3373

别再瞎猜了!Fluent瞬态计算时间步长到底设多少?一个公式+实战案例搞定

本文详细解析了Fluent瞬态计算中时间步长的设置方法,通过黄金公式和实战案例,帮助工程师准确确定时间步长,避免计算发散和资源浪费。文章还介绍了动态调整策略和典型工程场景的参数优化,提升仿真效率和精度。

weixin_42638178的博客 425

vue3.0 ElementUI Plus的弹窗实现拖拽功能

1.首先创建/utils/dialogDrag.js文件。

weixin_62922636的博客 1764

C#上位机实战:借助NetToPLCSim与西门子S7-1200仿真通信全攻略

本文详细介绍了如何使用C#开发上位机程序,通过NetToPLCSim与西门子S7-1200进行仿真通信的全过程。从环境准备、PLC仿真环境搭建、网络配置到C#代码实现,提供了完整的实战指南和常见问题解决方案,帮助开发者快速掌握工业自动化通信技术。

weixin_30596343的博客 440

SPD5 集线器协议内容解析

​ 若不同SPD5 Hub后面的本地侧设备同时发送请求,则是22和23、24的混合过程,先通过LID裁决,再通过HID裁决,这里的LID是本地设备的,若LID一致,则看HID,由于SPD5 Hub的本地侧设备HID均为111,因此实际上是比较SPD5 Hub的HID,这个过程在前文提到,SPD5 Hub会转换HID。​ 若MR27[4]=1且MR27[3:0]=1,如果MR51[3:0]=1时,发送IBI,并且MR48[7]置1,将GETSTATUS CCC的待处理中断位[3:0]更新为0001。

weixin_50591344的博客 3860

vue3 拖拽弹框

vue3 弹框拖拽

u014748857的博客 1096

PCL读取点云数据报错:Failed to find match for field ‘x‘/ ‘y‘/ ‘z‘.

原因:使用matlab生成的pcd文件,点云数据是双精度类型,pcl处理的点云数据是单精度类型。解决方案:使用matlab生成的点云坐标单精度化,然后在生成点云加以存储。

little_white138的博客 866

Vue3实现弹窗拖拽(亲测有效)

取消遮罩层::modal="false"点击弹窗外其它地方,不关闭弹窗::close-on-click-modal="false" 效果:(实际上没有这些灰色块块的,是录制工具的原因)

k912120的博客 3295

护网日志分析基础

简要介绍日志分析,给出日志分析的步骤和思路。要求根据日志中的字符串特征,识别攻击者的攻击工具;根据日志中的行为特征,确定攻击者可能的攻击手段等。总结归纳护网中常见的中间件Tomcat、Apache、Weblogic、Nginx、Apache、IIS、MySQL、SQL Server、Oracle的日志路径和日志配置文件路径等。

m0_59302403的博客 3694

Android开发中StateFlow与LiveData的5个关键区别及实战避坑指南

本文深度解析了Android开发中StateFlow与LiveData的5个核心区别,包括设计哲学、生命周期管理、值更新策略、线程模型及协程生态整合。通过实战代码对比,为开发者在现代MVVM架构下的状态管理选型提供清晰的决策指南和避坑建议,帮助构建更健壮、可测试的应用。

weixin_29012677的博客 402

vue+element实现弹窗拖拽

因为element没有自带弹窗拖拽效果,所以就需要自定义指令去控制 可能写的不好,请多指教 首先新建一个js,作为指令 import Vue from 'vue'; /**** *自定义弹窗拖拽指令 *Autor USER-T * time 2020-05-13 **** */ // v-dialogDrag: 弹窗拖拽 Vue.directive('dialogDrag', { bind(el, binding, vnode, oldVnode) { const dialogHe

qq_35864320的博客 1241

Python爬虫实战教程:如何高效爬取税务局通知通告

税务局发布的通知通告包含政策法规、办税指南、公告信息等,是纳税人、企业合规经营的重要参考。官网发布频率高,手动查看不便,自动爬取并保存,方便信息及时掌握及历史数据归档。本文以合法合规的方式示范,建议实际应用前确认目标网站允许爬取的范围和方式。建议使用pandas进行数据清洗,如去重、空值处理等。对于研究税务政策、进行大数据分析、搭建行业信息平台,爬取税务局通知通告信息尤为关键。公告列表以分页形式展现,包含标题、发布时间和详情页链接。进行政策趋势图、发布频率统计等可视化。爬取公开数据时,务必遵守网站的。

2201_76125261的博客 1781

vue中实现element-ui dialog的弹窗拖拽+水平方向伸缩

/ 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);//如果是头部在此就不做任何动作,以上有绑定dialogHeaderEl.onmousedown = moveDown;// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px。// 鼠标按下,计算当前元素距离可视区的距离。// 通过事件委托,计算移动的距离。//左侧鼠标拖拽位置。//右侧鼠标拖拽位置。//底部鼠标拖拽位置。

m0_46793698的博客 1534

C++软件异常分析概述

本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。

dvlinker的技术专栏 4万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

vue v-dialogDrag自定义指令 + element-ui: 实现弹窗拖拽组件

有一个dialog弹框,弹框的背景并不是全屏的,只在除header,sidebar的地方显示,要求拖拽dialog弹框不能超过背景。 在components/common创建directives.js,具体代码如下: import Vue from 'vue'; // v-dialogDrag: 弹窗拖拽属性 Vue.directive('dialogDrag', { bind(el, ...

weixin_46391323的博客 8654

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

vue中实现element-ui dialog的弹窗拖拽+水平方向伸缩

import Vue from "vue"; // v-dialogDrag: 弹窗拖拽+水平方向伸缩 /* * 使用方法 * 将以下代码复制到一个js文件中,然后在入口文件main.js中import引入即可; * 给elementUI的dialog上加上 v-dialogDrag 指令就可以实现弹窗的全屏和拉伸了。 * 给dialog设置 :close-on-click-mo...

一点一滴 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

vue element-ui实现弹窗拖拽

在使用Element-UI弹窗组件时,可以通过添加拖拽功能来提升用户体验。完成上述步骤后,在Element-UI弹窗组件上将能够拖拽移动。

wgq2020的博客 1313

Vue Element-UI 弹窗拖拽实战:从零实现可拖拽 Dialog 组件(附完整代码)

Vue2 后台弹窗遮挡难拖?本文给出可复制的 v-draggable 自定义指令,实现 Element-UI el-dialog 头部拖拽、视口边界限制与多弹窗独立拖动,含全局注册、完整代码与常见报错排查。调试坐标换算时可借助 TaoToken 模型问答快速理清思路,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。

weixin_35414484的博客 7

vue中实现element-ui dialog的弹窗拖拽+水平方向伸缩+最小化+展开/收缩

【代码】vue中实现element-ui dialog的弹窗拖拽+水平方向伸缩+最小化+展开/收缩。

菜鸡的博客 600

(精华)2020年7月17日 vue element-ui实现弹窗拖拽

export default { bind(el, binding, vnode) { const dialogHeaderEl = el.querySelector('.el-dialog__header') const dragDom = el.querySelector('.el-dialog') dialogHeaderEl.style.cssText += ';cursor:move;' dragDom.style.cssText += ';top:0px;'

愚公智库 56万+

实现在vue中element-ui的el-dialog弹框拖拽及拉伸、双击全屏的两种方法 (一)

实现在vue中element-ui的el-dialog弹框拖拽: 参考:实现在vue中element-ui的el-dialog弹框拖拽 1、在 utils 中新建 directives.js 文件 import Vue from 'vue' /* * 使用方法 * 将以下代码复制到一个directives.js文件中,然后在入口文件main.js中导入:import ‘./utils/directives.js’; * 给elementUI的dialog上加上 v-dialogD...

u012732909的博客 5863

vue element 组件内部实现弹窗拖拽(仅当前组件生效)

环境: vue:2.5.16 element-ui:2.3.4 组件代码: <template> <!-- 使用v-dialog-drag给组件header添加可拖拽指令 --> <el-dialog v-dialog-drag> </el-dialog> </template> <script> export default { directives: { dialogD.

a83370892的博客 402

利用 vue3 给 element-plus 的 el-dialog 增加拖拽功能

前言 代码来自使用 vue3 的自定义指令给 element-plus 的 el-dialog 增加拖拽功能,用的时候发现一些问题,我进行了二次修改。 变化 限制边缘 全屏效果 限制在弹窗的 header 拖动 增加用户体验???? 效果 代码 const bus = require("vue3-eventbus") const dialogDrag = (app) => { app.directive('dialogdrag', { // 渲染完毕 mounted(el) {

zgbhn的博客 3496

vue+element+Sortable实现表格行拖拽功能

vue+element项目实战:vue+element+Sortable实现表格行拖拽功能 1.mpm下载插件 :npm install sortablejs --save 2.页面引入:import Sortable from 'sortablejs' 以上步骤进行完毕,就可利用Sortable实现表格拖拽。 根据我的项目需求,下面是我的写法,请大家参考: 我项目中某个页面需要点击排序,用的是el的dialog弹窗 弹窗内对表格进行排序。 下面请大家参考代码: 3.打开排序的button按钮h

jin_ba_dao的博客 2559

Element UI 弹窗进阶:手把手教你实现自定义全屏与拖拽指令(Vue 实战)

本文详细介绍了如何通过Vue自定义指令扩展Element UI的el-dialog组件,实现弹窗的全屏与拖拽功能。文章从实际需求出发,剖析了技术实现原理,提供了完整的代码示例和优化建议,帮助开发者提升用户体验。特别适合需要增强弹窗交互的Vue项目。

weixin_30553777的博客 143
上一篇: npm使用国内淘宝镜像的方法
下一篇: vue结合esmap进行室内3D地图开发
蜗牛与藤曼
博客等级 码龄9年 1万+粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值