热门标签 | 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♪(・ω・)ノ



推荐阅读
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 本文总结了优化代码可读性的核心原则与技巧,通过合理的变量命名、函数和对象的结构化组织,以及遵循一致性等方法,帮助开发者编写更易读、维护性更高的代码。 ... [详细]
  • 当 WebLogic 连接的数据源数据库密码发生更改时,需要在域目录的 config 文件夹下的 jdbc 配置文件中更新相应的密码。本文将详细介绍如何安全地修改和验证这些配置文件中的加密密码。 ... [详细]
  • Python技巧:利用Cookie实现自动登录绕过验证码
    本文详细介绍了如何通过Python和Selenium库利用浏览器Cookie实现自动登录,从而绕过验证码验证。文章提供了具体的操作步骤,并附有代码示例,帮助读者理解和实践。 ... [详细]
  • ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 深入探讨Web页面中的锚点交互设计
    本文旨在分享Web前端开发中关于网页锚点效果的实现与优化技巧。随着Web技术的发展,越来越多的企业开始重视前端开发的质量和用户体验,而锚点功能作为提升用户浏览体验的重要手段之一,值得深入研究。 ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 掌握Mosek矩阵运算,轻松应对优化挑战
    本篇文章继续深入探讨Mosek学习笔记系列,特别是矩阵运算部分,这对于优化问题的解决至关重要。通过本文,您将了解到如何高效地使用Mosek进行矩阵初始化、线性代数运算及约束域的设定。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
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社区 版权所有