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

这次给大家带来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,这样可计算总时间。代码如下:

        /*给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;  }  

此时水平速度为:4

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}

登录后复制

第二种:h5中的canvas绘制小球和运动区域

思路:采用canvas绘制小球,由于小球不能通过top和left移动,因此它需要每次调用都要用clearRect清空画布,然后绘制计算后位置的小球。代码如下:

        body {  min-height: 100vh;  display: flex;  justify-content: center;  align-items: center;  }  #myCanvas {  box-shadow: -2px -2px 2px #efefef,5px 5px 5px #b9b9b9;  }  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);  }}

登录后复制

两个方式都能实现,计算的方式都是一样的,只是方式不同。第一个是偏css,采用了border-radius和动态修改DOM,第二个采用canvas绘制图形,绘制过程要好好研究。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

移动组件库cube-ui使用详解

JS的class、构造函数、工厂函数使用方法

以上就是JS怎样让元素沿着抛物线轨迹运动的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2772421.html

(0)
上一篇 2025年3月8日 13:16:39
下一篇 2025年2月27日 13:50:40

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS使用递归实现网页版简洁计算器

    这次给大家带来JS使用递归实现网页版简洁计算器,JS使用递归实现网页版简洁计算器的注意事项有哪些,下面就是实战案例,一起来看一下。 递归实现网页版计算器可以简化代码,设计思路: 1、css+html实现计算器的外观,给每个button绑定n…

    编程技术 2025年3月8日
    000
  • vue.js vue-router提升用户体验

    这次给大家带来vue.js vue-router提升用户体验,vue.js vue-router提升用户体验的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 大家都知道对于单页应用,官方提供了vue-router进行路由跳转的处理,…

    编程技术 2025年3月8日
    200
  • canvas怎么实现轨迹回放

    这次给大家带来canvas怎么实现轨迹回放,canvas实现轨迹回放的注意事项有哪些,下面就是实战案例,一起来看一下。 本文通过json机构,HTML代码以及JS代码详细给大家分析了canvas轨迹回放功能实现的过程,以下是全部内容。 js…

    编程技术 2025年3月8日
    200
  • JS与ajax同源策略在项目中怎样使用

    这次给大家带来JS与ajax同源策略在项目中怎样使用,JS与ajax同源策略在项目中使用的注意事项有哪些,下面就是实战案例,一起来看一下。 一、回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascri…

    编程技术 2025年3月8日
    200
  • 新手必看的js实现异步方法

    这次给大家带来新手必看的js实现异步方法,新手必看js实现的注意事项有哪些,下面就是实战案例,一起来看一下。 某天突然写了个方法要从后台调用数据,显示在前台页面,但是输出结果总是空undefined,得不到数据。多方找资料才发现,原来是入了…

    编程技术 2025年3月8日
    200
  • js怎么实现隔行变色

    这次给大家带来js怎么实现隔行变色,js实现隔行变色的注意事项有哪些,下面就是实战案例,一起来看一下。 function createTable(){ //创建表格 var table = document.createElement(“t…

    编程技术 2025年3月8日
    200
  • 在angularjs中怎样实现echart图表

    这次给大家带来在angularjs中怎样实现echart图表,在angularjs中实现echart图表的注意事项有哪些,下面就是实战案例,一起来看一下。 ehcart是百度做的数据图表,基于原生js。接口和配置都写的很好很易读,还可以用于…

    编程技术 2025年3月8日
    200
  • node.js实现web终端操作多用户

    这次给大家带来node.js实现web终端操作多用户,node.js实现web终端操作多用户的注意事项有哪些,下面就是实战案例,一起来看一下。 terminal(命令行)作为本地IDE普遍拥有的功能,对项目的git操作以及文件操作有着非常强…

    编程技术 2025年3月8日
    200
  • JS动态规划使用详解

    这次给大家带来JS动态规划使用详解,JS动态规划使用的注意事项有哪些,下面就是实战案例,一起来看一下。 其实像在我们前端的开发中,用到的高级算法并不多,大部分情况if语句,for语句,swith语句等等,就可以解决了。稍微复杂的,可能会想到…

    编程技术 2025年3月8日
    200
  • vue-cli脚手架的dev-server.js配置文件使用详解

    这次给大家带来vue-cli脚手架的dev-server.js配置文件使用详解,使用vue-cli脚手架dev-server.js配置文件的注意事项有哪些,下面就是实战案例,一起来看一下。 本文系统讲解vue-cli脚手架build目录中的…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论