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 相关文章推荐
Fastest way to build an HTML string(拼装html字符串的最快方法)
Aug 20 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
jQuery中$.click()无效问题分析
Jan 29 Javascript
基于JavaScript代码实现pc与手机之间的跳转
Dec 23 Javascript
Bootstrap基本样式学习笔记之表单(3)
Dec 07 Javascript
js实现带进度条提示的多视频上传功能
Dec 13 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
浅谈Angular文字折叠展开组件的原理分析
Nov 24 Javascript
jQuery 点击获取验证码按钮及倒计时功能
Sep 20 jQuery
微信小程序如何实现点击图片放大功能
Jan 21 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
Mar 31 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
Apr 24 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 ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
2012/03/05 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
Angular 4 指令快速入门教程
2017/06/07 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Python 闭包的使用方法
2017/09/07 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
Python中and和or如何使用
2020/05/28 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
大学生村官工作感言
2014/01/10 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
早会开场白台词大全
2015/06/01 职场文书
金砖之国观后感
2015/06/11 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android