Heim  >  Artikel  >  Web-Frontend  >  Wie man Elemente in JS entlang einer parabolischen Flugbahn bewegt

Wie man Elemente in JS entlang einer parabolischen Flugbahn bewegt

php中世界最好的语言
php中世界最好的语言Original
2018-04-14 11:19:322731Durchsuche

Dieses Mal zeige ich Ihnen, wie Sie JS verwenden, um Elemente entlang einer parabolischen Flugbahn zu bewegen. Was sind die Vorsichtsmaßnahmen für die Verwendung von JS, um Elemente entlang einer parabolischen Flugbahn zu bewegen? Ein praktischer Fall.

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

1. Verwenden Sie die Methode setInterval(), um eine Intervallaktualisierung durchzuführen und die Position des Balls zu aktualisieren, um dynamische Effekte zu erzielen.
2. Zeichnen Sie den Ball und den Sportbereich. Der Sportbereich kann durch das Flex-Layout vertikal zentriert werden.
. Verwenden Sie die physikalische Formel S(y)=1/2*g*t*t, S(x)=V(x)t, um den Pfad zu berechnen
Bestimmen Sie nun V (x)=4m/s, das Aktualisierungsintervall 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.

Die erste Methode: Zeichnen Sie den Ball durch den Randradius

Idee: Zeichnen Sie mit border-radius: 50% den Ball, stellen Sie ihn relativ zum Ball ein, berechnen Sie jedes Mal die aktuelle Position des Balls und weisen Sie ihn 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 Bälle und Bewegungsbereiche

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>

Beide Methoden können implementiert werden. Die Berechnungsmethode ist dieselbe, die Methode ist 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.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Detaillierte Erläuterung der Verwendung der mobilen Komponentenbibliothek Cube-UI

JS-Klasse, Konstruktor, Factory-Funktion So verwenden Sie

Das obige ist der detaillierte Inhalt vonWie man Elemente in JS entlang einer parabolischen Flugbahn bewegt. 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