美文网首页
less封装一个播放精灵图的mixin

less封装一个播放精灵图的mixin

作者: Issho | 来源:发表于2020-08-15 10:43 被阅读0次

    ☼ 注:笔者的文章是根据自己当前项目做的笔记,具体应用请参照自己实际项目情况

    //mixin.less
    .frameAnimation(
        @width, // 容器宽度,一般取精灵图每一帧的宽
        @height, // 容器高度
        @bgi, // 精灵图url
        @bgsw, // 精灵图宽度
        @bgsh, // 精灵图高度
        @duration, // 动画完成一个周期的时间
        @keyframesName, // 动画名称
        @step: steps(1), // 设置间隔参数,可以实现分步过渡
        @iterationCount: 1, // 动画播放次数
        @fillMode: forwards // 动画时间之外的状态
    ) {
        width: @width;
        height: @height;
        background-image: @bgi;
        background-size: @bgsw @bgsh;
        animation: @keyframesName @duration @step @iterationCount @fillMode;
        @keyframes @keyframesName {
            0% {
                width: @width;
                height: @height;
                background-image: @bgi;
                background-size: @bgsw @bgsh;
            }
            .createFrameAnimationSteps(@bgsw / @width, @width);
        }
    }
    // 循环生成animation代码
    // @frameCount是动画的帧数,即,精灵图的宽度 / 每一帧的宽度
    .createFrameAnimationSteps(@frameCount, @bpx, @bpy: 0px, @i: 1) when(@i < @frameCount) {
        @step: (100 / @frameCount) * @i * 1%;
        @{step} {
            background-position: -@bpx * @i @bpy;
        }
        .createFrameAnimationSteps(@frameCount, @bpx, @bpy, @i + 1)
    }
    

    在需要使用的地方引入调用即可

    @import '~@/assets/mixin.less';
    .frame_animation {
        position: absolute;
        bottom: 35%;
        left: 0;
        z-index: 9999;
        .sprite {
            .frameAnimation(400px, 450px, url('~@/static/img/example/c-tiaoru.png'), 6800px, 450px, 2.4s, run);
            &.rollback {
                .frameAnimation(400px, 450px, url('~@/static/img/example/c-tiaochu.png'), 4800px, 450px, 2.4s, back);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:less封装一个播放精灵图的mixin

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