vue中elementui组件el-dialog拖拽(已处理边界情况)
全局注册
Vue.directive("elDialogDrag", (el) => {
const header = el.querySelector(".el-dialog__header");
const main = el.querySelector(".el-dialog");
header.style.cursor = "move";
header.onmousedown = (e) => {
// 上次鼠标弹起时X轴的偏移量
let l = +main.style.left.replace(/px/, "");
// 上次鼠标弹起时Y轴的偏移量
let t = +main.style.top.replace(/px/, "");
let x = e.pageX - l;
let y = e.pageY - t;
let markL = 0,
markT = 0,
markR = 0,
markB = 0,
offset = 10; // 偏移量
document.onmousemove = (e) => {
// 处理右边界
if (main.offsetLeft + main.offsetWidth + offset >= el.offsetWidth) {
markR === 0 && (markR = e.pageX - x);
e.pageX - x < markR && (main.style.left = e.pageX - x + "px");
} else if (main.offsetLeft > offset) {
main.style.left = e.pageX - x + "px";
} else {
// 处理左边界
markL === 0 && (markL = e.pageX - x);
e.pageX - x > markL && (main.style.left = e.pageX - x + "px");
}
// 处理下边界
if (main.offsetTop + main.offsetHeight + offset >= el.offsetHeight) {
markB === 0 && (markB = e.pageY - y);
e.pageY - y < markB && (main.style.top = e.pageY - y + "px");
} else if (main.offsetTop > offset) {
main.style.top = e.pageY - y + "px";
} else {
// 处理上边界
markT === 0 && (markT = e.pageY - y);
e.pageY - y > markT && (main.style.top = e.pageY - y + "px");
}
};
document.onmouseup = () => {
document.onmousemove = null;
document.onmouseup = null;
};
};
});
局部注册
directives: {
elDialogDrag: {
bind(el) {
const header = el.querySelector(".el-dialog__header");
const main = el.querySelector(".el-dialog");
header.style.cursor = "move";
header.onmousedown = (e) => {
// 上次鼠标按下时X轴的偏移量
let l = +main.style.left.replace(/px/, "");
// 上次鼠标按下时Y轴的偏移量
let t = +main.style.top.replace(/px/, "");
let x = e.pageX - l;
let y = e.pageY - t;
let markL = 0,
markT = 0,
markR = 0,
markB = 0,
offset = 10; // 偏移量
document.onmousemove = (e) => {
// 处理右边界
if (main.offsetLeft + main.offsetWidth + offset >= el.offsetWidth) {
markR === 0 && (markR = e.pageX - x);
e.pageX - x < markR && (main.style.left = e.pageX - x + "px");
} else if (main.offsetLeft > offset) {
main.style.left = e.pageX - x + "px";
} else {
// 处理左边界
markL === 0 && (markL = e.pageX - x);
e.pageX - x > markL && (main.style.left = e.pageX - x + "px");
}
// 处理下边界
if (
main.offsetTop + main.offsetHeight + offset >=
el.offsetHeight
) {
markB === 0 && (markB = e.pageY - y);
e.pageY - y < markB && (main.style.top = e.pageY - y + "px");
} else if (main.offsetTop > offset) {
main.style.top = e.pageY - y + "px";
} else {
// 处理上边界
markT === 0 && (markT = e.pageY - y);
e.pageY - y > markT && (main.style.top = e.pageY - y + "px");
}
};
document.onmouseup = () => {
document.onmousemove = null;
document.onmouseup = null;
};
};
},
},
},
引用
在el-dialog中 v-elDialogDrag
vue中elementui组件el-dialog拖拽(已处理边界情况)的更多相关文章
- Vue. 之 Element dialog 拖拽
Vue. 之 Element dialog 拖拽 默认情况下,在使用Element的Dialog模块时,弹出框是不能移动的,且 一旦点击遮罩层区域,弹框就会消失. 解决方案: 1 在 utils 中新 ...
- 实现在vue中element-ui的el-dialog弹框拖拽
参考:实现在vue中element-ui的el-dialog弹框拖拽 1.在 utils 中新建 directives.js 文件 import Vue from 'vue' // v-dialogD ...
- Vue中父组件向子组件传值
Vue中父组件向子组件传值 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- Vue 中的组件
VUE中的组件 一个自定义的标签,vue就会把他看成一个组件,vue可以给这些标签赋予一定意义:一个页面就是一个组件 好处: 1.提高开发效率 2.方便重复使用 3.便于协同开发 4.更容易被管理和维 ...
- Vue 中数据流组件
好久不见呀,这两年写了很多很多东西,也学到很多很多东西,没有时常分享是因为大多都是我独自思考.明年我想出去与更多的大神交流,再修筑自己构建的内容. 有时候我会想:我们遇到的问题,碰到的界限,是别人给的 ...
- vue中自定义组件(插件)
vue中自定义组件(插件) 原创 2017年01月04日 22:46:43 标签: 插件 在vue项目中,可以自定义组件像vue-resource一样使用Vue.use()方法来使用,具体实现方法: ...
- Vue中父子组件执行的先后顺序
Vera Vue中父子组件执行的先后顺序探讨(转载) 前几天,朋友向我提出了一个关于Vue中父子组件执行的先后顺序问题,相信很多朋友在学习的过程中也会遇到这个问题,所以我就在此提出我自己的一些小看 ...
- Vue中父子组件执行的先后顺序探讨
前几天,朋友向我提出了一个关于Vue中父子组件执行的先后顺序问题,相信很多朋友在学习的过程中也会遇到这个问题,所以我就在此提出我自己的一些小看法. 问题如下:请问下图中父子组件执行的先后顺序? 首先, ...
- 简述vue中父子组件是怎样相互传递值的(基础向)
前言 首先,你需要知道vue中父组件和子组件分别指的是什么? 父组件:vue的根实例——用new Vue()构造函数创建的vue实例(实例会有一个挂载点,挂载点里的所有内容可理解为父组件的内容) ...
- 解决vue中element组件样式修改无效
vue中element组件样式修改无效 <style> .detail{ .el-input__inner { height: 48px; } } </style> 直接写st ...
随机推荐
- Ubuntu20.04 PyCharm不能输入中文的解决办法
在2020.3之后的PyCharm, 无法输入中文, 我使用的是ibus, 据网上搜索结果看, fctix也一样有问题. 在网上查到的, 修改环境变量的方式无效. 实际的原因在于JetBrain使用的 ...
- SpringCloud Ribbon负载均衡服务调用实战
介绍 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具. 主要功能是提供客户端的软件负载均衡算法和服务调用.Ribbon客户端组件提供一系列完善 ...
- 使用 Visual Studio 断点调试 DLL
继上文说到使用 IDA 和 WinDbg 调试无 dmp 文件 那么在有源码的情况下可以直接断点调试 DLL,目的是查看 DLL 内部的函数调用 场景: 程序执行到某个 DLL 时突然崩溃,先确定 ...
- 使用 CMake 编写 Windows 静态库
最近有一个多个 .h .cc .cpp 编译成静态库的需求,故记录下过程 静态库不同于动态库,它不需要 main 入口,只要各个源文件与头文件能对应,也就是源文件和头文件引用的头文件能够找到函数的符号 ...
- leetcode - 中序遍历
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 . 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 ...
- virtualapp启动流程源码分析
virtualapp启动流程分析 1. 首先是启动本身,执行Vpp 的attachBaseContext @Override protected void attachBaseContext(Cont ...
- 使用Gulp压缩静态资源
如果希望对在静态页面中引入的相关资源进行压缩(比如:CSS,JavaScript,图片等),可以使用Gulp实现. 当然,还可以使用其他打包工具,比如:Grunt,Webpack等等. Gulp是什么 ...
- django自定义模型管理器Manager及方法
django自定义模型管理器Manager及方法 自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Ma ...
- [C++逆向] 8 数组和指针的寻址
目录 数组在函数中 字符串 数组作为参数 下标寻址和指针寻址 多维数组 存放指针类型数据的数组 指向数组的指针变量 函数指针 数组是相同类型数据的集合,以先行方式连续储存在内冲中 而指针只是一个保存地 ...
- 影刀rpa:关于if单条件切换到多条件时的不便之处
现有需求,只判断一个条件是否满足即可,但随着后续业务开发,这里得if就需要判断多个条件,此时要是想将if单条件改为多条件的话,就得先拉一个if多条件的指令,然后再将if单条件中的语句全部移动到if多条 ...