最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS小球拋物線軌跡運動的兩種實現(xiàn)方法詳解

 更新時間:2017年12月20日 11:15:49   作者:遠(yuǎn)方1234567  
這篇文章主要介紹了JS小球拋物線軌跡運動的兩種實現(xiàn)方法,結(jié)合實例形式分析了javascript實現(xiàn)小球拋物線運動的相關(guān)計算與圖形繪制操作技巧,需要的朋友可以參考下

本文實例講述了JS小球拋物線軌跡運動的兩種實現(xiàn)方法。分享給大家供大家參考,具體如下:

js實現(xiàn)小球拋物軌跡運動的大致思路:

1、用setInterval()方法,進(jìn)行間隔性刷新,更新小球位置,以實現(xiàn)動態(tài)效果
2、繪制小球和運動區(qū)域,運動區(qū)域可通過flex布局實現(xiàn)垂直居中
3、用物理公式S(y)=1/2*g*t*t,S(x)=V(x)t來計算路徑
現(xiàn)確定V(x)=4m/s,刷新的時間間隔設(shè)置為0.1s。原本px和米之間的轉(zhuǎn)換,不同尺寸轉(zhuǎn)換不同,本例采用17寸顯示器,大約1px=0.4mm。但瀏覽器太小,因此只能模擬拋物線軌跡,本例將px和米之間縮成100倍。

第一種:通過border-radius繪制小球

思路:用border-radius: 50%繪制小球,給小球設(shè)置relative,每次計算小球當(dāng)前位置,賦給top和left。計算運動軌跡時,可用變量自增計算setInterval調(diào)用次數(shù),每次是0.1s,這樣可計算總時間。代碼如下:

<!DOCTYPE>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  <title></title>
  <style type="text/css">
  /*給body進(jìn)行flex布局,實現(xiàn)垂直居中*/
  body {
  min-height: 100vh;/*高度適應(yīng)瀏覽器高度*/
  display: flex;
  justify-content: center;/*水平居中*/
  align-items: center;/*垂直居中*/
    font-size: 20px;
    font-weight: bold;
  }
  /*設(shè)置運動區(qū)域*/
  #bg {
    width: 600px;
    height: 600px;
    border: 2px solid #e0e0e0;
    border-radius: 4px;/*給div設(shè)置圓角*/
    padding: 20px;
  }
  /*生成小球,并定義初始位置*/
  #ball {
    border-radius: 50%;/*可把正方形變成圓形,50%即可*/
    background: #e0e0e0;
    width: 60px;
    height: 60px;
    position: relative;
    top: 30px;
    left: 30px;
  }
  button {
    width: 80px;
    height: 30px;
    border-radius: 4px;
    color: #fff;
    background: #AA7ECC;
    font-size: 20px;
    font-weight: bold;
    margin-left: 20px;
  }
  </style>
</head>
<body>
<div id="bg">
  此時水平速度為:4<button onclick="start()">演示</button>
  <div id="ball"></div>
</div>
<script type="text/javascript">
function start(){
  var x,y,k=1,t;
  //x是水平方向移動路徑;y是垂直方向的;k記錄次數(shù),可與0.1相乘得時間;t記錄setInterval的返回id,用于clearInterval
  t = setInterval(function(){
  x = 30+0.1*k*4*100;
    //S(x)=S(0)+t*V(x),100是自定義的米到px轉(zhuǎn)換數(shù)
    y = 30+1/2*9.8*0.1*k*0.1*k*100;//S(y)=S(0)+1/2*g*t*t
  var j = document.getElementById("ball");
    //通過修改小球的top和left,修改小球的位置
    j.style.top = y;
    j.style.left = x;
  k++;//每次調(diào)用,k自增,簡化計算
  if(x>480||y>480){
  clearInterval(t);//小球達(dá)到邊界時,清除setInterval
  }
  },100);//每0.1s調(diào)用一次setInterval的function
}
</script>
</body>
</html>

第二種:h5中的canvas繪制小球和運動區(qū)域

思路:采用canvas繪制小球,由于小球不能通過top和left移動,因此它需要每次調(diào)用都要用clearRect清空畫布,然后繪制計算后位置的小球。代碼如下:

<!DOCTYPE>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  <title></title>
  <style type="text/css">
  body {
  min-height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  }
  #myCanvas {
  box-shadow: -2px -2px 2px #efefef,5px 5px 5px #b9b9b9;
  }
  </style>
</head>
<body>
<canvas id="myCanvas" width="600px" height="600px"></canvas>
<script type="text/javascript">
var x=50,y=50,k=1;
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#e0e0e0";
cxt.beginPath();
cxt.arc(x,y,30,0,Math.PI*2,true);
cxt.closePath();
cxt.fill();
t=setInterval("parabola()",100);
function parabola(){
  cxt.clearRect(0,0,600,600);//清除原始圖形
  cxt.beginPath();
  x=50+0.1*k*4*100;y=50+9.8*0.1*k*0.1*k*1/2*100;
  cxt.arc(x,y,30,0,Math.PI*2,true);
  cxt.closePath();
  cxt.fill();
  k++;
  if(x>520||y>520){
  clearInterval(t);
  }
}
</script>
</body>
</html>

兩個方式都能實現(xiàn),計算的方式都是一樣的,只是方式不同。第一個是偏css,采用了border-radius和動態(tài)修改DOM,第二個采用canvas繪制圖形,繪制過程要好好研究。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript運動效果與技巧匯總》、《JavaScript動畫特效與技巧匯總》、《JavaScript圖形繪制技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • 使用three.js 繪制三維帶箭頭線的詳細(xì)過程

    使用three.js 繪制三維帶箭頭線的詳細(xì)過程

    遇到一個需求,在一個地鐵場景里展示逃生路線,為了畫這個箭頭,我花費了很多時間精力,下面基于使用three.js 繪制三維帶箭頭線的詳細(xì)過程分享給大家,感興趣的朋友一起看看吧
    2021-10-10
  • 關(guān)于微信小程序登錄的那些事

    關(guān)于微信小程序登錄的那些事

    這篇文章主要給大家介紹了關(guān)于微信小程序登錄的那些事,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 前端開發(fā)不得不知的10個最佳ES6特性

    前端開發(fā)不得不知的10個最佳ES6特性

    ES6已經(jīng)不再是JavaScript最新的標(biāo)準(zhǔn),但是它已經(jīng)廣泛用于編程實踐中。下面通過本文給大家分享前端開發(fā)不得不知的10個最佳ES6特性,感興趣的朋友參考下吧
    2017-08-08
  • 微信小程序停止其他視頻播放當(dāng)前視頻的實例代碼

    微信小程序停止其他視頻播放當(dāng)前視頻的實例代碼

    這篇文章主要介紹了微信小程序停止其他視頻播放當(dāng)前視頻的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 怎么選擇Javascript框架(Javascript Framework)

    怎么選擇Javascript框架(Javascript Framework)

    如果你正面臨這樣的問題,希望下面的幾個建議對你在選擇javascript框架上會有所幫助
    2013-11-11
  • JavaScript實現(xiàn)一個簡易的計算器實例代碼

    JavaScript實現(xiàn)一個簡易的計算器實例代碼

    這篇文章主要介紹了JavaScript實現(xiàn)一個簡易的計算器實例代碼,具有很好的參考價值,希望對大家有所幫助,一起跟隨小編過來看看吧
    2018-05-05
  • js處理php輸出時間戳對不上號的解決方法

    js處理php輸出時間戳對不上號的解決方法

    JS時間戳為13位,包含3位毫秒的,而PHP只有10位不包含毫秒的,這就是為什么對不上號原因,處理方法如下
    2014-06-06
  • TypeScript基礎(chǔ)入門教程之三重斜線指令詳解

    TypeScript基礎(chǔ)入門教程之三重斜線指令詳解

    這篇文章主要給大家介紹了關(guān)于TypeScript基礎(chǔ)入門教程之三重斜線指令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • JS代碼計算LocalStorage容量示例詳解

    JS代碼計算LocalStorage容量示例詳解

    這篇文章主要為大家介紹了JS代碼計算LocalStorage容量的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • JS連連看源碼完美注釋版(推薦)

    JS連連看源碼完美注釋版(推薦)

    連連看最難的部分應(yīng)該是路徑搜索,即鼠標(biāo)點的兩點之間看有無可通的路徑。 看過有人寫的遞歸寫法,心里癢癢,就捉摸了一下,發(fā)現(xiàn)不用遞歸的情況下難度也不大
    2013-12-12

最新評論

内黄县| 吴桥县| 收藏| 宣化县| 康马县| 霍林郭勒市| 望奎县| 博罗县| 城口县| 峨眉山市| 柳林县| 南通市| 盐城市| 靖宇县| 塔河县| 天津市| 旬邑县| 孝感市| 微山县| 金湖县| 特克斯县| 枣强县| 搜索| 轮台县| 高要市| 通辽市| 雅江县| 敦化市| 秦皇岛市| 常宁市| 军事| 龙南县| 沁水县| 驻马店市| 平江县| 金华市| 五家渠市| 灌南县| 德庆县| 大方县| 邢台市|