In diesem Artikel werden hauptsächlich zwei Methoden zur Realisierung der parabolischen Flugbahnbewegung eines JS-Balls vorgestellt. Er analysiert die relevanten Berechnungs- und Grafikzeichnungsfähigkeiten von JavaScript, um die parabolische Flugbahn eines kleinen Balls anhand von Beispielen zu realisieren kann darauf verweisen
Die Beispiele in diesem Artikel beschreiben zwei Methoden zur Realisierung der parabolischen Flugbahnbewegung eines JS-Balls. Teilen Sie es als Referenz mit allen:
Die allgemeine Idee, die parabolische Flugbahnbewegung in js zu implementieren:
1 🎜>Methode zur Durchführung einer Intervallaktualisierung und Aktualisierung der Position des Balls, um dynamische Effekte zu erzielensetInterval()
Der Sportbereich kann durch das Flex-Layout vertikal zentriert werden physikalische Formel
S(y)=1/2*g*t* t
, S(x)=V(x)t zur Berechnung des Pfades Bestimmen Sie nun V(x)=4m/s
und das Aktualisierungszeitintervall ist auf 0,1 s eingestellt. Ursprünglich ist die Umrechnung zwischen Pixel und Metern für verschiedene Größen unterschiedlich. In diesem Beispiel wird ein 17-Zoll-Monitor verwendet, der etwa 1 Pixel = 0,4 mm beträgt. Allerdings ist der Browser zu klein, sodass er nur eine parabolische Flugbahn simulieren kann. In diesem Beispiel wird der Abstand zwischen px und Metern auf das 100-fache reduziert.
Erste Methode: Zeichnen Sie den Ball durch den RandradiusIdee: Verwenden Sie
, um den Ball zu zeichnen und ihn relativ zum Ball festzulegen , errechne jedes Mal die aktuelle Position des Balls und ordne sie oben und links zu. Bei der Berechnung der Bewegungsbahn kann die Variable erhöht werden, um die Anzahl der-Aufrufe zu berechnen. Jedes Mal beträgt sie 0,1 s, sodass die Gesamtzeit berechnet werden kann. Der Code lautet wie folgt: border-radius: 50%
<!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>
setInterval
Zweiter Typ: Canvas in h5 zeichnet den Ball und den Bewegungsbereich Idee: Verwenden Sie Canvas zum Zeichnen BallDa sich der Ball nicht nach oben und nach links bewegen kann, muss er bei jedem Aufruf die Leinwand mit „clearRect“ löschen und dann den Ball an der berechneten Position zeichnen. Der Code lautet wie folgt:
<!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>
Das Obige habe ich für alle zusammengestellt. Ich hoffe, dass es in Zukunft für alle hilfreich sein wird.
Verwandte Artikel:
So implementieren Sie eine Webversion des Rechners in JSSo entfernen Sie das #-Zeichen aus der URL in Angular2 (Ausführliches Tutorial) So verwenden Sie die mobile Komponentenbibliothek in Vue.js (ausführliches Tutorial)Das obige ist der detaillierte Inhalt vonWie man mit JS die parabolische Flugbahnbewegung einer kleinen Kugel realisiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!