本文主要介绍了JS小球抛物线轨迹运动的两种实现方法,结合实例形式分析了javascript实现小球抛物线运动的相关计算与图形绘制操作技巧,需要的朋友可以参考下,希望能帮助到大家。

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绘制图形,绘制过程要好好研究。

相关推荐:

运动轨迹 php,两种JS实现小球抛物线轨迹运动的方法相关推荐

  1. 两种 js下载文件的方法(转)

    2019独角兽企业重金招聘Python工程师标准>>> 两种 js下载文件的方法(转) functionDownURL(strRemoteURL, strLocalURL){try{ ...

  2. iphone已停用怎么解锁_两种无密码解锁iPhone锁屏密码的方法

    现在很多手机都配备指纹解锁功能,大家平时用惯了指纹解锁,有时候在需要输入锁屏密码的时候反倒记不清密码是什么了.像是手机重启后就需要输入密码解锁,iPhone锁屏密码忘了怎么办? 多次输入错误密码还可能 ...

  3. python列表去重函数_对python中两种列表元素去重函数性能的比较方法

    测试函数: 第一种:list的set函数 第二种:{}.fromkeys().keys() 测试代码: #!/usr/bin/python #-*- coding:utf-8 -*- import t ...

  4. 两种在QGIS中打开CAD文件的方法

    概述 经常使用ArcGIS.Global Mapper和水经微图打开CAD文件,一般都是直接拖进去或者点一下类似打开的按钮就可以打开CAD文件,但是当直接把CAD文件拖入到QGIS的时候会报错,所以查 ...

  5. 两种土壤细菌群落结构高通量绝对定量方法

    本文转载自"微生物生态",己获授权 1. 研究背景 在宏观生态学研究中,物种的种类.物种绝对含量和物种相对丰度是描述群落结构的三个必备指标.聚焦土壤微生物生态研究,高通量测序分析技 ...

  6. 小折腾:JavaScript与元素间的抛物线轨迹运动

    小折腾:JavaScript与元素间的抛物线轨迹运动 这篇文章发布于 2013年12月30日,星期一,20:40,归类于 js实例. 阅读 61147 次, 今日 55 次 by zhangxinxu ...

  7. 两种参数类型_深入理解Java中方法的参数传递机制

    形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. ...

  8. 两种解决IE6不支持固定定位的方法

    有两种让IE6支持position:fixed 1.用CSS执行表达式 *{margin:0;padding:0;} * html,* html body{ background-image:url( ...

  9. 【DevCloud · 敏捷智库】两种你必须了解的常见敏捷估算方法

    摘要:本文主要介绍最常用的两种估算方法:计划扑克估算和敏捷估算2.0. 背景 在某开发团队辅导的回顾会议上,团队成员对于优化估计具体方法上达成了一致意见.询问是否有什么具体的估计方法来做估算. 问题分 ...

  10. popoupwindow 点击背景消失_两种去除背景音乐保留原声的高效方法

    方法一:Au软件提取人声法 一.Pr工序部分 ①打开pr,导入所需要的用到的视频素材. ②截取所需要用到的人声素材. ③导出素材,选择MP3格式,开始导入指定文件夹.这样相比于导出MP4格式的视频来说 ...

最新文章

  1. 科研福利!国内TOP3的超算中心,免费领2000核时计算资源
  2. 后缀数组模板 (详细注释)
  3. 一文读懂python中数据纬度是怎么数的。
  4. R语言——R和RStudio软件下载及安装
  5. 作文 进入中职计算机班,我的中职生活作文(精选5篇)
  6. Notepad++实用插件整理(Json Viewer、Compare、Explorer、AnalysePlugin)
  7. NOIP2014 Day1T1生活大爆炸版石头剪刀布 模拟
  8. ipados 蓝牙 android,iPadOS13.4对于无线或蓝牙鼠标的兼容性… - Apple 社区
  9. 2021年美容师(高级)考试资料及美容师(高级)考试技巧
  10. Python对5支股票的投资组合进行分析
  11. 认识一下网关,路由器,交换机,猫
  12. linux 启动openfire
  13. 火车头采集器如何自制php插件
  14. 温湿度控制系统c语言,基于单片机的温湿度控制系统设计
  15. CS231n课程笔记翻译5:反向传播笔记
  16. FSC-COC供应链管理体系认证、认证培训标准、审核清单、认证公司
  17. #北工大#男生自宫事件? 太狠了!称性欲影响学业,最新情况...
  18. python调用hypermesh调用tcl_TCL/TK编程之语法与hypermesh api讲解
  19. 活动目录(Active Directory)域故障解决实例(二)
  20. Android Gallery2 开发经验整理

热门文章

  1. hbase数据库scan操作_HBase scan命令详解
  2. 社会管理网格化 源码_【西市场快讯】槐荫区委政法委副书记李岩雍赴西市场街道督导网格化管理工作...
  3. c语言入门这一篇就够了-学习笔记(一万字)
  4. php计算macd,php交易者macd返回false
  5. python批量发送邮件_EDM营销算法:python自动批量发邮件
  6. win10安装Visual Studio2019时卡在了提取文件处
  7. CentOS修改时间和时区
  8. iOS前后台切换和监听
  9. 今天正式入伏了,最全的三伏开运养生习俗都在这里了!!
  10. 无法创建新的分区也找不到现有的分区