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 相关文章推荐
JQuery onload、ready概念介绍及使用方法
Apr 27 Javascript
iframe子父页面调用js函数示例
Nov 07 Javascript
javascript操作referer详细解析
Mar 10 Javascript
探讨js字符串数组拼接的性能问题
Oct 11 Javascript
jQuery中parent()方法用法实例
Jan 07 Javascript
js实现滑动触屏事件监听的方法
May 05 Javascript
Angular中$compile源码分析
Jan 28 Javascript
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
详解JavaScript中的强制类型转换
Apr 15 Javascript
详解jQuery中的prop()使用方法
Jan 05 jQuery
Vue中computed及watch区别实例解析
Aug 01 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 30 Javascript
在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
php错误级别的设置方法
2013/06/17 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
react项目从新建到部署的实现示例
2021/02/19 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
python3抓取中文网页的方法
2015/07/28 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
Python requests模块实例用法
2019/02/11 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
浙大毕业生自荐信
2014/01/26 职场文书
企业管理培训感言
2014/01/27 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
村庄环境整治方案
2014/05/15 职场文书
大学活动总结模板
2014/07/10 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
机器人总动员观后感
2015/06/09 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js