s = 0.5 * a * Math.pow(t,2),关于js动画,从一个公式说起
s = 0.5 * a* t*t
上边这个是高中物理课本关于位移的计算公式,位移等于二分之一乘以a乘以t的平方,a是加速度,t是运动进行的时间(当然啦,初速度为0)。下面我们会应用这个公式完成一个js的加速动画。
我们现在假定以某个div的top值为动画的应用属性,也就是我们的动画过程中始终修改的是div.style.top的值。
这里,我们规定每次动画的时间间隔为 1000 / 60,这个时间是每秒60帧的刷新间隔,以达到人眼注视下能流畅运行动画的一个阈值。
然后我们规定此动画执行时间为t(ms),位移距离为s(px),则在某个时刻的位移公式,可由以下函数推导而出:
function getPosition( timeNow ){
/*
* s = 1/2 * a * t*t
*/
let countTime = t;
let a = (2 *s )/ (countTime*countTime);
return 0.5 * a * Math.pow( timeNow,2);
}
解释:利用位移公式反推a,然后用当前时刻的时间,计算出当前时间的位移。
完整代码和例子可以看下面:
实例
<style>
#test{
position:absolute;
top: 0;
left:0;
width: 75px;
height: 75px;
background: black;
}
</style>
<div id="test"></div>
<script>
let gap = 1000 / 60;
let s = 500;
let t = 200;
animate(test,'top');
function animate(el,prop){
let time = 0;
let position = getPosition(time);
time += gap
if( time !== t ){
move();
}else{ } function move(){
el.style[prop] = position + 'px';
position = getPosition(time);
time += gap;
if( time > t){
time = t;
}
if( time !== t ){
setTimeout(function(){
move();
},gap)
}else{ position = getPosition(time);
el.style[prop] = position + 'px';
} }
} function getPosition( timeNow ){
/*
* s = 1/2 * a * t*t
*/
let countTime = t; let a = (2 *s )/ (countTime*countTime); return 0.5 * a * Math.pow( timeNow,2);
}
</script>
点击 "运行实例" 按钮查看在线实例
s = 0.5 * a * Math.pow(t,2),关于js动画,从一个公式说起的更多相关文章
- 《转》couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145
couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145,有须要的朋友能够參考下. 应为昨天安装的时候没及时 ...
- Javascript四舍五入(Math.round()与Math.pow())
代码 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ ...
- javascript Math.pow 函数 详解
语法 Math.pow(x,y) 定义和用法 pow() 方法可返回 x 的 y 次幂的值. 处理简单数学问题 6的4次方等于1296,记作:64=1296; 求值: Math.pow(6,4)=12 ...
- Math.pow用法及实现探究
pow函数在java.lang.Math类中,是求次方的函数,定义为: public static double pow(double a, double b): 即求a的b次方,例如: public ...
- 定义一个数,它可能为正 也可能为负 var num = Math.pow(-1,parseInt(Math.random() * 2) + 1);
// 定义一个随机数范围从0 ~页面宽度 var x = parseInt(Math.random() * myCanvas.width); // 定义一个随机数 范围从0 ~页面高度 var y = ...
- JavaScipt中的Math.ceil() 、Math.floor() 、Math.round()、Math.pow() 三个函数的理解
以前一直会三个函数的使用产生混淆,现在通过对三个函数的原型定义的理解,其实很容易记住三个函数. 现在做一个总结: 1. Math.ceil()用作向上取整. 2. Math.floor()用作向下取整 ...
- javascript Math.pow 函数 详解 【附】年均增长率计算
语法 Math.pow(x,y) 定义和用法 pow() 方法可返回 x 的 y 次幂的值. 处理简单数学问题 6的4次方等于1296,记作:64=1296; 求值: Math.pow(6,4)=12 ...
- JS中的Math.pow(a,b)方法
定义和用法 pow() 方法可返回 x 的 y 次幂的值. 语法 Math.pow(x,y) 参数 描述 x 必需.底数.必须是数字. y 必需.幂数.必须是数字. 返回值 x 的 y 次幂. 说明 ...
- python语言程序设计基础 习题 天天向上的力量(math.pow)
实例1: 一年365天,,以第一天的能力值为基数1.0,当好好学习时能力值相比前一天提高1%,没有学习时能力值相比前天要降低1%,每天努力和每天放任,一年下来的能力值相差多少? 解析: 如果每天都好好 ...
- Math.pow
一个Math函数,例如:Math.pow(4,3);返回4的三次幂,用法:Math.pow(x,y) x 必需传.底数.必须是数字. y 必需传.幂数.必须是数字. 如果结果是虚数或负数,则该方法将返 ...
随机推荐
- hibernate错误org.hibernate.AnnotationException: No identifier specified for entity:
实体类继承BaseEntity时报错.解决方法:在属性或者get方法上加@Id@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(uniqu ...
- Qt/C++音视频开发66-音频变速不变调/重采样/提高音量/变速变调/倍速播放/sonic库使用
一.前言 之前在做倍速这个功能的时候,发现快速播放会有滴滴滴的破音出现,正常1倍速没有这个问题,尽管这个破音间隔很短,要放大音量才能听到,但是总归是不完美的,后面发现,通过修改qaudiooutput ...
- Qt音视频开发32-qmedia内核回调拿图片数据
一.前言 使用qmediaplayer来打开视频并播放,默认首选会采用QVideoWidget控件来展示,优点是不用自己来绘制,一切交给了QVideoWidget控件,这样可以做到极低的CPU占用,缺 ...
- Qt开发经验小技巧211-215
QMainWindow 在对停靠窗体进行排列的时候,有些不常用的设置容易遗忘,建议将 QMainWindow 的头文件函数过一遍一目了然. //设置停靠参数,不允许重叠,只允许拖动 this-> ...
- Qt通用方法及类库9
函数名 //字节数组转Ascii字符串 static QString byteArrayToAsciiStr(const QByteArray &data); //16进制字符串转字节数组 s ...
- Mongodb 基础与安装
官网链接:https://docs.mongodb.com/ 参考链接:https://www.runoob.com/mongodb/mongodb-linux-install.html 1.什么是M ...
- Linux:安装nodejs
yum安装 自带版本 yum install nodejs 但是版本很低[6.17.1] 高版本 参考:链接 1.删除旧版本 yum remove nodejs 2.添加Node.js Yum存储库 ...
- MySQL5.7x 主从复制
原文链接:https://blog.liuzijian.com/post/9f8ede8e-26de-75d6-6347.html 在MySQL中,主从复制(Master-Slave Replicat ...
- Linux基础命令3:通过名称指定文件、创建文件目录
描述Linux文件系统层次结构概念 /root(root的home目录)/home/username(其它普通用户的home目录)/bin, /usr/bin, /usr/local/bin命令存放处 ...
- AI赋能软件测试:未来已来,你准备好了吗?
ps:文末有福利领取哦 引言 在数字化转型的浪潮中,软件测试作为保障产品质量的关键环节,正面临着前所未有的挑战. 传统的测试方法已难以满足快速迭代和复杂场景的需求,而人工智能(AI)的引入,则为软件测 ...