每周一个前端动画之三:twitter点赞动画

开工大吉,在开工第二天,送上每周一个动画系列的第三篇,新的一年先给自己一个大大的赞。闲话不说,开始我们的正文。

本文分析实现的某些效果,仅仅作为一个思路分享,仅仅作为学习素材使用。

源动画效果

可以看到鼠标在点击红心的时候,有些粒子效果,同时红心填充为红色,效果的确很赞。

image

实现分析

我们应该记得在《每周一个前端动画之一:UC浏览器球队展示动画的实现》中提到了计时函数animation-timing-function,它的属性有个阶跃函数steps(),我们可以使用这个函数。使用包含一组渐变的效果的精灵图(如下图),设置好合适的步数,只要我们在水平轴跳跃的移动图片,就能达到我们的效果。

image

代码实现

使用上文提到的一张特殊的精灵图作为背景

.HeartAnimation {
    background-image: url(web_heart_animation_edge.png);
    background-position: left;
}

设置动画的计时函数steps,这里需要明确一下,steps是一个阶跃函数,函数曲线不是连续的,因为图片一共有29张,存在28个间隔,所以,我们设置阶跃的步数为28

.like-active {
    animation-timing-function: steps(28);
    animation-name: heart-burst;
    animation-duration: .8s;
    animation-iteration-count: 1;
    animation-fill-mode: forwards;
    display: inline-block
}
@keyframes heart-burst {
    0% {
        background-position: left
    }

    100% {
        background-position: right
    }
}

效果展示

image

关键点解读

本文的关键点就在于steps函数的使用,steps函数使用的地方很多,只要是这种特定步骤的动画,都可以实现。steps还有很多其他的使用方式,我们在后续的博文里也会多次的看到的。

代码已上传到github,欢迎提出Issues。

最后的惯例,贴上我的博客,欢迎关注

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,448评论 25 709
  • 【Android 动画】 动画分类补间动画(Tween动画)帧动画(Frame 动画)属性动画(Property ...
    Rtia阅读 11,370评论 1 38
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,207评论 4 61
  • 一、绘制直线、线段 绘制直线的另一种方式 二、绘制圆形 三、绘制矩形 稍后再练习绘制文字和图片
    ZYiDa阅读 5,764评论 1 0
  • 风在窗外呼呼作响,似乎想要啸卷这世上的一切。我坐在温暖的屋子里,听着它时而嘹亮,时而低沉的声音,思绪不禁随之飞舞。...
    棒棒书香阅读 3,805评论 4 6