本文实例为大家分享了js实现限定区域范围拖拉拽的具体代码,供大家参考,具体内容如下

需要在范围内拖拉拽,之前看来许多资料觉得都不是特别满足要求,今天自己写了一个,通过监听鼠标按下、鼠标抬起、鼠标移动事件来控制

代码如下

Document

#drag {

background: aqua;

width: 200px;

height: 200px;

position: absolute;

-moz-user-select: none;

-khtml-user-select: none;

user-select: none;

}

#parent {

position: relative;

background: #cde4dc;

height: 80vh;

overflow: hidden;

}

这是一个测试

//自执行函数,需要拖拽的元素需要设置position:absolute,父元素position:relative

//有传父亲节点、若无则默认body为父节点

((parent, children, mouseType) => {

if (!children) return;

let childrenDiv = document.querySelector(children);

childrenDiv.style.position = 'absolute';

let parentDiv = parent

? document.querySelector(parent)

: document.querySelector('body');

let isDown = false;

let x,

y,

l,

t = 0;

childrenDiv.onmousedown = function (e) {

x = e.clientX;

y = e.clientY;

// 获取左部和底部的偏移量

l = childrenDiv.offsetLeft;

t = childrenDiv.offsetTop;

isDown = true;

childrenDiv.style.cursor = mouseType || 'move';

};

// 鼠标移动

window.onmousemove = function (e) {

if (!isDown) {

return;

}

//获取移动后的x和y坐标

let nx = e.clientX;

let ny = e.clientY;

//获取父元素的宽高

let parentWidth = parentDiv.clientWidth;

let parentHeight = parentDiv.clientHeight;

//获取子元素的宽高

let childrenWidth = childrenDiv.clientWidth;

let childrenHight = childrenDiv.clientHeight;

// 计算移动后的左偏移量和顶部偏移量

let nLeft = nx - (x - l);

let nTop = ny - (y - t);

let nRight = nLeft + childrenWidth;

let nBottom = nTop + childrenHight;

nLeft = nLeft <= 0 ? 0 : nLeft; //判断左边距离是否越界

nTop = nTop <= 0 ? 0 : nTop; //判断上边距离是否越界

//判断右边距离大于父元素宽度

if (nRight >= parentWidth) {

nLeft = parentWidth - childrenHight;

}

// 判断下边界是否越界

if (nBottom >= parentHeight) nTop = parentHeight - childrenHight;

childrenDiv.style.left = nLeft + 'px';

childrenDiv.style.top = nTop + 'px';

};

// 鼠标抬起事件

document.onmouseup = function (e) {

//鼠标抬起

isDown = false;

childrenDiv.style.cursor = 'default';

};

})('#parent', '#drag', 'move');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java实现坐标图进行拖拉拽放_js实现限定区域范围拖拉拽效果相关推荐

  1. Java多道程序坐标图_两道java基础题,每天赶任务,多忘了怎么写这种代码。

    题目: 输入一整数,找出大于该整数的最小完美数,找到返回该数,找不到返回0. 完美数:一个数如果恰好除与各位书的和余22,这个数就成为"完美数". 审题 再看一遍,整数应该包括负数 ...

  2. Qt使用QCustomPlot画坐标图教程

    调用QCustomPlot库的方式有两种: 1.直接放入源码cpp和.h,然后直接调用 2.加载QCustomPlot的库,so或者dll project文件中加入printsupport QT += ...

  3. 如何用电脑画平面坐标图_如何在WORD或者EXERL上画坐标图?

    不知你要画什么样的坐标图,下面是怎么样在WORD文档中画坐标曲线图 1.执行"绘图/绘图网格/在屏幕上显示网格(注意数据设置)/确定"命令,使页面上显示绘图网格: 2.用" ...

  4. 如何用电脑画平面坐标图_在Word中如何画坐标图?

    回答: 在Word直接画坐标非常麻烦,毕竟Word并不是画图工具,它的优势在于文字处理方面而不是图像处理方面,要画坐标,Office家族里已经有Visio 组件了,它跟Word.Excel.Power ...

  5. python绘制坐标图_Python绘制主次坐标图

    摘要这一篇文章来讲一下主次坐标的绘制.也是最近在一次绘图中用到了,在这里记录一下方便之后自己的查找.顺便在这里说一下最近自己在做什么吧,也是好久没有更新了. 文章目录(Table of Content ...

  6. python画平行坐标图_Matplotlib中的平行坐标图

    使用传统的绘图类型可以相对直观地查看二维和三维数据.即使是四维数据,我们也经常能找到显示数据的方法.不过,4维以上的维度越来越难以显示.幸运的是,parallel coordinates plots提 ...

  7. 文件可视化编辑_高维数据可视化必备图形平行坐标图

    作者:科研猫 | 小飞鼠 责编:科研猫 | 依米 如果我们想比较某个数值在不同分组之间的变化差异.或者随着时间序列的变化趋势,往往会用到折线图.折线图是在我们的科研绘图当中最为常用的图形之一. 正如在 ...

  8. java 蓝桥杯算法训练 瓷砖铺放(题解)

    试题 算法训练 瓷砖铺放 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限 ...

  9. matlab根据数据生成实时动画,Matlab 坐标图动画,动态显示数据

    数据采集或者数据回放时,用matlab的plot画图的话一般都是静态的,一下画完了就不动了.但是有些时候,比如实时的数据采集然后通过串口或pci在matlab中画出数据的变化图并同步动态显示,以及在一 ...

最新文章

  1. 20162325 金立清 S2 W8 C17
  2. Tengine编译安装config项目清单
  3. vue 插入dom_vue内部复用问题以及虚拟dom的更新
  4. 第八周实践项目8 稀疏矩阵的三元组表示的实现及应用
  5. php上传文件到七牛云
  6. 我想做一个课程表系统利用PHP+MYSQL+HTML实现课表的展示,但是不知道如何实现
  7. .Net高级技术——对象序列化
  8. linux h5 动画软件下载,技术|7款绚丽的jQuery/HTML5动画及源码
  9. 时间日期大小比较判断,时间戳/时间 - 转换
  10. 安卓9 webview打开指定url报错或者空白
  11. 李宏毅:1天搞懂深度学习,我总结了 300 页 PPT(附思维导图PPT)
  12. Python将word转化为txt文本
  13. 2022深圳杯C题思路解析
  14. 视频黑屏检测,时长检测 blackdetect
  15. unity中实现火焰的效果
  16. adb connect 连接机顶盒显示:由于目标计算机积极拒绝,无法连接10061
  17. pycharm 用鼠标滑轮控制代码放大缩小的设置
  18. react具名插槽与作用域插槽
  19. jwplayer html插件,jw player(网页媒体播放器插件) v2017 最新版
  20. php文件包含漏洞利用

热门文章

  1. 转使用jQuery Ajax的内存回收
  2. C# 繁体,简体 互转
  3. 未捕获的异常 'NSInternalInconsistencyException'
  4. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件...
  5. jmeter模拟http请求/发送gzip数据
  6. jsencrypt加密同一值返回不同密文_密码学原语如何应用?解析密文同态性的妙用...
  7. mybatis新增返回主键值
  8. 股上涨和下跌天数比_面对下跌,如何信心十足地逢低买入?
  9. not enough arguments for format string
  10. Torque2D MIT 实战记录: 塔防进度(1)