iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue如何实现可拖拽的dialog弹框
  • 502
分享到

vue如何实现可拖拽的dialog弹框

2023-06-15 01:06:56 502人浏览 八月长安
摘要

这篇文章主要介绍了Vue如何实现可拖拽的dialog弹框,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:element的dialog弹框在项目中挺常用的。但有时候嵌套

这篇文章主要介绍了Vue如何实现可拖拽的dialog弹框,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

具体如下:

vue如何实现可拖拽的dialog弹框

element的dialog弹框在项目中挺常用的。但有时候嵌套的话会遮住,体验不好。拖拽形式的弹框会提高用户体验

借助基于 Sortable.js 的 Vue 拖拽组件vuedraggable

安装

npm install vuedraggable --save

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

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.CSSText += ';cursor:move;'        dragDom.style.cssText += ';top:0px;'         // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);        const sty = (() => {            if (window.document.currentStyle) {                return (dom, attr) => dom.currentStyle[attr];            } else {                return (dom, attr) => getComputedStyle(dom, false)[attr];            }        })()         dialogHeaderEl.onmousedown = (e) => {            // 鼠标按下,计算当前元素距离可视区的距离            const disX = e.clientX - dialogHeaderEl.offsetLeft;            const disY = e.clientY - dialogHeaderEl.offsetTop;             const screenWidth = document.body.clientWidth; // body当前宽度            const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取)             const dragDomWidth = dragDom.offsetWidth; // 对话框宽度            const dragDomheight = dragDom.offsetHeight; // 对话框高度             const minDragDomLeft = dragDom.offsetLeft;            const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;             const minDragDomTop = dragDom.offsetTop;            const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;              // 获取到的值带px 正则匹配替换            let styL = sty(dragDom, 'left');            let styT = sty(dragDom, 'top');             // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px            if (styL.includes('%')) {                styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100);                styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100);            } else {                styL = +styL.replace(/\px/g, '');                styT = +styT.replace(/\px/g, '');            };             document.onmousemove = function (e) {                // 通过事件委托,计算移动的距离                let left = e.clientX - disX;                let top = e.clientY - disY;                 // 边界处理                if (-(left) > minDragDomLeft) {                    left = -(minDragDomLeft);                } else if (left > maxDragDomLeft) {                    left = maxDragDomLeft;                }                 if (-(top) > minDragDomTop) {                    top = -(minDragDomTop);                } else if (top > maxDragDomTop) {                    top = maxDragDomTop;                }                 // 移动当前元素                 dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;            };             document.onmouseup = function (e) {                document.onmousemove = null;                document.onmouseup = null;            };        }    }})

页面中使用 v-dialogDrag 即可实现想要的效果

<el-dialog    v-dialogDrag    :title="dialogTitle"    :visible.sync="aDDDialogVisible"    :before-close="handleClose"    :close-on-click-modal="false"    width="50%">    <div class="add_columns">        <div class="pull-organize">            <div class="bm-title">部门管理</div>            <el-tree                :data="treeData"                lazy:load="loadNode"                accordion                 :props="defaultProps"                :default-expand-all="false">            </el-tree>        </div>        <div class="show-infORMation">            <el-form inline>                <el-form-item label="用户ID">                    <el-input v-model="searchParams.userId" size="mini" ></el-input>                </el-form-item>                <el-form-item label="用户名">                    <el-input v-model="searchParams.userName" size="mini"></el-input>                </el-form-item>                <el-form-item class="btn-item">                    <el-button type="primary" @click="handleQuery" size="mini">查询</el-button>                </el-form-item>                    <el-form-item class="btn-item">                    <el-button type="success" @click="hadnleAddPerson" size="mini">添加人员</el-button>                </el-form-item>            </el-form>            <el-table                :data="tableData"                class="oneTabel"                >                <el-table-column type="selection" width="50"></el-table-column>                <el-table-column prop="id" width="60" label="登录ID"></el-table-column>                <el-table-column prop="userName" label="用户名"></el-table-column>                <el-table-column prop="education" label="部门"></el-table-column>                <el-table-column prop="sex" label="手机"></el-table-column>            </el-table>        </div>    </div></el-dialog>

Vue的优点

Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快等优势,Vue中页面使用的是局部刷新,不用每次跳转页面都要请求所有数据和dom,可以大大提升访问速度和用户体验。

感谢你能够认真阅读完这篇文章,希望小编分享的“vue如何实现可拖拽的dialog弹框”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: vue如何实现可拖拽的dialog弹框

本文链接: https://www.lsjlt.com/news/276672.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue如何实现可拖拽的dialog弹框
    这篇文章主要介绍了vue如何实现可拖拽的dialog弹框,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:element的dialog弹框在项目中挺常用的。但有时候嵌套...
    99+
    2023-06-15
  • vue实现可拖拽的dialog弹框
    本文主要介绍了vue实现可拖拽的dialog弹框,分享给大家,具体如下: element的dialog弹框在项目中挺常用的。但有时候嵌套的话会遮住,体验不好。拖拽形式的弹框会提高用...
    99+
    2024-04-02
  • vue中如何实现弹框dialog
    这篇文章主要为大家展示了“vue中如何实现弹框dialog”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中如何实现弹框dialog”这篇文章吧。效果如下,...
    99+
    2024-04-02
  • vue项目中实现el-dialog组件可拖拽效果
    目录0. 首先上图,看效果1. 实现方法参考资料0. 首先上图,看效果 1. 实现方法 第一步:创建 drag.js文件 实现拖拽源码 export function start...
    99+
    2024-04-02
  • vue实现弹窗拖拽效果
    本文实例为大家分享了vue实现弹窗拖拽效果的具体代码,供大家参考,具体内容如下 前言 实现拖拽其实简单来说就分为三步 一、创建一个js文件 因为本身dialog窗口不具备移动拖拽能力...
    99+
    2024-04-02
  • elementUI中el-dialog如何实现拖拽功能
    本文小编为大家详细介绍“elementUI中el-dialog如何实现拖拽功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“elementUI中el-dialog如何实现拖拽功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-04
  • vue项目中怎么实现el-dialog组件可拖拽效果
    今天小编给大家分享一下vue项目中怎么实现el-dialog组件可拖拽效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。0....
    99+
    2023-06-26
  • vue实现div高度可拖拽
    本文实例为大家分享了vue实现div高度可拖拽的具体代码,供大家参考,具体内容如下 这里有一个现成的demo,可以实现页面div的拖拽功能,但是和我想要的效果不是很一样,所以说后边有...
    99+
    2024-04-02
  • vue如何实现拖拽添加
    这篇文章主要为大家展示了“vue如何实现拖拽添加”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现拖拽添加”这篇文章吧。效果图并没有判断是否重复,没有删除旧数据数据体 <...
    99+
    2023-06-22
  • Vue实现可拖拽组件的方法
    本文为大家分享了Vue实现可拖拽、拖拽组件,供大家参考,具体内容如下 描述: 组件仅封装拖拽功能,内容通过#header、#default、#footer插槽 自定义 效果:&nbs...
    99+
    2024-04-02
  • 原生JS实现可拖拽登录框
    本文分享一个用原生JS实现的可拖拽登录框,效果如下: 实现的代码如下: <!DOCTYPE html> <html> <head> ...
    99+
    2024-04-02
  • js如何实现模态框拖拽
    今天小编给大家分享一下js如何实现模态框拖拽的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果展示和需求分析效果展示需求分析...
    99+
    2023-07-02
  • HTML+CSS+JavaScript实现可拖拽模态框
    前言 模态框是指覆盖在父窗口上的子窗口,但在HTML网页中,并没有父窗口和子窗口的概念。这里是通过可隐藏的遮罩层和一个可隐藏的盒子来实现模态框的效果。 效果演示: 下面开始详细介绍...
    99+
    2024-04-02
  • vue实现可拖拽div大小的方法
    下面看下vue中可拖拽div大小的方法。 可封装为全局方法在项目中所需要地方直接调用(mixins) 方法: 参数: 1.allBox:最外层第div class;2.leftBox...
    99+
    2024-04-02
  • JavaScript如何实现可拖拽的进度条
    这篇文章给大家分享的是有关JavaScript如何实现可拖拽的进度条的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.进度条实现<html><head>  <me...
    99+
    2023-06-15
  • js如何实现模态框的拖拽效果
    今天小编给大家分享一下js如何实现模态框的拖拽效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。分析思路:点击弹出层,模态框...
    99+
    2023-07-02
  • vue中的可拖拽宽度div怎么实现
    这篇文章主要介绍“vue中的可拖拽宽度div怎么实现”,在日常操作中,相信很多人在vue中的可拖拽宽度div怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中的可拖拽宽度div怎么实现”的疑惑有所...
    99+
    2023-06-29
  • vue中的可拖拽宽度div的实现示例
    主要思路 在需要拖拽宽度的区域设置一个div,高度设为 100%,宽度尽量窄一些(也不要太窄,3~6px左右)在此div上绑定当“鼠标按下”时,触发docum...
    99+
    2024-04-02
  • html5如何实现拖拽
    这篇文章主要介绍了html5如何实现拖拽,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。html5实现拖拽的方法:首先新建一个空的HTML5结构;然后在body元素中放置一个d...
    99+
    2023-06-15
  • vue实现移动端可拖拽式icon图标
    本文实例为大家分享了vue实现移动端可拖拽式icon图标的具体代码,供大家参考,具体内容如下 需求描述:在移动端页面悬浮一个可随便拖拽的图标,类似于苹果手机的辅助触控小圆点,并且可随...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作