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 ...
随机推荐
- JS 20道概念虽老但也略有收获的JS基础题,快速做题,高效复习,不妨试试?
壹 ❀ 引 在7月21交接完所有工作后,我也进入了休年假的阶段(没用完的8天年假),看似休息内心的紧张感反而瞬间加倍,到今天为止也面了几家,好消息是工作机会特别特别多,一封简历没投,面试邀请源源不断, ...
- ES6学习 第六章 数值的扩展
前言 本章介绍数值的扩展.新增了很多方法,有些不常用的方法了解即可. 本章原文链接:数值的扩展 进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. ...
- NC15445 wyh的吃鸡
题目链接 题目 题目描述 最近吃鸡游戏非常火,你们wyh学长也在玩这款游戏,这款游戏有一个非常重要的过程,就是要跑到安全区内,否则就会中毒持续消耗血量,我们这个问题简化如下 假设地图为n*n的一个图, ...
- Java并发编程之美
简介 <Java并发编程之美>分为三部分,第一部分为Java 并发编程基础篇,主要讲解Java 并发编程的基础知识.线程有关的知识和并发编程中的其他相关概念,这些知识在高级篇都会有所使用, ...
- 微信小程序引入iconfont实现添加自定义颜色图标
说明 最近搞微信小程序,需要添加一些图标,发现引入iconfont还是有几个步骤,就记录下来分享以下. 以下配置方法支持自定义颜色的. 操作步骤 1. 在iconfont网站挑选自己需要的图标,添加到 ...
- Spring boot内嵌tomcat日志配置
1.说明 最近项目启动有问题需要打印更详细的tomcat日志来做分析,所以用一下. 主要涉及到两类日志配置: access log tomcat log access log捕捉http请求 tomc ...
- 【Map】【List】【数组】获得两个数组的交集
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [1,2,2 ...
- 获取Linux mac地址(centos与ubuntu通用)
ip -a addr| grep link/ether | awk '{print $2}'| head -n 1 获取Linux mac地址(centos与ubuntu通用)
- python字典操作的大O效率
- django中如果不是第一次迁移的时候就配置AUTH_USER_MODEL(用来告知django认证系统识别我们自定义的模型类),那么该如何解决才能让django的认证系统识别且不会报未知错误?
Django认证系统中提供的用户模型类及方法很方便,我们可以使用这个模型类,但是字段有些无法满足项目需求,如还需要保存用户的手机号,需要给模型类添加额外的字段. Django提供了django.con ...