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 相关文章推荐
Javascript 面向对象 命名空间
May 13 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
Apr 05 Javascript
js限制textarea每行输入字符串长度的代码
Oct 31 Javascript
jQuery类选择器用法实例
Dec 23 Javascript
jQuery实现返回顶部效果的方法
May 29 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
Nov 24 Javascript
详解Node.js中的Async和Await函数
Feb 22 Javascript
JS实现的3des+base64加密解密算法完整示例
May 18 Javascript
vue两个组件间值的传递或修改方式
Jul 04 Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 Javascript
在Vue中使用axios请求拦截的实现方法
Oct 25 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
May 16 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
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
基于Python os模块常用命令介绍
2017/11/03 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
Python Collatz序列实现过程解析
2019/10/12 Python
Python list运算操作代码实例解析
2020/01/20 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
数据库专业英语
2012/11/30 面试题
项目合作计划书
2014/01/09 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
税务会计岗位职责
2015/04/02 职场文书
答辩状格式范本
2015/05/22 职场文书
灵魂歌王观后感
2015/06/17 职场文书
公司开业主持词
2015/07/02 职场文书
高一语文教学反思
2016/02/16 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python