js 实现碰撞检测的示例


Posted in Javascript onOctober 28, 2020

碰撞检测

目录

  • 代码实例
  • 与简易拖拽的差异
  • 下载源码链接 

代码实例

<div id="box" style="background: #334;width: 100px;height: 100px;position: absolute;cursor: move;z-index: 999;"></div>
<div id="box2" style="background: green;width: 100px;height: 100px;position: absolute;top: 200px;left: 500px;"></div>

(function () {
	var dragging = false
	var boxX, boxY, mouseX, mouseY, offsetX, offsetY
	var box = document.getElementById('box')
	var box2 = document.getElementById('box2')
	var box2X, box2Y

	// 鼠标按下的动作
	box.onmousedown = down
	// 鼠标的移动动作
	document.onmousemove = move
	// 释放鼠标的动作
	document.onmouseup = up

	// 鼠标按下后的函数,e为事件对象
	function down(e) {
		dragging = true
		
		// 获取元素所在的坐标
		boxX = box.offsetLeft
		boxY = box.offsetTop

		// 获取元素box2所在的坐标
		box2X = box2.offsetLeft
		box2Y = box2.offsetTop

		// 获取鼠标所在的坐标
		mouseX = parseInt(getMouseXY(e).x)
		mouseY = parseInt(getMouseXY(e).y)

		// 鼠标相对元素左和上边缘的坐标
		offsetX = mouseX - boxX
		offsetY = mouseY - boxY
	}

	// 鼠标移动调用的函数
	function move(e){
		if (dragging) {
			// 获取移动后的元素的坐标
			var x = getMouseXY(e).x - offsetX
			var y = getMouseXY(e).y - offsetY

			// 计算可移动位置的大小, 保证元素不会超过可移动范围
			var width = document.documentElement.clientWidth - box.offsetWidth
			var height = document.documentElement.clientHeight - box.offsetHeight

			// min方法保证不会超过右边界,max保证不会超过左边界
			x = Math.min(Math.max(0, x), width)
			y = Math.min(Math.max(0, y), height)

			// 给元素及时定位
			box.style.left = x + 'px'
			box.style.top = y + 'px'

			// 碰撞检测
			// x坐标值的范围判断,y坐标值的范围判断
			var judge_x = (x >= box2X - box2.offsetWidth) && (x <= box2X + box2.offsetWidth)
			var judge_y = (y >= box2Y - box2.offsetHeight) && (y <= box2Y + box2.offsetHeight)
			if (judge_x && judge_y) {
				console.log("碰撞到")
			}
		}
	}

	// 释放鼠标的函数
	function up(e){
		dragging = false
	}

	// 函数用于获取鼠标的位置
	function getMouseXY(e){
		var x = 0, y = 0
		e = e || window.event
		
		if (e.pageX) {
			x = e.pageX
			y = e.pageY
		} else {
			x = e.clientX + document.body.scrollLeft - document.body.clientLeft
			y = e.clientY + document.body.scrollTop - document.body.clientTop
		}
		return {
			x: x,
			y: y
		}
	}
})()

与简易拖拽的差异

碰撞检测

// 碰撞检测
// x坐标值的范围判断,y坐标值的范围判断
var judge_x = (x >= box2X - box2.offsetWidth) && (x <= box2X + box2.offsetWidth)
var judge_y = (y >= box2Y - box2.offsetHeight) && (y <= box2Y + box2.offsetHeight)
if (judge_x && judge_y) {
	console.log("碰撞到")
}

下载源码链接

星辉的Github

以上就是js 实现碰撞检测的示例的详细内容,更多关于js 碰撞检测的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
IE中直接运行显示当前网页中的图片 推荐
Aug 31 Javascript
重写javascript中window.confirm的行为
Oct 21 Javascript
中文字符串截取的js函数代码
Apr 17 Javascript
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
Apr 27 Javascript
jquery实现页面虚拟键盘特效
Aug 08 Javascript
浅析JavaScript中命名空间namespace模式
Jun 22 Javascript
Vue表单实例代码
Sep 05 Javascript
AngularJS表单验证中级篇(3)
Sep 28 Javascript
Vue2.0 事件的广播与接收(观察者模式)
Mar 14 Javascript
微信小程序图片左右摆动效果详解
Jul 13 Javascript
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
在antd Table中插入可编辑的单元格实例
Oct 28 #Javascript
vue用ant design中table表格,点击某行时触发的事件操作
Oct 28 #Javascript
react antd表格中渲染一张或多张图片的实例
Oct 28 #Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 #Javascript
js实现详情页放大镜效果
Oct 28 #Javascript
用js实现放大镜效果
Oct 28 #Javascript
如何在 ant 的table中实现图片的渲染操作
Oct 28 #Javascript
You might like
删除无限级目录与文件代码共享
2006/07/12 PHP
php include,include_once,require,require_once
2008/09/05 PHP
php数组去重的函数代码
2013/02/03 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
JavaScript 特殊字符
2007/04/05 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python快速从注释生成文档的方法
2016/12/26 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
Ref与out有什么不同
2012/11/24 面试题
房产公证书
2015/01/23 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript