您好,登錄后才能下訂單哦!
使用JavaScript怎么實(shí)現(xiàn)一個(gè)碰撞檢測(cè)功能?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <style> div { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; margin: auto; width: 300px; height: 300px; background-color: green; } span { position: absolute; top: 0px; left: 0px; display: block; width: 100px; height: 100px; background-color: rgb(10, 151, 233); } </style> <body> <div></div> <span></span> <script> var div = document.getElementsByTagName('div')[0]; var span = document.getElementsByTagName('span')[0]; span.onmousedown = function(e) { // 事件對(duì)象兼容 e = window.event || e; // 添加全局捕獲 if (span.setCapture) { span.setCapture(); } // 鼠標(biāo)按下獲取鼠標(biāo)距離頁(yè)面左側(cè)和頂部距離 var x = e.clientX; var y = e.clientY; // 元素距離頁(yè)面左側(cè)和頂部距離 var elex = span.offsetLeft; var eley = span.offsetTop; // 鼠標(biāo)距離元素距離 =鼠標(biāo)距離頁(yè)面距離 -元素距離頁(yè)面距離 var X = x - elex; var Y = y - eley; document.onmousemove = function(e) { // 鼠標(biāo)移動(dòng) 獲取鼠標(biāo)距離頁(yè)面距離 // 事件對(duì)象兼容 e = window.event || e; var movex = e.clientX; var movey = e.clientY; // 元素的left和top值 =鼠標(biāo)距離頁(yè)面距離 -鼠標(biāo)距離元素距離 var leftx = movex - X; var lefty = movey - Y; /*----------------------------------------------------------*/ // 碰撞檢測(cè) // 1.左側(cè)安全距離 =大盒子距離頁(yè)面左側(cè)距離 -小盒子占位寬 var safeleft = div.offsetLeft - span.offsetWidth; // 2.右側(cè)安全距離 大盒子距離頁(yè)面左側(cè)距離 +大盒子占位寬 var saferight = div.offsetLeft + div.offsetWidth; // 3.上側(cè)安全距離 =大盒子距離頁(yè)面頂部距離 -小盒子占位高 var safetop = div.offsetTop - span.offsetHeight; // 4. 下側(cè)安全距離 = 大盒子距離頁(yè)面頂部距離 + 大盒子占位高 var safebottom = div.offsetTop + div.offsetHeight; if (leftx < safeleft || leftx > saferight || lefty < safetop || lefty > safebottom) { div.style.background = 'green'; } else { div.style.background = 'red'; } /*----------------------------------------------------------*/ // 邊界值 // 左 if (leftx <= 0) { leftx = 0; } // 上 if (lefty <= 0) { lefty = 0; } // 右 var rightx = document.documentElement.clientWidth - span.offsetWidth; if (leftx >= rightx) leftx = rightx; // 下 var righty = document.documentElement.clientHeight - span.offsetHeight; if (lefty >= righty) { lefty = righty; } span.style.left = leftx + 'px'; span.style.top = lefty + 'px'; } document.onmouseup = function() { document.onmousemove = null; if (span.releaseCapture) { span.releaseCapture(); } } // 阻止默認(rèn)事件 return false; } </script> </body> </html>
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。