Heim  >  Artikel  >  Web-Frontend  >  Zwei JS-Methoden zur Realisierung einer parabolischen Flugbahnbewegung kleiner Kugeln

Zwei JS-Methoden zur Realisierung einer parabolischen Flugbahnbewegung kleiner Kugeln

小云云
小云云Original
2017-12-21 14:27:372703Durchsuche

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 Es kann sich darauf beziehen. Ich hoffe, es kann jedem helfen.

Die allgemeine Idee, die parabolische Flugbahn des Balls in js zu implementieren:

1. Verwenden Sie die setInterval()-Methode, um eine Intervallaktualisierung durchzuführen und die Position des Balls zu aktualisieren, um Dynamik zu erzielen Effekte
2. Zeichnen Sie den Ball und den Bewegungsbereich durch das Flex-Layout
3. Verwenden Sie die physikalische Formel S(y)=1/2*g*t*t , S( x)=V(x)t zur Berechnung des Pfades
Bestimmen Sie nunV(x)=4m/s und das Aktualisierungszeitintervall auf 0,1s 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 Randradius

Idee: Verwenden Sie border-radius: 50%, 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 setInterval-Aufrufe zu berechnen. Jedes Mal beträgt sie 0,1 s, sodass die Gesamtzeit berechnet werden kann. 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进行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>

Zweiter Typ: Leinwand in h5 zeichnet den Ball- und Bewegungsbereich

Idee: Verwenden Sie die Leinwand, um den Ball zu zeichnen. Da sich der Ball nicht nach oben und nach links bewegen kann, muss er bei jedem Aufruf die Leinwand 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>

Die Berechnungsmethoden sind gleich, die Methoden sind jedoch unterschiedlich. Die erste Variante basiert teilweise auf CSS, verwendet border-radius und verändert das DOM dynamisch. Die zweite Variante verwendet Canvas zum Zeichnen von Grafiken. Der Zeichenprozess sollte sorgfältig studiert werden.

Verwandte Empfehlungen:

Codefall für parabolische Bewegung der Animation elastischer potentieller Energie in JavaScript

JS implementiert den Spezialeffekt der Produktparabel Zum Warenkorb hinzugefügt JavascriptTips_

Zum Warenkorb hinzufügen Parabolischer Animationseffekt basierend auf JQuery Fly Plug-in_jQuery

Das obige ist der detaillierte Inhalt vonZwei JS-Methoden zur Realisierung einer parabolischen Flugbahnbewegung kleiner Kugeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn