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动画,从一个公式说起的更多相关文章

  1. 《转》couldn&#39;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,有须要的朋友能够參考下. 应为昨天安装的时候没及时 ...

  2. Javascript四舍五入(Math.round()与Math.pow())

    代码 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ ...

  3. javascript Math.pow 函数 详解

    语法 Math.pow(x,y) 定义和用法 pow() 方法可返回 x 的 y 次幂的值. 处理简单数学问题 6的4次方等于1296,记作:64=1296; 求值: Math.pow(6,4)=12 ...

  4. Math.pow用法及实现探究

    pow函数在java.lang.Math类中,是求次方的函数,定义为: public static double pow(double a, double b): 即求a的b次方,例如: public ...

  5. 定义一个数,它可能为正 也可能为负 var num = Math.pow(-1,parseInt(Math.random() * 2) + 1);

    // 定义一个随机数范围从0 ~页面宽度 var x = parseInt(Math.random() * myCanvas.width); // 定义一个随机数 范围从0 ~页面高度 var y = ...

  6. JavaScipt中的Math.ceil() 、Math.floor() 、Math.round()、Math.pow() 三个函数的理解

    以前一直会三个函数的使用产生混淆,现在通过对三个函数的原型定义的理解,其实很容易记住三个函数. 现在做一个总结: 1. Math.ceil()用作向上取整. 2. Math.floor()用作向下取整 ...

  7. javascript Math.pow 函数 详解 【附】年均增长率计算

    语法 Math.pow(x,y) 定义和用法 pow() 方法可返回 x 的 y 次幂的值. 处理简单数学问题 6的4次方等于1296,记作:64=1296; 求值: Math.pow(6,4)=12 ...

  8. JS中的Math.pow(a,b)方法

    定义和用法 pow() 方法可返回 x 的 y 次幂的值. 语法 Math.pow(x,y) 参数 描述 x 必需.底数.必须是数字. y 必需.幂数.必须是数字. 返回值 x 的 y 次幂. 说明 ...

  9. python语言程序设计基础 习题 天天向上的力量(math.pow)

    实例1: 一年365天,,以第一天的能力值为基数1.0,当好好学习时能力值相比前一天提高1%,没有学习时能力值相比前天要降低1%,每天努力和每天放任,一年下来的能力值相差多少? 解析: 如果每天都好好 ...

  10. Math.pow

    一个Math函数,例如:Math.pow(4,3);返回4的三次幂,用法:Math.pow(x,y) x 必需传.底数.必须是数字. y 必需传.幂数.必须是数字. 如果结果是虚数或负数,则该方法将返 ...

随机推荐

  1. ERROR: manifest for hyperledger/fabric-orderer:latest not found

    In docker command # pull to local before using itdocker pull hyperledger/fabric-orderer:x86_64-1.0.0 ...

  2. Qt编写可视化大屏电子看板系统18-柱状分组图

    一.前言 柱状分组图是柱状堆积图的衍生或者另外一种展示效果,设置的数据值数据源集合完全一样,只不过就是把柱子给拿下来了放在旁边,然后一个分组多个柱子横向排列,不同分组之间有一定的空隙隔开,默认QCus ...

  3. Qt音视频开发2-vlc回调处理

    一.前言 用句柄来显示视频,方便是很方便,但是有个缺点就是不能拿到实时视频的每张图片的数据,这个就比较讨厌,大部分的监控行业的应用,除了截图以外,很可能需要拿到图片自己做一些处理的,而且拿到图片自己绘 ...

  4. [转]OpenCV_Find Basis F-Matrix and computeCorrespondEpilines(获取一对图像的基础矩阵及对应极线)

    代码如下: // BasisMatrixCalculate.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <ios ...

  5. [转]Error: Node Sass does not yet support your current environment: Windows 64-bit

    错误日志:Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported ...

  6. elasticsearch数据导出和导入

    数据导入和导出依赖于命令 elasticdump 数据导出 #!/bin/bash ES=http://ip:port ED=数据保存位置 datename=$(date +%Y-%m-%d) #da ...

  7. 记录vue和element-ui导出表格到excell

    1.安装插件 npm install 'file-saver' npm install 'xlsx' 2.引入插件 import FileSaver from 'file-saver' import ...

  8. Elasticsearch应用介绍

    Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Luce ...

  9. nginx平台初探-3

    过滤模块简介 (90%) 执行时间和内容 (90%) 过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理.它的处理时间在获取回复内容之后,向用户发送响应之前.它的处理过程分 ...

  10. JVM虚拟机---常用JVM配置参数

    常用JVM配置参数 常用JVM配置参数主要有:Trace跟踪参数.堆的分配参数.栈的分配参数. 一.Trace跟踪参数 跟踪参数用于跟踪监控JVM,对于开发人员来讲用于JVM调优以及故障排查的. 1. ...