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