美文网首页android基础知识实例
前端动效实现--lottie - web

前端动效实现--lottie - web

作者: LazyCat404 | 来源:发表于2019-12-26 14:50 被阅读0次

    更新:2021-12-11

    本文简单介绍了一下动画的引入,有关动画的深入交互近期会更新(^U^)ノ~YO

    CSS3 帧动画

    CSS 发展到了今天,它的强大几乎不是我们可以想像到的。合理的使用Animation可以实现很多神奇效果。配合设计师的导出图,前端使用序列帧即可实现动画效果。

    序列帧

    帧动画的缺点和局限性比较明显,导出图文件大,且在不同屏幕分辨率下可能会失真。

    JS

    通过JS方法控制DOM,从而实现动画效果

    GIF

    关于这个不想多废话了!!!

    canvas/svg

    首先说明这篇文章不是在叙述canvas/svg的用法,所以并不过多赘述。

    js + canvas/svg 应该是目前前端实现复杂动效的最优方案了,但要注意canvassvg二者之间区别,根据不同使用场景选取最优的实现方案。

    Lottie 重点来了o( ̄▽ ̄)ブ

    Lottie一个适用于WebAndroidiOSReact NativeWindows 的移动库,它可以使用Bodymovin解析以json格式导出的Adobe After Effects动画,并在移动设备上进行本地渲染!

    安装

    关于lottie的用法,在网上可以查到很多,今天我们要说的是vue + lottie-web

    npm install lottie-web
    

    ps:如果是vue-cli3.x 或 4.x 可以直接通过 vue ui 通过搜索安装
    (以下是个人认为比较优雅的使用方案)

    <template>
        <div class="box">
            <div id="lottie_box"></div>
            <button @click="startFun">播放</button>   
            <button @click="suspendFun">暂停</button>   
        </div>
    </template>
    
    <script>
    import lottie from 'lottie-web';
    
    export default {
        name:'Lottie',
        data(){
            return{
                lottie:{},  
            }
        },
        methods:{
            suspendFun:function(){
                this.lottie.pause();
            },
            startFun:function(){
                this.lottie.play()
            }
        },
        mounted(){
            this.lottie = lottie.loadAnimation({
                container: document.getElementById('lottie_box'),
                renderer: 'svg',
                loop: true,
                path: 'https://labs.nearpod.com/bodymovin/demo/markus/halloween/markus.json'
            })
        }
    }
    </script>
    
    <style>
        .box{
            width: 100%;
            height: 100%;
        }
        #bm{
            width: 100%;
            height:100%;
            margin: 0px auto;
        }
    </style>
    

    基本用法

    const animation = lottie.loadAnimation({
        container: document.getElementById('box'),
        renderer: 'svg',        // 渲染方式:svg:支持交互、不会失帧、canvas、html:支持3D,支持交互
        loop: true,             // 循环播放,默认:true
        autoplay: true,         // 自动播放 ,默认true
        path: ''                // json 路径
    })
    

    常用方法

    • animation.play():播放,从当前帧开始播放

    • animation.stop():停止,并回到第0帧

    • animation.pause():暂停,并保持当前帧

    • animation.goToAndStop(value, isFrame):跳到某个时刻/帧并停止

      isFrame(可省略,默认false毫秒true)指明value的单位是毫秒还是

    • animation.goToAndPlay(value, isFrame):跳到某个时刻/帧并播放

      animation.goToAndStop(30, true)     // 跳转到第30帧并停止
      animation.goToAndPlay(300)          // 跳转到第300毫秒并播放
      
    • animation.playSegments(arr, forceFlag):以帧为单位,播放指定片段

      arr可以包含两个数字或者两个数字组成的数组forceFlag表示是否立即强制播放该片段

      animation.playSegments([10,20], false)          // 播放完之前的片段,播放10-20帧
      animation.playSegments([[0,5],[10,18]], true)   // 直接播放0-5帧和10-18帧
      
    • animation.setSpeed(speed):设置播放速度speed1表示正常速度

    • animation.setDirection(direction): 设置播放方向1表示正向播放,-1表示反向播放

    • animation.destroy()删除该动画,移除相应的元素标签等。

      unmount的时候,需要调用该方法

    常用钩子

    • data_ready:动画数据加载完毕

      animation.addEventListener('data_ready', () => { console.log('(*^_^*)'); });
      
    • config_ready:完成初始配置后

    • data_failed:当无法加载动画的一部分时

    • loaded_images:当所有图像加载成功或错误时

    • DOMLoaded:将元素添加到DOM

    相关文章

      网友评论

        本文标题:前端动效实现--lottie - web

        本文链接:https://www.haomeiwen.com/subject/emwkoctx.html