网站首页 > 技术文章 正文
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>
运行实例 ?
点击 "运行实例" 按钮查看在线实例
- 上一篇: 如何计算完全二叉树的节点数 完全二叉树怎么算
- 下一篇: 程序性能优化利器 - 位运算的使用技巧
猜你喜欢
- 2024-11-09 极客算法训练笔记(十),十大经典排序之计数排序、基数排序
- 2024-11-09 Axure RP 9 学习笔记 - 常用数学函数
- 2024-11-09 判断坐标点是否在高德地图围栏内的算法?
- 2024-11-09 Quick Pow: 如何快速求幂 快速幂算法
- 2024-11-09 十六、Java运算符-优先级与表达式
- 2024-11-09 抖音B站…推荐机制的原型,威尔逊得分排序算法
- 2024-11-09 浅谈移动设备交互体验之惯性滚动 惯性移轴定理
- 2024-11-09 JS中常见的Math对象 javascript中math
- 2024-11-09 力扣73——矩阵置零 矩阵置0
- 2024-11-09 基数排序的1个小技巧,2种排序方式,3种排序算法
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-