使用 requestAnimationFrame 实现 js 动画--成交额动画

前言: 我们经常在购物平台网站上看到一些动画效果,这些动画不是 css 样式动画,而是内容发生改变后开始动画,如果,成交额动画,有一个值变化到另外一个值的时候,一位一位的去动,看起来很炫酷,其实,这就是 js 动画。

css 动画和 js 动画的区别

css 动画

优点:

  • 简单易用:可以通过CSS属性来控制动画效果,不需要编写复杂的JavaScript代码,常用的属性有animation, transtion。
  • 性能较好:使用GPU加速,可以实现流畅的动画效果,如transform: translateZ, will-change。
  • 兼容性好:大部分现代浏览器都支持CSS动画。

缺点:

  • 功能受限:只能实现一些简单的动画。

  • 缺乏交互性:CSS 动画通常只能在元素加载时播放一次,或者一直重复相同的动画,不能根据用户行为进行交互。

js 动画

优点:

  • 功能强大:可以通过编写 js 代码实现复杂的动画效果,可以控制元素的位置、大小、颜色等属性。

  • 可交互性:可以根据用户行为进行交互,例如点击、拖拽等。

缺点:

  • 编写复杂:需要编写一定的 js 代码,可能需要使用第三方库来简化操作。

  • 性能较差:如果动画效果过于复杂,可能会影响网页的性能,导致卡顿或闪烁,对于技术要求比较高。

css 动画适合实现一些简单的动画效果,例如过渡、旋转、缩放等;而 js 动画适合实现复杂的动画效果,例如路径动画、物理动画等。在选择使用css 动画还是 js 动画时,需要根据具体需求和场景来进行权衡。

使用 js 动画实现交易额动画化

// start代表开始值,to代表结束值, duration是动画时间, fn是具体交互回调
function animation(start, to, duration, fn) {
    const startTime = Date.now();
    const diff = to - start;
    const dep = diff / duration;
    let value = start;
    fn(value);
    function _run() {
        const now = Date.now();
        const time = now - startTime;
        if (time >= duration) {
            value = to;
            fn(value);
            return;
        }
        value = start + time * dep;
        fn(value);
        requestAnimationFrame(_run);
    }

    requestAnimationFrame(_run)
}

使用上述 animation 函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js动画</title>
</head>
<body>
    <div>
        <span>当前价格</span>
        <span class="value">299</span>
    </div>
    <button class="button">改价</button>
    <script src="./index.js"></script>
</body>
</html>
window.onload = function () {
    document.querySelector('.button').addEventListener('click', () => {
        animation(299, 30, 2000, (value)=>{
            console.log(value.toFixed(2), 'value');
            document.querySelector('.value').innerHTML=value.toFixed(2);
        })
    })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值