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



推荐阅读
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • jQuery如何判断一个元素是否被点击?
    本文介绍了使用jQuery判断一个元素是否被点击的方法,并通过示例进行了具体说明。注意要指定父级,否则会执行多次。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
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社区 版权所有