JS小球抛物线轨迹运动的两种实现方法详解
网络编程 2021-07-04 17:33www.168986.cn编程入门
这篇文章主要介绍了JS小球抛物线轨迹运动的两种实现方法,结合实例形式分析了javascript实现小球抛物线运动的相关计算与图形绘制操作技巧,需要的朋友可以参考下
本文实例讲述了JS小球抛物线轨迹运动的两种实现方法。分享给大家供大家参考,具体如下
js实现小球抛物轨迹运动的大致思路
1、用setInterval()
方法,进行间隔性刷新,更新小球位置,以实现动态效果
2、绘制小球和运动区域,运动区域可通过flex布局实现垂直居中
3、用物理公式S(y)=1/2gtt,S(x)=V(x)t来计算路径
现确定V(x)=4m/s,刷新的时间间隔设置为0.1s。原本px和米之间的转换,不同尺寸转换不同,本例采用17寸显示器,大约1px=0.4mm。但浏览器太小,只能模拟抛物线轨迹,本例将px和米之间缩成100倍。
第一种通过border-radius绘制小球
思路用border-radius: 50%
绘制小球,给小球设置relative,每次计算小球当前位置,赋给和left。计算运动轨迹时,可用变量自增计算setInterval
调用次数,每次是0.1s,这样可计算总时间。代码如下
<!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;/给div设置圆角/ padding: 20px; } /生成小球,并定义初始位置/ #ball { border-radius: 50%;/可把正方形变成圆形,50%即可/ background: #e0e0e0; width: 60px; height: 60px; position: relative; : 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> <div id="bg"> 此时水平速度为4<button onclick="start()">演示</button> <div id="ball"></div> </div> <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.1k4100; //S(x)=S(0)+tV(x),100是自定义的米到px转换数 y = 30+1/29.80.1k0.1k100;//S(y)=S(0)+1/2gtt var j = document.getElementById("ball"); //通过修改小球的和left,修改小球的位置 j.style. = y; j.style.left = x; k++;//每次调用,k自增,简化计算 if(x>480||y>480){ clearInterval(t);//小球达到边界时,清除setInterval } },100);//每0.1s调用一次setInterval的function } </script> </body> </html>
第二种h5中的canvas绘制小球和运动区域
思路采用canvas绘制小球,由于小球不能通过和left移动,它需要每次调用都要用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.PI2,true); cxt.closePath(); cxt.fill(); t=setInterval("parabola()",100); function parabola(){ cxt.clearRect(0,0,600,600);//清除原始图形 cxt.beginPath(); x=50+0.1k4100;y=50+9.80.1k0.1k1/2100; cxt.arc(x,y,30,0,Math.PI2,true); cxt.closePath(); cxt.fill(); k++; if(x>520||y>520){ clearInterval(t); } } </script> </body> </html>
两个方式都能实现,计算的方式都是一样的,只是方式不同。第一个是偏css,采用了border-radius和动态修改DOM,第二个采用canvas绘制图形,绘制过程要好好研究。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家JavaScript程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程