日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

js實現拖拽與碰撞檢測

瀏覽:185日期:2024-04-19 13:34:08

本文實例為大家分享了js實現拖拽與碰撞檢測的具體代碼,供大家參考,具體內容如下

js實現拖拽與碰撞檢測

拖拽

原理分析

對于拖拽一個div盒子,首先我們需要將鼠標移動到盒子上,然后按住鼠標左鍵,移動鼠標到目標位置,再松開鼠標,對于這一過程的分析,

顯然需要三個鼠標事件:

按住鼠標:onmousedown 移動鼠標:onmousemove 松開鼠標:onmouseup

實現步驟

1、**鼠標按下時:**我們獲取鼠標當前所在的位置距離頁面左邊界與上邊界的距離,分別減去盒子距離頁面左邊界與上邊界的值,這樣我們

就得到了鼠標距離盒子左邊界與上邊界的值;

2、**鼠標移動時:**我們重新獲取此時鼠標距離頁面左邊界與上邊界的值,再用它們減去步驟一中得到的鼠標距離盒子左邊界與上邊界的

值,將得到的值重新賦給盒子,這樣盒子就能與鼠標保持相對靜止,在頁面上移動;

3、**松開鼠標時:**將鼠標移動事件清除。

實現代碼

var oDiv = document.getElementById(’box2’); oDiv.onmousedown = function(ev){ var e = ev||window.event; var offsetX = e.clientX - oDiv.offsetLeft; var offsetY = e.clientY - oDiv.offsetTop; document.onmousemove = function(ev){ var e = ev||window.event; var l =e.clientX-offsetX; var t = e.clientY- offsetY;if(l<=0){ l=0; } if(t<=0){ t=0; } var windowWidth =document.documentElement.clientWidth||document.body.clientWidth; if(l>=windowWidth-oDiv.offsetWidth){ l=windowWidth-oDiv.offsetWidth; } var windowHeight = document.documentElement.clientHeight||document.body.clientHeight if(t>=windowHeight-oDiv.offsetHeight){ t=windowHeight-oDiv.offsetHeight; } oDiv.style.left = l + 'px'; oDiv.style.top = t + 'px'; } } document.onmouseup = function(){ document.onmousemove = null; }

碰撞檢測

原理分析

js中碰撞檢測在應用于制作一些小游戲,如飛機大戰、打磚塊、貪吃蛇等,那么如何實現碰撞檢測呢?

對于兩個矩形方塊之間的碰撞,如果直接思考如何書寫代碼檢測它們之間有沒有發生接觸,這是一個比較難的事情,我們可以換一個思路,

找出它們沒有發生碰撞得情況,排除這些情況,那么剩余的情況必然是發生了碰撞。

如下圖,檢測方塊a與b之間是否發生碰撞,我們可以分別獲取a與b的上、下邊的top值,左右邊的left值,那么以下四種情況是沒有發生碰撞的:

js實現拖拽與碰撞檢測

不會發生碰撞的4種情況:

1、a左>b右2、a上>b下3、a右<b左4、a下<b上

a左:a.offsetLeft;a右:a.offsetLeft + a.offsetWidth;a上:a.offsetTop;a下:a.offsetTop+a.offsetHeight;b左:b.offsetLeft;b右: b.offsetLeft + b.offsetWidth;b上:b.offsetTop;b下: b.offsetTop+b.offsetHeight;

只要發生了上面四種情況任意一種,那么就沒有碰撞:

實現代碼

function knock(node1,node2){ var l1 = node1.offsetLeft; var r1 = node1.offsetLeft + node1.offsetWidth; var t1 = node1.offsetTop; var b1 = node1.offsetTop+node1.offsetHeight; var l2 = node2.offsetLeft; var r2 = node2.offsetLeft + node2.offsetWidth; var t2 = node2.offsetTop; var b2 = node2.offsetTop+node2.offsetHeight; if(l2>r1||r2<l1||t2>b1||b2<t1){ return false; }else{ return true; } }

拖拽與碰撞完整代碼

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>Document</title> <style> #box1{ width: 100px;height: 100px;position: absolute; top: 200px;left: 250px;background-color: blueviolet; } #box2{ width: 100px;height: 100px;position: absolute; top: 400px;left: 550px;background-color: salmon; } </style></head><body> <div id='box1'></div> <div id='box2'></div> <script> var box11 = document.getElementById('box1') var box21 = document.getElementById('box2')if(knock(box21,box11)){ box1.style.backgroundColor='blue'; }else{ box1.style.backgroundColor='grey'; }function knock(node1,node2){ var l1 = node1.offsetLeft; var r1 = node1.offsetLeft + node1.offsetWidth; var t1 = node1.offsetTop; var b1 = node1.offsetTop+node1.offsetHeight; var l2 = node2.offsetLeft; var r2 = node2.offsetLeft + node2.offsetWidth; var t2 = node2.offsetTop; var b2 = node2.offsetTop+node2.offsetHeight; if(l2>r1||r2<l1||t2>b1||b2<t1){return false; }else{return true; } } var oDiv = document.getElementById(’box2’); oDiv.onmousedown = function(ev){ var e = ev||window.event; var offsetX = e.clientX - oDiv.offsetLeft; var offsetY = e.clientY - oDiv.offsetTop; document.onmousemove = function(ev){var e = ev||window.event;var l =e.clientX-offsetX;var t = e.clientY- offsetY;if(knock(box21,box11)){ box1.style.backgroundColor='blue';}else{ box1.style.backgroundColor='grey';}if(l<=0){ l=0;}if(t<=0){ t=0;}var windowWidth =document.documentElement.clientWidth||document.body.clientWidth;if(l>=windowWidth-oDiv.offsetWidth){ l=windowWidth-oDiv.offsetWidth;}var windowHeight = document.documentElement.clientHeight||document.body.clientHeightif(t>=windowHeight-oDiv.offsetHeight){ t=windowHeight-oDiv.offsetHeight;}oDiv.style.left = l + 'px';oDiv.style.top = t + 'px'; } } document.onmouseup = function(){ document.onmousemove = null; } </script></body></html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本а中文在线天堂| 9999国产精品| 国产精品视频一区二区三区| 成人国产精品久久| 黄色精品网站| 成人亚洲欧美| 国产欧美日韩| 日本成人中文字幕| 亚洲欧洲美洲国产香蕉| 久久久久网站| 日韩精品网站| 国产精品99视频| 亚洲欧美网站| 快播电影网址老女人久久| 免费黄网站欧美| 国产精品久久久久久久免费软件| 成人精品久久| 精品视频一区二区三区四区五区| 久久精品电影| 在线 亚洲欧美在线综合一区| 韩国女主播一区二区三区| 国产伊人久久| 精品视频在线你懂得| 嫩呦国产一区二区三区av| 欧美黄页在线免费观看| 欧美xxxx中国| xxxxx性欧美特大| 久久久久久久久丰满| 福利一区二区免费视频 | 欧美有码在线| 日韩欧美中文在线观看| 日韩在线视频一区二区三区| 蜜臀av亚洲一区中文字幕| 免费在线观看视频一区| 亚洲香蕉久久| 日韩精品一区二区三区中文| 欧美日韩亚洲一区二区三区在线| 另类av一区二区| 中文一区一区三区免费在线观 | 久久三级中文| 久久麻豆视频| 亚洲欧洲美洲av| 亚洲国产成人精品女人| 在线视频亚洲| 先锋亚洲精品| 美女精品在线| 97久久精品| 黄色精品视频| 欧美日韩在线二区| av在线最新| 婷婷综合五月| 亚洲精品麻豆| 久久精品九色| 色偷偷色偷偷色偷偷在线视频| 日韩视频免费| 91大神在线观看线路一区| 麻豆一区二区99久久久久| 精品欧美一区二区三区在线观看| 日韩一区二区免费看| 奇米狠狠一区二区三区| av中文字幕在线观看第一页| 婷婷成人综合| 欧美日韩伊人| 日韩成人综合| 亚洲精品一级| 91精品亚洲| 日韩欧美高清一区二区三区| 国产精品国码视频| 亚洲欧洲美洲av| 欧美日一区二区在线观看| 国产美女高潮在线观看| 在线观看亚洲精品福利片| 六月丁香综合| 久久精品亚洲| 亚洲精品乱码| 午夜欧美视频| 日韩.com| 日韩av影院| 国产精品呻吟| 国产99精品| 国产成人免费| 久久精品凹凸全集| 亚洲一区欧美| 黄色亚洲免费| 成人小电影网站| 蜜桃精品视频| 日本国产亚洲| 日韩精品一卡二卡三卡四卡无卡| 久久电影tv| 国产精品黄色| 日韩高清国产一区在线| 欧美日韩四区| 久久亚洲专区| 九九精品调教| 综合日韩av| 精品一区二区三区免费看 | 蜜桃伊人久久| 合欧美一区二区三区| 蜜桃精品在线| 日本а中文在线天堂| 久久精品国产99国产| 国产激情久久| 国产精品自拍区| 日本亚洲最大的色成网站www| 亚洲欧洲另类| 婷婷激情图片久久| 久久精品免费一区二区三区| 精品一区二区三区视频在线播放| 国产探花一区二区| 国产探花一区二区| 日本成人在线不卡视频| 中文字幕一区二区三区四区久久 | 天堂日韩电影| 综合日韩av| 日韩精品dvd| 日韩黄色大片| 99免费精品| 欧美1区2区3区| 91高清一区| 91精品电影| 亚洲一区区二区| 黄色亚洲大片免费在线观看| 波多野结衣一区| 亚洲在线电影| 性一交一乱一区二区洋洋av| 中文亚洲欧美| 一本一道久久a久久| 日韩一二三区在线观看| 欧美一区二区三区久久| 国产欧美午夜| 麻豆精品av| 黑人精品一区| 久久高清精品| 国产色综合网| 日韩综合一区二区三区| 国产区精品区| 久久精品一区二区三区中文字幕| 国产日韩免费| 久久免费福利| 久久一区二区中文字幕| 婷婷亚洲综合| 亚洲三级网站| 国产日韩免费| 国产伦久视频在线观看| 亚洲一级特黄| 麻豆9191精品国产| 日韩在线观看一区二区三区| 国产精品一区二区三区美女| 久久99青青| 日韩精品专区| 日韩中文字幕一区二区三区| 亚洲精品伊人| 麻豆一区二区在线| 亚洲成人国产| 伊人www22综合色| 麻豆视频久久| 香蕉精品视频在线观看| 日韩福利视频一区| 精品国产免费人成网站| 1024精品久久久久久久久| 日本不卡视频在线| 91青青国产在线观看精品| 亚洲免费高清| 国产精品密蕾丝视频下载| 欧美精品高清| 深夜福利一区| 麻豆极品一区二区三区| 影视先锋久久| 日本伊人久久| 成人在线丰满少妇av| 亚洲激情五月| 国产欧美三级| 久久伦理在线| 国产欧美久久一区二区三区| 水蜜桃久久夜色精品一区| 亚洲在线一区| 精品中文字幕一区二区三区| 亚洲免费高清| 国产一区丝袜| 亚洲欧美在线综合| 亚洲天堂av影院| 视频一区免费在线观看| 久久精品资源| av不卡在线看| 青草综合视频| 99热精品久久| 国产精品一站二站| 欧美1级日本1级| 国产精品久久亚洲不卡| 国产91精品对白在线播放| 日韩超碰人人爽人人做人人添| 日韩一区三区| 日韩欧美中文字幕在线视频| 欧洲av不卡| 日韩在线观看中文字幕| 久久久久亚洲精品中文字幕| 蜜臀久久99精品久久一区二区| а√天堂8资源在线| 视频小说一区二区| 久久午夜精品一区二区|