溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用js 實現碰撞檢測的方法

發布時間:2020-10-29 15:21:04 來源:億速云 閱讀:209 作者:Leah 欄目:開發技術

本篇文章為大家展示了使用js 實現碰撞檢測的方法,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

代碼實例

<div id="box" ></div>
<div id="box2" ></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("碰撞到")
}

上述內容就是使用js 實現碰撞檢測的方法,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女