AEJoy —— 表达式之归位(复位)模拟详解【JS】

简介: AEJoy —— 表达式之归位(复位)模拟详解【JS】

效果图

归位(back)

205cc42b667597b0b20427e4d98eb92c.gif

表达式代码与注释

var s = 1.70158; ///< 用于 "归位" 的超越量
/// @note 归位函数
function outBack(t, b, c, d) {
    if (s == null)
        s = 1.70158;
    return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
}
/// @note 实际调用弹性函数的缓动函数
function easeAndWizz() {
    var n = 0;
    /// @note 确保关键帧帧数是大于 0 的
    if (numKeys > 0) {
        n = nearestKey(time).index; ///< 获取最近的关键帧索引
        if (key(n).time > time) { ///< 如果最近的关键帧所处时间在当前时间之后(即时间还没到)
            n--; ///< 则取前一个关键帧的索引
        }
    }
    try {
        /// @note 前后两个关键帧
        var key1 = key(n);
        var key2 = key(n + 1);
    } catch (e) {
        return null;
    }
    /// @note 确定关键帧需要的数据维度
    var dim = 1; ///< 该属性至少是一维的
    try {
        key(1)[1]; ///< 数据有第二维度
        dim = 2;
        key(1)[2]; ///< 数据有第三维度
        dim = 3;
    } catch (e) { }
    t = time - key1.time; ///< 当前时间和前一个关键帧的时间差
    d = key2.time - key1.time; ///< 前后俩关键帧的时间差
    /// @note 计算关键帧上的属性,用于后期的弹性计算
    /// 一维
    sX = key1[0];
    eX = key2[0] - key1[0];
    /// @note 二维
    if (dim >= 2) {
        sY = key1[1];
        eY = key2[1] - key1[1];
        /// @note 三维
        if (dim >= 3) {
            sZ = key1[2];
            eZ = key2[2] - key1[2];
        }
    }
    if ((time < key1.time) || (time > key2.time)) {
        return value;
    } else {
        /// @note 进行归位计算
        val1 = outBack(t, sX, eX, d);
        /// @note 同样分为三个维度进行计算
        switch (dim) {
            case 1:
                return val1;
                break;
            case 2:
                val2 = outBack(t, sY, eY, d);
                return [val1, val2];
                break;
            case 3:
                val2 = outBack(t, sY, eY, d);
                val3 = outBack(t, sZ, eZ, d);
                return [val1, val2, val3];
                break;
            default:
                return null;
        }
    }
}
(easeAndWizz() || value);
目录
打赏
0
0
0
0
5
分享
相关文章
解密EDAS新一代应用发布系统
本文针对 企业级分布式应用服务( EDAS ) 应用生命周期管理所使用的发布单系统进行介绍,包括背景、设计目标、设计方案、功能介绍等,新开发的发布单系统实现了变更过程的流程化、任务化、可视化,发布流程可定制,支持多种变更策略,自2017年8月上线以来,承担着 EDAS 生命周期管理操作。
6345 0
MongoDB ObjectId详解及使用
MongoDB中我们经常会接触到一个自动生成的字段:”_id”,类型为ObjectId。 本文详解ObjectId的构成和使用。 ObjectId构成 之前我们使用MySQL等关系型数据库时,主键都是设置成自增的。
1280 0
实时数仓 Hologres产品使用合集之如何针对模糊匹配查询设置索引
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
一篇文章让你搞懂浮点数在内存中的存储机制[保姆级教学]
一篇文章让你搞懂浮点数在内存中的存储机制[保姆级教学]
使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(6)
接下来我们讨论一下关于创建存储组的相关方面,在这里值得注意的是,当路径本身或路径的父/子层已经被设置为存储组时,则不允许将路径设置为存储组。例如,设置是不可行的​​root.ln.wf01​​存在两个存储组时,作为一个存储组​​root.ln​​和​​root.sgcc​​。系统会给出相应的错误提示。
364 0
看完就懂-SpringSecurity+JWT 实现单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统
711 0
一文入门卷积神经网络:CNN通俗解析
CNN基础知识介绍及TensorFlow具体实现,对于初学者或者求职者而言是一份不可多得的资料。
19883 0
vue_按需引入elment、echarts和路由懒加载,减少打包体积
vue_按需引入elment、echarts和路由懒加载,减少打包体积
258 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等