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

本文实例为大家分享了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');

4f9952310db300081b78b9cbc8e3bd2f.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql + keepalived高可用

1上次说过了mysql的主从配置 tar zxf keepalived-1.2.7.tar.gz cd keepalived-1.2.7 yum install gcc gcc-c yum install kernel-devel -y 2报错 configure: error: Popt libraries is required yum install popt-devel 3继续执行 ./configure --with-kernel-dir/usr/src/kerne…

java+向前进一_Java 线程基础

前言线程并发系列文章&#xff1a;熟练掌握线程原理与使用是程序员进阶的必经之路&#xff0c;网上很多关于Java线程的知识&#xff0c;比如多线程之间变量的可见性、操作的原子性&#xff0c;进而扩展出的Volatile、锁(CAS/Synchronized/Lock)、信号量等知识。有些文章只说笼统…

电子报账系统源码_网上商城系统建设心得,轻松搞定选择困难

当前&#xff0c;我们正处于一个互联网飞速发展的时代&#xff0c;特别是互联网电商的出现&#xff0c;给我们的生活带来了翻天覆地的变化&#xff0c;不出家门便可购买各种商品&#xff0c;不用再到处奔走寻找&#xff0c;通过网络便可快速下单&#xff0c;然后坐等送货上门。…

源码安装httpd

1 tar -xvf apr-1.7.0.tar.gz tar -xvf apr-util-1.6.1.tar.gz tar -xvf httpd-2.2.6.tar.gz 2cd apr-1.7.0 ./configure Make Make install 3cd apr-util-1.6.1 ./configure --with-apr/usr/local/apr 解决rpm -ivh libexpat-devel-2.2.4-alt1.i586.rpm tar -xvf expat-2.2…

python如何运行py程序_如何用Python汇款:Web3.py教程

Python开发人员对于以太坊和区块链库的技术练习。警告&#xff1a;下面的教程包含这些元素&#xff1a;显式加密、点对点金融服务以及可能的违规行为。这些例子仅仅是为了说明Python区块链的强大功能和便捷性。嗨&#xff0c;Pythoners&#xff0c;你们好&#xff01;我真的很喜…

基于域名的apache服务器

1承接上个博客说的&#xff0c;咱们继续扩展 Cd /usr/local/apache2/conf /usr/local/apache2/conf/extra扩展文件 Vi httpd-vhosts.conf <VirtualHost *:80> ServerAdmin 1327629137qq.com DocomentRoot “/data/webapps/www1” ServerName www.wugk1.com <Directory…

MySQL 数据库修改登录密码

MySQL 数据库修改登录密码、、 -------- mysql修改密码 默认的密码为空&#xff1a;mysql -u root -p第一次更改密码&#xff1a;mysqladmin -uroot -p password xhyEnter password: xhy 第二次更改密码&#xff1a; mysqladmin -uroot -pxhy password xhy1mysql -u root -p En…

python列表统计每个元素出现次数_python 统计list中各个元素出现的次数的几种方法...

利用字典dict来完成统计举例&#xff1a;a [1, 2, 3, 1, 1, 2]dict {}for key in a:dict[key] dict.get(key, 0) 1print dict输出结果&#xff1a;>>>{1: 3, 2: 2, 3: 1}利用Python的collection包下Counter的类举例&#xff1a;from collections import Countera …

raid5需要几块硬盘_Raid5磁盘阵列数据恢复思路分析--附真实案例

1.raid5磁盘阵列数据恢复思路分析Raid5磁盘阵列是一种相对安全的磁盘阵列形式&#xff0c;数据分布状态有点类似于raid0磁盘阵列。但是raid5阵列比raid0阵列更为安全的一点就是阵列的每一组平行数据块中都包含了一个校验块&#xff0c;校验块的作用主要表现在阵列有一块硬盘掉线…

Linux思维导图之sed、实战习题

命令解释&#xff1a; ◆sed 2p /etc/passwd第二行打印了两次其余一次 ◆sed-n 2p /etc/passwd 只打印出第二行 ◆sed-n 1,4p /etc/passwd 只打印出1到4行 ◆sed-n /root/p /etc/passwd只打印出root的行 ◆ sed-n 2./root/p /etc/passwd打印从2行开始往下到root行 ◆sed-n /^$/…

jenkins安装(1)

1先在互联网上输入jenkins.io 2下载jenkins.war 3上传到服务器上 安装jdk前面的博客已经说过了 4 Jenkins requires Java versions [8, 11] but you are running with Java 1.7 from /usr/java/jdk1.7.0_06/jre java.lang.UnsupportedClassVersionError: 51.0 at Main.verifyJa…

jenkins安装(用户配置)(2)

1安装rebulider&#xff08;再次构建可以少写很多参数&#xff09;插件 2安装safe restart安全重启 3系统管理—Configure Global Security—安全矩阵 添加admin用户给与全部权限 4系统管理—管理用户—添加用户 给与用户所有权限&#xff0c;取消第一个勾选&#xff0c;不给予…

发生系统错误53_SAP那些事-推理剧-36-奇怪的付款清账(F-53)报错“TABLE_INVALID_INDEX”...

问题描述&#xff1a;在使用F-53进行供应商付款清账操作时&#xff0c;模拟凭证&#xff08;包括保存凭证&#xff09;时出现如下的ABAP Down错误&#xff1a;问题分析&#xff1a;从报错内容看&#xff0c;我们首先看到报错的程序为SAPMF05A&#xff0c;这个程序财务顾问都熟悉…

微信公众平台-杂项:小程序导航

ylbtech-微信公众平台-杂项&#xff1a;小程序导航1.返回顶部 1、小程序导航 微导航 http://www.we123.com/xcx/ 91udhttp://www.91ud.com/app/ 微信主页 http://www.weixinzhuye.com/app.html 2、2.返回顶部3.返回顶部4.返回顶部5.返回顶部 6.返回顶部1、公众号导航 微小宝 ht…

jenkins安装环境搭建(3)

1安装环境搭建 yum -y install java安装java环境 2安装git用于存储和管理源代码 yum -y install git 3安装并配置git git config --global user.name “yao666” git config --global user.email 1327629137qq.com ssh-keygen -t rsa -C 1327629137qq.com cd ~/.ssh 证书正确 …

seo伪原创工具_文章伪原创工具哪个好用(伪原创工具有哪些)

从事网站seo优化的工作基本上每天都会和文章打交道&#xff0c;因为网站的排名与网站的收录关系是非常大的&#xff0c;网站的收录又和文章息息相关&#xff0c;搜索引擎的胃口是比较喜欢新的内容、原创的内容&#xff0c;而对于一些文案功底比较没那么好的SEOer来说&#xff0…

Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析【转】...

Android系统的运行时库层代码是用C来编写的&#xff0c;用C 来写代码最容易出错的地方就是指针了&#xff0c;一旦使用不当&#xff0c;轻则造成内存泄漏&#xff0c;重则造成系统崩溃。不过系统为我们提供了智能指针&#xff0c;避免出现上述问题&#xff0c;本文将系统地分析…

函数调用关系图如何画_彩铅画入门植物教程 | 如何用彩铅画一株多肉?多肉彩铅画教程步骤图详细...

画画不难&#xff0c;难的是不拿起手中的笔去画。彩铅画入门植物教程 | 如何用彩铅画一株多肉&#xff1f;多肉彩铅画教程步骤图详细多肉的质感如何表达呢&#xff1f;还是那句话&#xff1a;艺术来源于生活&#xff0c;要仔细观察。拿我们今天画的多肉来说&#xff0c;首先要观…

jenkins安装 新建节点(5)

1部署程序&#xff0c;tomcat部署不多说 2新建节点 系统管理—管理节点—新建节点 3完成 4这一点要注意 进行验证任务 创建任务—构建一个自由风格的软件—确定 限制项目的运行节点 选择testenv 构建 执行脚本 输入ifconfig验证 构建成功

工厂方法模式_1天1个设计模式——工厂方法模式

意图工厂方法模式是一种创建型设计模式&#xff0c; 其在父类中提供一个创建对象的方法&#xff0c; 允许子类决定实例化对象的类型。问题假设你正在开发一款物流管理应用。1.0版本只能支持处理卡车运输&#xff0c;因此大部分的代码都位于名为Truck的类中。随着业务越来越广泛…