JS-拖拽-碰撞-封装

js面向对象封装拖拽移动功能,兼容pc和移动端 采用JavaScript面向对象思想封装拖拽移动功能,兼容pc端和移动端,适合JavaScript初学者进阶学习。 立即下载
<Html>
	<head>
		<style>
			*{margin: 0;padding: 0;}
		</style>
		<script type="text/javascript">
			
			//函数加载入口
			window.onload = function()
			{	
				
				var oDiv1 = document.getElementById('div1');
				var oDiv2 = document.getElementById("div2");

				var offsetX = 0;
				var offsetY = 0;


				oDiv1.onmousedown = function(ev)
				{

					var oEvent = ev || window.event;
					offsetX = oEvent.clientX - this.offsetLeft;
					offsetY = oEvent.clientY - this.offsetTop;

					//当鼠标移动
					document.onmousemove = function(ev)
					{	
						var oEvent = ev || window.event;
						var l  = oEvent.clientX - offsetX;
						var r  = oEvent.clientY - offsetY;

						
						l <=0 && (l = 0);

						l >= document.documentElement.clientWidth - oDiv1.offsetWidth && (l=document.documentElement.clientWidth - oDiv1.offsetWidth);

						r <=0 && (r = 0);

						r >= document.documentElement.clientHeight - oDiv1.offsetHeight&&(r=document.documentElement.clientHeight-oDiv1.offsetHeight);


						var ol1 = oDiv1.offsetLeft;
						var ol2 = oDiv1.offsetLeft + oDiv1.offsetWidth; 
						var ot1 = oDiv1.offsetTop;
						var ot2 = oDiv1.offsetTop  + oDiv1.offsetHeight;

						var nl1 = oDiv2.offsetLeft;
						var nl2 = oDiv2.offsetLeft + oDiv2.offsetWidth;
						var nt1 = oDiv2.offsetTop;
						var nt2 = oDiv2.offsetTop + oDiv2.offsetHeight;

						
						//碰撞检测
						if (!(ol1 > nl2 || ol2 < nl1 || ot2 < nt1 || ot1 > nt2 ))
						{
							oDiv2.style.backgroundColor="pink";
						} 

	
						//(ol1 < nl2 || ol2 > nl1 || ot1 < nt2 || ot2 > nt1) &&  (alert(1));


						oDiv1.style.left = l +'px';
						oDiv1.style.top  = r +'px';
					};

					document.onmouseup = function()
					{
						document.onmouseup = null;
						document.onmousemove = null;

						this.releaseCapture && (this.releaseCapture());
					};

					this.setCapture && (this.setCapture());

					return false; //取消默认事件
				}

				
			

				var Toos = {	
					//拖动函数
					Drag:function(obj)
					{	
						var offsetX = offsetY =0;
						obj.drag.onmousedown = function(ev)
						{
							var oEvent = ev || window.event;
							offsetX = oEvent.clientX - this.offsetLeft;
							offsetY = oEvent.clientY - this.offsetTop;

							document.onmousemove = function(ev){
								var oEvent = ev || window.event;
								obj.drag.style.left = oEvent.clientX - offsetX +'px';
								obj.drag.style.top = oEvent.clientY - offsetY +'px';
							}
							document.onmouseup = function(){	
								document.onmousemove = null;
								document.onmouseup = null;


								//IE问题
								this.releaseCapture && this.releaseCapture();
							};

							//IE问题
							this.setCapture &&  this.setCapture();

							return false;
						}
					}
				};

				Toos.Drag({drag:document.getElementById("div1")});

			};





		</script>
	</head>
<body>
	<div style="width:100px;height:100px;border:solid 1px;position:absolute;background:red;" id="div1"></div>

	<div style="width:100px;height:100px;border:solid 1px;position:absolute;background:blue; left:300px;top:300px;" id="div2"></div>

</body>
</html>

【实战指南】WinPE环境下360系统急救箱的病毒查杀全流程解析 本文详细解析了在WinPE环境下使用360系统急救箱进行病毒查杀的全流程。从制作WinPE启动盘到进入PE环境,再到360急救箱的深度使用和系统修复,提供了实用技巧和常见问题解决方案,帮助用户高效清除顽固病毒。 阅读详情

相关推荐

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码1.Win10系统配置OpenPose1.7.0的Python API 本人最近在研究基于骨架的动作识别方法,有幸看到端到端的ST-GCN算法,于是决定自己复现一下。(具体原理这里不介绍,大家自行查阅,比如Openpose是个啥?ST-GCN又是个啥?) 1.Win10系统配置OpenPose1.7.0的Python API 安装步骤: (1) ...

QIANFANGshiwo的博客 3041

javascript拖拽封装

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;head&gt; &lt;sty

luohui2017的博客 489

【一步到位】Android Studio 实现安卓连接阿里云物联网云平台

最新版本目前是Android Studio Iguana | 2024.1.2,你可以到官网上去找之前的版本,手上有工作项目的不要去轻易尝试,说不定你就编译失败了,失败了也不要担心,解决就可以了。

m0_73799445的博客 1万+

js完美拖拽与碰撞检测

拖拽与碰撞检测 点个赞啊,靓仔! 拖拽 原理分析 对于拖拽一个div盒子,首先我们需要将鼠标移动到盒子上,然后按住鼠标左键,移动鼠标到目标位置,再松开鼠标,对于这一过程的分析, 显然需要三个鼠标事件: 按住鼠标:onmousedown 移动鼠标:onmousemove 松开鼠标:onmouseup 实现步骤 1、**鼠标按下时:**我们获取鼠标当前所在的位置距离页面左边界与上边界的距离,分别减去盒子距离页面左边界与上边界的值,这样我们 就得到了鼠标距离盒子左边界与上边界的值; 2、**鼠标移动时:**我们

horizon12的博客 3166

基于Python适用于YOLO目标检测算法的图片数据增强处理

为了增强模型的鲁棒性以及数据的丰富性,同 时为了防止由于数据过少发生过拟合,本设计对数 据集进行数据增强处理,包括随机亮度调节、随机 对比度调节、随机饱和度调节、加入高斯噪声、水 平翻转、运动模糊和旋转 15°

weixin_67136409的博客 700

告别手动脚本!用TSMaster Python小程序5分钟搞定CAN报文自动发送

本文介绍了如何使用TSMaster的Python小程序功能快速实现CAN报文自动发送,大幅提升汽车电子测试效率。通过简洁的Python代码示例,展示了如何替代传统手动操作和复杂C脚本,实现周期性发送、动态修改报文内容等常见需求,帮助工程师5分钟内完成自动化配置。

weixin_30292843的博客 512

js拖拽碰撞

拖拽碰撞 当拖动图片时,碰到页面中的天蓝色盒子,盒子会由天蓝色变成黄色。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale...

datuzidppd5556的博客 423

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

摘要: 本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理,通过滑模观测器估算反电动势,结合PLL抑制抖振;2)系统架构,替代编码器信号;3)Simulink建模流程,涵盖Clarke变换、SMO离散化实现、PLL设计等关键步骤;4)参数整定指南和工程实践要点,如启动策略和故障处理。该方法具有成本低、可靠性高的优势,适用于家电、电动车等场景,仿真结果显示角度误差±5°,速度动态跟随良好。文章还提供了调试建议和常见问题解决方案。

MHD0815的博客 139

js拖拽封装

废话不多说,直接上代码: drag: function (id) { let isDown = false; let idObj = document.getElementById(id); let _this; // 缓存this let x, y, l, t; idObj.onmousedown = functio...

qq_42345237的博客 311

一文读懂 SAP BTP Application Router 的 Resource Files:从 xs-app.json 到本地开发的默认设置

本文详解SAP BTP中Application Router的资源文件配置与本地开发实践。核心包括:xs-app.json定义路由规则与安全策略,package.json声明依赖与启动脚本,resources/存放静态资源,default-services.json和local-destinations.json用于本地模拟云服务。文章通过真实案例展示如何配置静态资源直出、反向代理后端服务,并强调本地开发时的注意事项与常见问题解决路径。关键配置均提供示例代码,帮助开发者快速实现业务应用的部署与联调。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 180

海思3403烧结、复用及mic输入

3403调试的第一步是版本烧结,版本烧结经常遇到问题,本文记录总结遇到的各种问题。

平面到立体 1355

JS里面几个实用的封装函数

一滚轮事件的封装函数 function MouseWheelHandle (obj,handle){     var info = navigator.userAgent;     var down = null;//用来记录滚轮的上下,down=true表示向下     if(info.indexOf("Firefox") !=-1){         obj.addEventLi

a1079049425的博客 5045

ADC的有效位数(ENOB)、信噪比(SNR)和无杂散动态范围(SFDR)——详细分析

设计提示(从文本):选择ADC时,看数据手册的SNR、ENOB、SFDR vs 频率图。减小抖动:用低抖动时钟、优化PCB、电源滤波。对于大信号:关注SFDR(失真);小信号:关注SNR/ENOB(噪声)。如果ENOB不足,用过采样或多ADC并行提升(但增加复杂度)。为什么这段重要?它解释了为什么高速ADC(如用于5G、雷达)的规格那么贵:抖动和失真限制了高频性能。理解这些,能帮你避免设计陷阱。

VectorShift的博客 1406

元素碰撞检测原理及实现

元素碰撞检测原理及实现 我们知道当鼠标在元素上移入移出,可以使用hover属性来改变元素,如果是元素与元素碰撞呢?应该怎么 操作呢?这个时候依然要使用我们之前介绍过的元素拖拽的效果。 原理:先上图 绿色元素是固定元素(div2),红色元素(div1)是拖拽的元素。将红元素拖拽碰到绿色元素时,绿色元素背景颜色发生改变。 1、按照上图将整个空间划分为九宫格形式。div2在空间5的...

哈哈哈 1675

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

随手笔记10-拖拽效果-碰撞检测-简单封装动画函数

思路: 1.拖拽效果必须鼠标按下(mousedown),切鼠标移动(mousemove )执行代码,鼠标弹起(mouseup)解除事件 2.鼠标的坐标减去 鼠标在盒子内的坐标, 才是拖拽目标真正要移动的位置 3.鼠标移动和弹起事件如果加给小盒子,那么在快速移动鼠标的时候会无法解绑事件,所以为了用户体验度,把这两个事件加给文档(document) 4.判断物体移动边界,小盒子最大移动距离=父元素(这里用当前窗口位置)-小盒子的宽高,然后分别判断他们最大的移动距离,针对边界值分别进行处理 5.如果拖拽目标是i.

老男孩的博客 282

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

拖拽、全局捕获、多物体运动、碰撞检测、 运动的封装、多物体运动、减速运动、回调函数

拖拽 <style> div { width: 100px; height: 100px; background: deeppink; position: absolute; left: 50px; top: 50px; } </style> </head> <body&gt

qq_41027812的博客 220

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何给图片赋值_JS拖拽专题(四)——「实战」揭秘那些图片移位的本质究竟是什么?...

欢迎来到我的JS拖拽专题系列文章,更多精彩内容持续更新中,欢迎关注 :)上一小节我们说到了自定义的滚动条的基本实现原理,通过一个拖拽操作去控制另外一个dom的变化。我们找到其中的关系系数k,从而解决实际需求~本章目标在web开发中,常见的dom的布局转换拖拽过程中dom中的碰撞检测拖拽过程中两点之间的距离的计算,以及如何求得最小距离。在传统的web开发过程中,那些炫酷的效果看上去高大上,仔细分析,...

weixin_29839415的博客 241

碰撞检测

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt;     &lt;meta charset="UTF-8"&gt;     &lt;title&gt;Document&lt;/title&gt;     &lt;style&gt;         *{             padding:

BeiBeiTian的博客 416

javascript事件(三)(实现拖拽)

一.拖拽的原理:选择元素时(鼠标按下),保存鼠标的位置和元素位置的差值(以保证鼠标拖住元素移动时相对于元素的位置固定);移动元素时(鼠标移动),不停地给元素位置赋值(当前鼠标位置减去保存的差值);释放元素时(鼠标抬起),取消移动事件。二.可能会遇到的问题 1.若移动速度太快脱离元素时事件就不会执行了; 2.为了避免冒泡,onmousemove事件放在document上就可以了; 3.为了避免当

pleasecallme_522的博客 942

div碰撞

需求:拖动两个元素,当四个边缘碰撞到时,div样式改变 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&gt...

黎小小的博客 690

程序猿HTML5与原生javascript开发高级拖拽照片墙

点击查看照片墙动图特效如何提高javascript逻辑思维?如何开发特效?javascript课题:高级原生javascript拖拽照片墙知识点:HTML/CSS布局,兼容性处理 原生javascript DOM操作,鼠标拖拽功能, 碰撞检测,勾股定理计算最小距离,原生javascript运动框架封装, 面向过程函数式封装思维。2017就业形势分析等PS:这个特效对于布局的要求并不高,大部分学习w...

weixin_33910759的博客 219

照片墙应用

<!DOCTYPE html> <html> <head> <style> * {margin:0; padding:0;} #ul1 {width:660px; position:relative; margin:10px auto;} #ul1 li {width:200px; height:150px; ...

bandiaoguo3493的博客 508

jQuery拖拽--1

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Title&lt;/title&gt; &lt;script src="vue/vue.2.5.js"&gt;&a

qq_40285497的博客 184

事件深入应用二

拖拽的封装<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>拖拽的问题</title> <style type="text/css"> #div1{width: 100px;height: 100px;background: #f00;position:absolute;}

Hi,MrGong 275

Javascript事件

事件绑定---因为一个元素一次最多只能触发一个事件,但是有时候才需要多个事件按顺序执行,因此就有了attachEvent和addEventListener函数。 实例1-----绑定事件 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <ti...

weixin_30477293的博客 86

拖拽封装、碰撞检测

拖拽封装 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv...

Steve_Richard的博客 233
上一篇: C#-Struct简单的用法
下一篇: JS-绑定事件两种方式
Jones_qing
博客等级 码龄12年 0粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值