运动轨迹 php,两种JS实现小球抛物线轨迹运动的方法
本文主要介绍了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实现小球抛物线轨迹运动的方法相关推荐
- 两种 js下载文件的方法(转)
2019独角兽企业重金招聘Python工程师标准>>> 两种 js下载文件的方法(转) functionDownURL(strRemoteURL, strLocalURL){try{ ...
- iphone已停用怎么解锁_两种无密码解锁iPhone锁屏密码的方法
现在很多手机都配备指纹解锁功能,大家平时用惯了指纹解锁,有时候在需要输入锁屏密码的时候反倒记不清密码是什么了.像是手机重启后就需要输入密码解锁,iPhone锁屏密码忘了怎么办? 多次输入错误密码还可能 ...
- python列表去重函数_对python中两种列表元素去重函数性能的比较方法
测试函数: 第一种:list的set函数 第二种:{}.fromkeys().keys() 测试代码: #!/usr/bin/python #-*- coding:utf-8 -*- import t ...
- 两种在QGIS中打开CAD文件的方法
概述 经常使用ArcGIS.Global Mapper和水经微图打开CAD文件,一般都是直接拖进去或者点一下类似打开的按钮就可以打开CAD文件,但是当直接把CAD文件拖入到QGIS的时候会报错,所以查 ...
- 两种土壤细菌群落结构高通量绝对定量方法
本文转载自"微生物生态",己获授权 1. 研究背景 在宏观生态学研究中,物种的种类.物种绝对含量和物种相对丰度是描述群落结构的三个必备指标.聚焦土壤微生物生态研究,高通量测序分析技 ...
- 小折腾:JavaScript与元素间的抛物线轨迹运动
小折腾:JavaScript与元素间的抛物线轨迹运动 这篇文章发布于 2013年12月30日,星期一,20:40,归类于 js实例. 阅读 61147 次, 今日 55 次 by zhangxinxu ...
- 两种参数类型_深入理解Java中方法的参数传递机制
形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. ...
- 两种解决IE6不支持固定定位的方法
有两种让IE6支持position:fixed 1.用CSS执行表达式 *{margin:0;padding:0;} * html,* html body{ background-image:url( ...
- 【DevCloud · 敏捷智库】两种你必须了解的常见敏捷估算方法
摘要:本文主要介绍最常用的两种估算方法:计划扑克估算和敏捷估算2.0. 背景 在某开发团队辅导的回顾会议上,团队成员对于优化估计具体方法上达成了一致意见.询问是否有什么具体的估计方法来做估算. 问题分 ...
- popoupwindow 点击背景消失_两种去除背景音乐保留原声的高效方法
方法一:Au软件提取人声法 一.Pr工序部分 ①打开pr,导入所需要的用到的视频素材. ②截取所需要用到的人声素材. ③导出素材,选择MP3格式,开始导入指定文件夹.这样相比于导出MP4格式的视频来说 ...
最新文章
- 科研福利!国内TOP3的超算中心,免费领2000核时计算资源
- 后缀数组模板 (详细注释)
- 一文读懂python中数据纬度是怎么数的。
- R语言——R和RStudio软件下载及安装
- 作文 进入中职计算机班,我的中职生活作文(精选5篇)
- Notepad++实用插件整理(Json Viewer、Compare、Explorer、AnalysePlugin)
- NOIP2014 Day1T1生活大爆炸版石头剪刀布 模拟
- ipados 蓝牙 android,iPadOS13.4对于无线或蓝牙鼠标的兼容性… - Apple 社区
- 2021年美容师(高级)考试资料及美容师(高级)考试技巧
- Python对5支股票的投资组合进行分析
- 认识一下网关,路由器,交换机,猫
- linux 启动openfire
- 火车头采集器如何自制php插件
- 温湿度控制系统c语言,基于单片机的温湿度控制系统设计
- CS231n课程笔记翻译5:反向传播笔记
- FSC-COC供应链管理体系认证、认证培训标准、审核清单、认证公司
- #北工大#男生自宫事件? 太狠了!称性欲影响学业,最新情况...
- python调用hypermesh调用tcl_TCL/TK编程之语法与hypermesh api讲解
- 活动目录(Active Directory)域故障解决实例(二)
- Android Gallery2 开发经验整理
热门文章
- hbase数据库scan操作_HBase scan命令详解
- 社会管理网格化 源码_【西市场快讯】槐荫区委政法委副书记李岩雍赴西市场街道督导网格化管理工作...
- c语言入门这一篇就够了-学习笔记(一万字)
- php计算macd,php交易者macd返回false
- python批量发送邮件_EDM营销算法:python自动批量发邮件
- win10安装Visual Studio2019时卡在了提取文件处
- CentOS修改时间和时区
- iOS前后台切换和监听
- 今天正式入伏了,最全的三伏开运养生习俗都在这里了!!
- 无法创建新的分区也找不到现有的分区