相思资源网 Design By www.200059.com

碰撞检测

目录

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

代码实例

<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 碰撞检测的资料请关注其它相关文章!

标签:
js,碰撞检测,js,实现碰撞检测

相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com

评论“js 实现碰撞检测的示例”

暂无js 实现碰撞检测的示例的评论...

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?