この記事では、JS ボールの放物線運動を実現するための 2 つの方法を主に紹介し、小さなボールの放物線軌道を実現するための JavaScript の関連計算とグラフィックス描画操作スキルを分析します。
この記事の例では、JS ボールの放物線運動の 2 つの実装方法を説明します。参考までに皆さんと共有してください。詳細は次のとおりです:
js でボールの放物線の軌道を実装する一般的なアイデア:
1. setInterval()
メソッドを使用します。インターバル更新を実行し、ボールの位置を更新します。ダイナミックな効果を実現します。
2. フレックス レイアウトにより、スポーツ エリアを垂直方向に中央に配置できます。
3. S(y) =1/2*g*t*tsetInterval()
方法,进行间隔性刷新,更新小球位置,以实现动态效果
2、绘制小球和运动区域,运动区域可通过flex布局实现垂直居中
3、用物理公式S(y)=1/2*g*t*t,S(x)=V(x)t来计算路径
现确定V(x)=4m/s,刷新的时间间隔设置为0.1s。原本px和米之间的转换,不同尺寸转换不同,本例采用17寸显示器,大约1px=0.4mm。但浏览器太小,因此只能模拟抛物线轨迹,本例将px和米之间缩成100倍。
第一种:通过border-radius绘制小球
思路:用border-radius: 50%
绘制小球,给小球设置relative,每次计算小球当前位置,赋给top和left。计算运动轨迹时,可用变量自增计算setInterval
、S(x)=V(x)t
、リフレッシュ時間間隔は 0.1s に設定されています。本来、ピクセルとメートルの変換はサイズによって異なります。この例では 17 インチのモニターが使用されており、約 1px=0.4mm です。ただし、ブラウザが小さすぎるため、この例では、ピクセルとメートルの間の距離は 100 分の 1 に縮小されます。 最初の方法: border-radius を通してボールを描画します
アイデア: border-radius: 50%
を使用してボールを描画し、ボールを基準にして設定し、ボールを計算します毎回現在位置が上と左に割り当てられます。モーション軌跡を計算するとき、変数を増分して setInterval
呼び出しの回数を計算します (毎回 0.1 秒)。これにより、合計時間を計算できます。コードは次のとおりです:
<!DOCTYPE> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> /*给body进行flex布局,实现垂直居中*/ body { min-height: 100vh;/*高度适应浏览器高度*/ display: flex; justify-content: center;/*水平居中*/ align-items: center;/*垂直居中*/ font-size: 20px; font-weight: bold; } /*设置运动区域*/ #bg { width: 600px; height: 600px; border: 2px solid #e0e0e0; border-radius: 4px;/*给p设置圆角*/ 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> <p id="bg"> 此时水平速度为:4<button onclick="start()">演示</button> <p id="ball"></p> </p> <script type="text/javascript"> function start(){ var x,y,k=1,t; //x是水平方向移动路径;y是垂直方向的;k记录次数,可与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转换数 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++;//每次调用,k自增,简化计算 if(x>480||y>480){ clearInterval(t);//小球达到边界时,清除setInterval } },100);//每0.1s调用一次setInterval的function } </script> </body> </html>
2 番目: h5 のキャンバスでボールとスポーツ エリアを描画します
アイデア: ボールを描画するにはキャンバスを使用します。ボールは上と左を移動できないため、呼び出す必要があります。毎回、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>
以上がJSを使って小さなボールの放物線運動を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。