js 實(shí)現(xiàn)碰撞檢測(cè)的示例
碰撞檢測(cè)
目錄
- 代碼實(shí)例
- 與簡(jiǎn)易拖拽的差異
- 下載源碼鏈接
代碼實(shí)例
<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
// 鼠標(biāo)按下的動(dòng)作
box.onmousedown = down
// 鼠標(biāo)的移動(dòng)動(dòng)作
document.onmousemove = move
// 釋放鼠標(biāo)的動(dòng)作
document.onmouseup = up
// 鼠標(biāo)按下后的函數(shù),e為事件對(duì)象
function down(e) {
dragging = true
// 獲取元素所在的坐標(biāo)
boxX = box.offsetLeft
boxY = box.offsetTop
// 獲取元素box2所在的坐標(biāo)
box2X = box2.offsetLeft
box2Y = box2.offsetTop
// 獲取鼠標(biāo)所在的坐標(biāo)
mouseX = parseInt(getMouseXY(e).x)
mouseY = parseInt(getMouseXY(e).y)
// 鼠標(biāo)相對(duì)元素左和上邊緣的坐標(biāo)
offsetX = mouseX - boxX
offsetY = mouseY - boxY
}
// 鼠標(biāo)移動(dòng)調(diào)用的函數(shù)
function move(e){
if (dragging) {
// 獲取移動(dòng)后的元素的坐標(biāo)
var x = getMouseXY(e).x - offsetX
var y = getMouseXY(e).y - offsetY
// 計(jì)算可移動(dòng)位置的大小, 保證元素不會(huì)超過(guò)可移動(dòng)范圍
var width = document.documentElement.clientWidth - box.offsetWidth
var height = document.documentElement.clientHeight - box.offsetHeight
// min方法保證不會(huì)超過(guò)右邊界,max保證不會(huì)超過(guò)左邊界
x = Math.min(Math.max(0, x), width)
y = Math.min(Math.max(0, y), height)
// 給元素及時(shí)定位
box.style.left = x + 'px'
box.style.top = y + 'px'
// 碰撞檢測(cè)
// x坐標(biāo)值的范圍判斷,y坐標(biāo)值的范圍判斷
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("碰撞到")
}
}
}
// 釋放鼠標(biāo)的函數(shù)
function up(e){
dragging = false
}
// 函數(shù)用于獲取鼠標(biāo)的位置
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
}
}
})()
與簡(jiǎn)易拖拽的差異
碰撞檢測(cè)
// 碰撞檢測(cè)
// x坐標(biāo)值的范圍判斷,y坐標(biāo)值的范圍判斷
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 實(shí)現(xiàn)碰撞檢測(cè)的示例的詳細(xì)內(nèi)容,更多關(guān)于js 碰撞檢測(cè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java遇到微信小程序 "支付驗(yàn)證簽名失敗" 問(wèn)題解決
這篇文章主要介紹了java遇到微信小程序 "支付驗(yàn)證簽名失敗" 問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
微信小程序提取公用函數(shù)到util.js及使用方法示例
這篇文章主要介紹了微信小程序提取公用函數(shù)到util.js及使用方法,結(jié)合實(shí)例形式分析了util.js公用函數(shù)相關(guān)調(diào)用操作技巧,需要的朋友可以參考下2019-01-01
兼容IE/Firefox/Opera/Safari的檢測(cè)頁(yè)面裝載完畢的腳本Ext.onReady的實(shí)現(xiàn)
其中對(duì)于IE的檢測(cè)很有意思。 以上代碼,整理自Extjs的腳本,完全可以代替 Ext.onReady使用。2009-07-07
CSS和JS標(biāo)簽style屬性對(duì)照表(方便js開(kāi)發(fā)的朋友)
CSS和JS標(biāo)簽style屬性對(duì)照表(方便js開(kāi)發(fā)的朋友),需要的朋友可以收藏下。2010-11-11
JavaScript獲取URL參數(shù)常見(jiàn)的4種方法
對(duì)于獲取URL參數(shù),有很多種方法可以實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于JavaScript獲取URL參數(shù)常見(jiàn)的4種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
JS中for,for...in,for...of和forEach的區(qū)別和用法實(shí)例
JS遍歷數(shù)組(循環(huán)數(shù)組)的方式有多種,可以使用傳統(tǒng)的for循環(huán),也可以使用升級(jí)版的for in循環(huán),還可以使用Array類(lèi)型的forEach() 方法,這篇文章主要給大家介紹了關(guān)于JS中for、for...in、for...of和forEach的區(qū)別和用法的相關(guān)資料,需要的朋友可以參考下2021-11-11
Iframe 自適應(yīng)高度并實(shí)時(shí)監(jiān)控高度變化的js代碼
不得不用到iframe,且被強(qiáng)烈要求不能讓它出現(xiàn)滾動(dòng)條!嵌入的頁(yè)面肯定是高度不一的,頁(yè)面中也不能出現(xiàn)大片空白,所以也不能寫(xiě)死高度!真是麻鬼煩??!2009-10-10

