前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端序列帧动画实现

前端序列帧动画实现

作者头像
切图仔
发布2022-09-08 18:50:33
1.1K0
发布2022-09-08 18:50:33
举报
文章被收录于专栏:生如夏花绚烂生如夏花绚烂

原理

1.UI 提供精灵图/雪碧图(就是将序列帧排在一张图片上的图)

2.通过代码不断改变图片的位置,从而形成动画效果

代码实现

代码语言:javascript
复制
  <style>
        .logo_gif {
            width: 300px; // 单个动画帧尺寸
            height: 300px;
            cursor: pointer;
            background-image: url(./sequence.png);
            background-size: 100%;
            background-position-y: 0;
            animation: mouse-in 1.5s;
            animation-timing-function:steps(26); // 动画帧数量
            animation-iteration-count:infinite  // 动画循环播放
        }
        @keyframes mouse-in{
            from{
                background-position-y: 0;
            }
            to{
                background-position-y: -7800px; // 根据 元素大小*动画帧数量得出
            }
        }
    </style>
</head>
<body>
    <div class="logo_gif" ></div>
</body>

注意点

animation-timing-function:steps();;里面的数字为动画帧数量也就是雪碧图里面的图片数量 background-position-y的值不能随便取,必须根据元素的大小乘以动画帧数量得出 如本例元素大小为300,虽然雪碧图的大小是 400 x 10400 我们不能写成

代码语言:javascript
复制
   @keyframes mouse-in{
            from{
                background-position-y: 0;
            }
            to{
                background-position-y: -10400px; // 错误
            }
        }

而是 300 * 26 = 7800

代码语言:javascript
复制
   @keyframes mouse-in{
            from{
                background-position-y: 0;
            }
            to{
                background-position-y: -7800px; // 正确
            }
        }

如果是 200的元素 则 background-position-y的值为 200 * 26 = 5200

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档