ホームページ >ウェブフロントエンド >jsチュートリアル >JS で要素を放物線の軌道に沿って移動させる方法

JS で要素を放物線の軌道に沿って移動させる方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-14 11:19:322831ブラウズ

今回は、JS を使用して要素を放物線の軌道に沿って移動させる方法を説明します。JS で要素を放物線の軌道に沿って移動させるための注意事項は何ですか。実際のケースを見てみましょう。 。

JS で小さなボールの放物線軌道を実装する一般的なアイデア:

1. setInterval() メソッドを使用してインターバルリフレッシュを実行し、ボールの位置を更新してダイナミックな効果を実現します
2. ボールとスポーツエリアを描画します。スポーツエリアは、フレックスレイアウトを通じて垂直方向に中央に配置できます
3. 物理公式を使用します S(y) =1/2*g*t*tS(x)=V(x)tで経路を計算します
これで、V(x)=4m/sと決定され、リフレッシュ時間間隔は 0.1 秒に設定されます。本来、ピクセルとメートルの変換はサイズによって異なります。この例では 17 インチのモニターが使用されており、約 1px=0.4mm です。ただし、ブラウザが小さすぎるため、この例では、ピクセルとメートルの間の距離は 100 分の 1 に縮小されます。

最初のタイプ: ボーダー半径を通してボールを描画します

アイデア: border-radius: 50%绘制小球,给小球设置relative,每次计算小球当前位置,赋给top和left。计算运动轨迹时,可用变量自增计算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>

どちらの方法も実装できますが、計算方法は異なります。 1 つ目は CSS の一部であり、border-radius を使用し、DOM を動的に変更します。2 つ目は、キャンバスを使用してグラフィックを描画します。描画プロセスを注意深く検討する必要があります。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨書籍:

モバイルコンポーネントライブラリcube-uiの使い方の詳しい説明

JSクラス、コンストラクター、ファクトリ関数の使い方

以上がJS で要素を放物線の軌道に沿って移動させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。