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 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
javascript 装载iframe子页面,自适应高度
Mar 20 Javascript
JS代码同步文本框内容的实例方法
Jul 12 Javascript
JS+CSS实现六级网站导航主菜单效果
Sep 28 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
Feb 14 Javascript
微信小程序 教程之WXML
Oct 18 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
Angular模版驱动表单的使用总结
May 05 Javascript
vue实现菜单切换功能
May 08 Javascript
js 实现watch监听数据变化的代码
Oct 13 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
Apr 09 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
Python中字典的基本知识初步介绍
2015/05/21 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
TensorFlow实现模型评估
2018/09/07 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
微笑面对生活演讲稿
2014/05/13 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
社区元宵节活动总结
2015/02/06 职场文书
军训通讯稿范文
2015/07/18 职场文书
银行求职信怎么写
2019/06/20 职场文书