JS碰撞運(yùn)動(dòng)實(shí)現(xiàn)方法詳解
本文實(shí)例分析了JS碰撞運(yùn)動(dòng)實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
描述:撞到目標(biāo)點(diǎn)彈回來(lái)(速度反轉(zhuǎn))
一、無(wú)重力的漂浮div
var div1=document.getElementById("div1"); var iSpeedX=6; var iSpeedY=8; setInterval(function(){ var l=div1.offsetLeft+iSpeedX; var t=div1.offsetTop+iSpeedY; if(t>=document.documentElement.clientHeight-div1.offsetHeight){ iSpeedY*=-1; //速度反向 t=document.documentElement.clientHeight-div1.offsetHeight; //超出下邊界時(shí),把它拉回到下邊界,不然右邊滾動(dòng)條會(huì)閃動(dòng)出現(xiàn)一下 } else if(t<=0){ iSpeedY*=-1; t=0; } if(l>=document.documentElement.clientWidth-div1.offsetWidth){ iSpeedX*=-1; l=document.documentElement.clientWidth-div1.offsetWidthl; } else if(l<=0){ iSpeedX*=-1; l=0; } div1.style.left=l+'px'; div1.style.top=t+'px'; },30);
二、碰撞+重力
所謂重力就是Y軸的速度不斷增加
setInterval(function(){ iSpeedY+=3; var l=div1.offsetLeft+iSpeedX; var t=div1.offsetTop+iSpeedY; if(t>=document.documentElement.clientHeight-div1.offsetHeight){ iSpeedY*=-0.8; iSpeedX*=0.8; //橫向速度也要變慢,否則碰到地面時(shí)會(huì)停不下來(lái) t=document.documentElement.clientHeight-div1.offsetHeight; } else if(t<=0){ iSpeedY*=-1; iSpeedX*=0.8; t=0; } if(l>=document.documentElement.clientWidth-div1.offsetWidth){ iSpeedX*=-0.8; l=document.documentElement.clientWidth-div1.offsetWidthl; } else if(l<=0){ iSpeedX*=-0.8; l=0; } if(Math.abs(iSpeedX)<1){ //解決小數(shù)的問(wèn)題,因?yàn)榧偃缢俣仁切?shù),正的沒(méi)問(wèn)題,100(iSpeed=0.5)-->100.5-->100,負(fù)的100(iSpeed=-0.5)--->99.5-->99,可能會(huì)出現(xiàn)x軸反向時(shí)滑行 iSpeedX=0; } if(Math.abs(iSpeedY)<1){ iSpeedY=0; } div1.style.left=l+'px'; div1.style.top=t+'px'; },30);
三、碰撞+重力+拖拽
window.onload=function () { var oDiv=document.getElementById('div1'); var lastX=0; var lastY=0; oDiv.onmousedown=function (ev) { var oEvent=ev||event; var disX=oEvent.clientX-oDiv.offsetLeft; var disY=oEvent.clientY-oDiv.offsetTop; document.onmousemove=function (ev) { var oEvent=ev||event; var l=oEvent.clientX-disX; var t=oEvent.clientY-disY; oDiv.style.left=l+'px'; oDiv.style.top=t+'px'; iSpeedX=l-lastX; //拖拽結(jié)束時(shí)的速度 iSpeedY=t-lastY; lastX=l; //更新上一個(gè)點(diǎn)的位置 lastY=t; }; document.onmouseup=function () { document.onmousemove=null; document.onmouseup=null; startMove(); //拖拽結(jié)束時(shí)執(zhí)行 }; clearInterval(timer); }; }; var timer=null; var iSpeedX=0; var iSpeedY=0; function startMove() { clearInterval(timer); timer=setInterval(function (){ var oDiv=document.getElementById('div1'); iSpeedY+=3; var l=oDiv.offsetLeft+iSpeedX; var t=oDiv.offsetTop+iSpeedY; if(t>=document.documentElement.clientHeight-oDiv.offsetHeight) { iSpeedY*=-0.8; iSpeedX*=0.8; t=document.documentElement.clientHeight-oDiv.offsetHeight; } else if(t<=0) { iSpeedY*=-1; iSpeedX*=0.8; t=0; } if(l>=document.documentElement.clientWidth-oDiv.offsetWidth) { iSpeedX*=-0.8; l=document.documentElement.clientWidth-oDiv.offsetWidth; } else if(l<=0) { iSpeedX*=-0.8; l=0; } if(Math.abs(iSpeedX)<1) { iSpeedX=0; } if(Math.abs(iSpeedY)<1) { iSpeedY=0; } if(iSpeedX==0 && iSpeedY==0 && t==document.documentElement.clientHeight-oDiv.offsetHeight) { clearInterval(timer); } else { oDiv.style.left=l+'px'; oDiv.style.top=t+'px'; } document.title=iSpeedX; }, 30); }
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript運(yùn)動(dòng)效果與技巧匯總》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動(dòng)畫(huà)特效與技巧匯總》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
小程序如何在不同設(shè)備上自適應(yīng)生成海報(bào)的實(shí)現(xiàn)方法
這篇文章主要介紹了小程序如何在不同設(shè)備上自適應(yīng)生成海報(bào)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08基于JavaScript實(shí)現(xiàn)文件秒傳功能
在互聯(lián)網(wǎng)高速發(fā)展的今天,文件上傳已經(jīng)成為網(wǎng)頁(yè)應(yīng)用中的一個(gè)基本功能,隨著用戶上傳文件尺寸的不斷增大、對(duì)質(zhì)量清晰度的要求也越來(lái)越高,所以本文給大家介紹了如何使用JavaScript實(shí)現(xiàn)文件秒傳功能,需要的朋友可以參考下2024-01-01使用JavaScript判斷圖片是否加載完成的三種實(shí)現(xiàn)方式
有時(shí)需要獲取圖片的尺寸,這需要在圖片加載完成以后才可以,本文有三個(gè)不錯(cuò)的實(shí)現(xiàn)方式在此與大家分享下2014-05-05Javascript實(shí)現(xiàn)仿QQ隨機(jī)數(shù)驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了Javascript實(shí)現(xiàn)仿QQ隨機(jī)數(shù)驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05javascript判斷是手機(jī)還是電腦訪問(wèn)網(wǎng)頁(yè)的簡(jiǎn)單實(shí)例分享
在智能手機(jī)越來(lái)越普及甚至是泛濫的時(shí)候,確實(shí)給大家的生活帶來(lái)了很大的方便,但是對(duì)于web前端設(shè)計(jì)師來(lái)說(shuō),可就麻煩多了,現(xiàn)在很多的網(wǎng)站在制作過(guò)程中都要考慮到手機(jī)訪問(wèn)的問(wèn)題,那么我們?nèi)绾蝸?lái)判斷客戶端是不是手機(jī)呢,下面分享個(gè)例子吧2014-06-06JavaScript中的property和attribute介紹
JavaScript中的property和attribute介紹,需要的朋友可以參考下。2011-12-12