您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

JS怎样让元素沿着抛物线轨迹运动

2024/2/27 10:00:10发布21次查看
这次给大家带来js怎样让元素沿着抛物线轨迹运动,js让元素沿着抛物线轨迹运动的注意事项有哪些,下面就是实战案例,一起来看一下。
js实现小球抛物轨迹运动的大致思路:
1、用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调用次数,每次是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;/*给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中的canvas绘制小球和运动区域
思路:采用canvas绘制小球,由于小球不能通过top和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.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>
两个方式都能实现,计算的方式都是一样的,只是方式不同。第一个是偏css,采用了border-radius和动态修改dom,第二个采用canvas绘制图形,绘制过程要好好研究。
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
移动组件库cube-ui使用详解
js的class、构造函数、工厂函数使用方法
以上就是js怎样让元素沿着抛物线轨迹运动的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product