热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

element弹窗设置拖拽范围

思路:(1)首先通过拖拽物体,找到拖拽过程中进行变更的dom的属性值。(2)获取到当前界面的总高度和总宽度。(3)获取到需要进行拖拽的物体的高度和宽度,注意,拖拽物体的高度和宽度最

思路:

(1)首先通过拖拽物体,找到拖拽过程中进行变更的 dom 的属性值。

(2)获取到当前界面的总高度和总宽度。

(3)获取到需要进行拖拽的物体的高度和宽度,注意,拖拽物体的高度和宽度最好是具体数值而不是百分比,否则在处理四个角的时候会出现错误。

(4)获取物体拖拽是的运动坐标,上下(offsetTop)、左右(offsetLeft)。 注意,是拖拽物体的属性,不要找错对象

(5)通过测试得知 计算时以拖拽物体的 左边界 和 上边界 为准。

(6)判断物体移动到最右边:offsetLeft  > (当前界面的总宽度 - 物体的宽度)。

(7)判断物体移动到最左边:offsetLeft 为 0  。

(8)判断物体移动到最下边:offsetTop > (当前界面的总高度 - 物体的高度) 。

(9)判断物体移动到最上边:offsetTop 为 0  。

(10)拖拽过程中各种属性的获取方法是通过监听鼠标移动事件实现的。

具体操作如下:


1、新建文件

dialog
:visible.sync="dialogVisible"
:closeOnClickModal
="false"
class
="NewDialog"
v
-dialog-drag
title
="弹窗拖拽"
>

2、绑定鼠标(按下,松开)监听事件

// 进入界面时添加鼠标点击和松开的监听事件
mounted() {
window.addEventListener(
"mousedown", this.mouseDown);
window.addEventListener(
"mouseup", this.mouseUp);
},

3、编辑鼠标事件

// 鼠标监听事件
// 鼠标长按的时候添加 鼠标移动监听事件
mouseDown() {
window.addEventListener(
"mousemove", this.mouseMove);
},
//鼠标松开的时候删除鼠标移动监听事件
mouseUp() {
window.removeEventListener(
"mousemove", this.mouseMove);
},
// 鼠标移动判断当前弹窗位置,限制住弹窗移动区域
mouseMove() {
// RelaHeight : 界面总高度 - 物体高度(以上边界为准)
// RelaWidth : 界面总宽度 - 物体宽度(以左边界为准)
// MoveTop : 物体上下移动的坐标变化
// MoveLeft : 物体左右移动的坐标变化
// DomSty : 需要修改的dom
let RelaHeight =
document.getElementById(
"app").offsetHeight -
document.getElementsByClassName(
"el-dialog")[0].offsetHeight,
RelaWidth
=
document.getElementById(
"app").offsetWidth -
document.getElementsByClassName(
"el-dialog")[0].offsetWidth,
MoveTop
= document.getElementsByClassName("el-dialog")[0].offsetTop,
MoveLeft
= document.getElementsByClassName("el-dialog")[0].offsetLeft,
DomSty
= document.getElementsByClassName("el-dialog")[0].style;
this.$VerdictDrag(RelaHeight, RelaWidth, MoveLeft, MoveTop, DomSty);
},

 


4、新建  verdictDrag.js 文件

src - > utils -> verdictDrag.js

const DragVerdict = {
// relaHeight:总高度 - 物体高度(以上边界为准)
// relaWidth:总宽度 - 物体宽度(以左边界为准)
// Left:物体左右移动的坐标
// Top:物体上下移动的坐标
// ChangeSty:需要修改的dom
DragVerdict(relaHeight, relaWidth, Left, Top, ChangeSty) {
if (Left > relaWidth) {
ChangeSty.left
= relaWidth + "px";
}
// 最左边
if (Left <0) {
ChangeSty.left
= 0;
}
// 最上边
if (Top <0) {
ChangeSty.top
= 0;
}
// 最下边
if (Top > relaHeight) {
ChangeSty.top
= relaHeight + "px";
}
return ChangeSty;
},
};
export
default DragVerdict;
5、导入到 utils -> index.js

src -> utils 中新建 index.js文件,将 verdictDrag.js 导入进去

 

 

 然后在main.js 中将 utils注册一下,这里可以看这篇文章 定义全局方法,然后就全局可以使用 VerdictDrag()。


6、移除鼠标监听事件

// 离开界面的时候删除鼠标监听事件
destroyed() {
window.removeEventListener(
"mousedown", this.mouseDown);
window.removeEventListener(
"mouseup", this.mouseUp);
},

 

新手理解,若有误,请各位大佬指点,Thanks♪(・ω・)ノ



推荐阅读
  • 探索弱监督开放域问答中的潜在检索机制
    本文探讨了在弱监督环境下,开放域问答系统中潜在检索技术的应用。通过引入反隐式任务预训练方法,研究展示了如何仅依赖问题答案对进行端到端的联合学习,而无需传统的信息检索系统。实验结果表明,在某些数据集上,这种新方法显著优于传统方法。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本文详细介绍了浏览器的同源策略及其重要性,并探讨了多种实现跨域访问的方法。同源策略是浏览器的一项核心安全机制,确保不同源的客户端脚本无法在未经授权的情况下读取或修改其他来源的资源。例如,a.com下的JavaScript代码通过AJAX请求获取b.com的数据将被阻止。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文介绍了在Angular中,如何有效地监听由ngFor指令生成的DOM元素的事件,并提供了具体的实现方法和示例代码。 ... [详细]
  • 基于Node.js、Express、MongoDB和Socket.io的实时聊天应用开发
    本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • 本文介绍如何从JSON格式的文件中提取数据并将其分配给Bash脚本中的变量。我们将探讨具体的命令和工具,帮助你高效地完成这一任务。 ... [详细]
author-avatar
星宿1970_219
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有