이 글에서는 JS 공의 포물선 궤적 동작을 구현하는 두 가지 방법을 주로 소개합니다. 작은 공의 포물선 궤적을 구현하기 위한 JavaScript의 관련 계산 및 그래픽 그리기 작업 기술을 예제 형식으로 소개합니다. 그것이 모두에게 도움이 되기를 바랍니다.
JS에서 공의 포물선 궤적을 구현하는 일반적인 아이디어:
1 setInterval()
메서드를 사용하여 간격 새로 고침을 수행하고 공의 위치를 업데이트하여 동적 효과를 얻습니다. setInterval()
方法,进行间隔性刷新,更新小球位置,以实现动态效果
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
2. 공 그리기 그리고 스포츠 영역은 Flex 레이아웃을 통해 수직으로 중앙에 배치될 수 있습니다.
S(y)=1/2*g*t*t
,
경로 는 이제 V(x)=4m/s로 결정되었으며 새로 고침 시간 간격은 0.1초로 설정되었습니다. 원래 px와 미터 간의 변환은 크기에 따라 다릅니다. 이 예에서는 1px=0.4mm 정도인 17인치 모니터를 사용했습니다. 그러나 브라우저가 너무 작기 때문에 포물선 궤적만 시뮬레이션할 수 있습니다. 이 예에서는 px와 미터 사이의 거리가 100배로 줄어듭니다.
첫 번째 방법: 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>
두 번째: 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>
두 가지 방법 모두 구현할 수 있습니다. 계산 방법은 동일하지만 방법이 다릅니다. 첫 번째는 border-radius를 사용하고 DOM을 동적으로 수정하는 CSS의 일부입니다. 두 번째는 캔버스를 사용하여 그래픽을 그리는 과정을 주의 깊게 연구해야 합니다.
🎜관련 권장 사항: 🎜🎜🎜제품 포물선을 구현하기 위한 JavaScript🎜🎜🎜🎜js의 탄성 위치 에너지 애니메이션의 포물선 운동에 대한 코드 케이스 장바구니에 추가 특수 효과 javascript🎜🎜Tips_🎜🎜🎜🎜장바구니에 추가 포물선 기반 구현 jquery fly 플러그인 애니메이션 effect_jquery🎜🎜위 내용은 작은 공의 포물선 궤적 운동을 구현하는 두 가지 JS 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!