高中物理学运动公式实现js动画

本文探讨了如何使用JavaScript实现基于高中物理学运动公式的动画,包括匀速、匀加速、匀减速运动以及更复杂的抛物线、简谐摆动等。通过封装动画函数和动画队列管理,实现了一系列动画效果,如小球的弹跳和滚动等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网页上创建动画一般有两种方式:css和javascript。它们在创建动画的时间和性能上是不一样的,各有利弊。选择哪种方法实际上取决于项目,以及想要实现什么类型的动画。

一般使用css动画来实现比较简单的“一次性转换”,为UI元素转换比较小的独立状态。例如从侧面引入导航栏菜单,模太框弹出等。
要实现高级效果时,例如弹跳,加速,减速等比较复杂的动画,则使用Javascript动画。现在有很多比较好的JS动画框架,例如TweenMax,Velocity,animo.js,jquery。

不管是css还是javascript来创建动画,我们都会听到一个词“缓动”。自然界中没有东西从一点呈线性的移动到另一点,一般可能需要加速或减速。在经典动画中,经常会出现“缓入”,“缓出”,“缓入缓出”效果。缓动使动画不再那么尖锐或生硬。
css中,我们要想达到这些效果,只需要使用一些关键字:
* linear
* ease-in
* ease-out
* ease-in-out

那这么关键字的背后到底是什么原理呢?如何用javascript来实现这些缓动效果。

动画是关于时间的函数,本质就是利用浏览器和GPU的渲染过程定时改变元素的属性。

使用javascript实现动画时一般是使用requestAnimationFrame,我们可能经常也会用setInterval和setTimeout来实现动画,但是它们实现的动画都不会与屏幕的刷新率同步,并且很可能出现抖动和跳帧,例如jQuery就是采用setInterval来实现动画,所以jQuery动画的帧率会偏低(jQuery为甚么不采用RAF)。

“Talk is cheap, show me the code”。下面学习实现下月影总结的动画原理。原理简单,实现经典。

常见运动

  1. 匀速运动

    让小球在2s内向右匀速移动200px

    • 时间: t = T * p
    • 位移: St = S * p = v * t
    • 速度: v = St / t = S / T
    • 加速度: a = 0
circle.on('click', function() {
   
    var self = this;
    var startTime = Date.now();
    var distance = 200;
    var T = 2000;
    requestAnimationFrame(function step() {
   
        var p = Math.min(1.0, (Date.now() - startTime) / T);
        self.style.transform = 'translateX(' + (distance * p) + 'px)';
        if(p < 1.0){
            requestAnimationFrame(step);
        }
    })
})

匀速运动

2.匀加速运动

让小球在2s内向右匀加速向右移动200px, 速度从0开始
* 时间: t = T * p
* 位移: St = S * p^2 = (S * t^2) / T^2
* 速度: v = (2*S / T^2) * t = 2Sp/T
* 加速度 a = 2*S / T^2

circle.on('click', function() {
   
        var self = this;
        var startTime = Date.now();
        var distance = 200;
        var T = 2000;
        requestAnimationFrame(function step() {
   
            var p = Math.min(1.0, (Date.now() - startTime) / T);
            self.style.transform = 'translateX(' + (distance * p * p) + 'px)';
            if(p < 1.0){
                requestAnimationFrame(step);
            }
        })
    })

匀加速

3.匀减速运动

让小球在2s内向右匀减速向右移动200px, 速度从最大减为0
* 时间: t = T * p
* 位移: St = (2*S / T) * t - (S / T^2) * t^2 = Sp * (2 - p)
* 速度: v = 2*S / T - 2*S / t^2 * t
* 加速度 a = -2*S / T^2

circle.on('click', function() {
   
        var self = this;
        var startTime = Date.now();
        var distance = 200;
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值