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ù)的問題,因?yàn)榧偃缢俣仁切?shù),正的沒問題,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)畫特效與技巧匯總》、《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)方法,文中通過示例代碼介紹的非常詳細(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-05
Javascript實(shí)現(xiàn)仿QQ隨機(jī)數(shù)驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了Javascript實(shí)現(xiàn)仿QQ隨機(jī)數(shù)驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
javascript判斷是手機(jī)還是電腦訪問網(wǎng)頁(yè)的簡(jiǎn)單實(shí)例分享
在智能手機(jī)越來(lái)越普及甚至是泛濫的時(shí)候,確實(shí)給大家的生活帶來(lái)了很大的方便,但是對(duì)于web前端設(shè)計(jì)師來(lái)說(shuō),可就麻煩多了,現(xiàn)在很多的網(wǎng)站在制作過程中都要考慮到手機(jī)訪問的問題,那么我們?nèi)绾蝸?lái)判斷客戶端是不是手機(jī)呢,下面分享個(gè)例子吧2014-06-06
JavaScript中的property和attribute介紹
JavaScript中的property和attribute介紹,需要的朋友可以參考下。2011-12-12

