章节
问答
课签
笔记
评论
占位
占位

关键帧动画

在页面中,想让元素"动起来"可以通过切换图片的方式,也是常说的逐帧动画。常规的手段就是通过定时器不断的切换图片,配合时间,从而产生连续播放而成动画。以前只能通利用JS器定时器或者flash达到这个逐帧播放的效果,现在可以通过CSS3的关键帧动画,或者更为先进的“骨骼动画”来实现,效果也是极好的。

CSS3的Animation有八个属性

  1. animation-name :动画名
  2. animation-duration:时间
  3. animation-delay:延时
  4. animation-iteration-count:次数
  5. animation-direction:方向
  6. animation-play-state:控制
  7. animation-fill-mode:状态
  8. animation-timing-function:关键帧变化

8个属性中,其中1-7都有相关介绍,但是animation-timing-function是控制时间的属性,在取值中除了常用到的 三次贝塞尔曲线 以外,还有个很高级的 steps() 函数,steps函数也就是整个圣诞主题的关键知识点。steps要配合精灵图使用,简单来说就是用来切换多个精灵图的,形成帧动画,类似setTimeout的处理感觉

动画原理:

假如,现在有一组由三张图合成的雪碧图,每张图大小是91*71

如果实现3张图帧动画效果,代码如下

animation:bird-slow 400ms steps(3) infinite;
@keyframes bird-slow {
    0% {background-position-x: -0px}
    100% {background-position-x: -273px}
}

通过定义一个类,类中定义的动画的一些关键数据,比如动画名,时间,次数,切换的位置

通过keyframes定义动画具体执行参数与时间段

steps(3)的意思就是:keyframes设置的0%-100%的段中,background-position的的x坐标会变化3次

steps会平分这些段落值,其变化值就是

  1. background-position-x: -0px
  2. background-position-x: -91px
  3. background-position-x: -182px

为什么没有-273px,这个是steps的具体一个算法,具体可以参考我的博客 深入理解CSS3 Animation 帧动画

右边代码给出了animation的2种写法,可以具体观察下,一种是快捷写法,一种是全写,注意浏览器的兼容性需要加前缀

任务

右边代码区域,有一张精灵图由3张图组成,每一个图的大小是91px,现在通过关键帧制作3帧动画,需要写出对应的keyframes的规则, 主要要兼容一些浏览器的前缀

?不会了怎么办

    @-webkit-keyframes bird-slow {
        0% {
            background-position: -0px 0px;
        }
        100% {
            background-position: -273px 0px;
        }
    }
    
    @-moz-keyframes bird-slow {
        0% {
            background-position: -182px 0px;
        }
        50% {
            background-position: 0px 0px;
        }
        75% {
            background-position: -91px 0px;
        }
        100% {
            background-position: -182px 0px;
        }
    }

||
1
2
<!DOCTYPE html>
<html>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最新回答 / ghd
浏览器兼容没写好,添加不带游览器前缀的相同样式就好了。意思是你没写完整

最新回答 / qq_胖嘟嘟_3
-moz-animation这个动画效果是只支持火狐浏览器的

最新回答 / 慕粉2124037958
只要代码没错就不会有这种情况啊

已采纳回答 / zhangweb
层级问题啊!让它在最前面而已啦!就是让它在上面能看到吧!后面课程可能用到这么高吧

最新回答 / 曦呦
我在网上查到的一个解释是,step()主要是的css sprite使用的,给出首位的两个图的位置,3表示切换的次数,切换3次 background-position 使其变为连续的动画。

最新回答 / D__C
试试就知道了,改成4你就会看到效果

已采纳回答 / qq_糖不一定是甜的哦_0
是的 我的也是这样

最新回答 / fdsfewgds
background-position-x:  这个写法火狐不支持  ------background-position:

已采纳回答 / Seven啊
一个鸟的宽是91px 三个就是273px

最赞回答 / 忆起轻狂疯年少
-moz-keyframes bird-slow 兼容火狐内核的动画 bird-slow

最新回答 / NoLimits
↖(^ω^)↗加油么么哒

最新回答 / PdpdPdpd
因为设置absolute会使元素脱离文档流。     如果没有“min-width:91px;min-height: 71px;”这两条但是存在“position:absolute”这条代码的话你应该什么都看不到,因为没有为这个元素设置宽和高。元素在没有脱离文档流的情况下宽和高可以从父元素继承,但脱离之后无处继承,所以height与width都是0。因此老师为其设置了min-width和min-height,然后我们便可以看到只有一只小鸟在煽动翅膀。    而在你删除position:absolute之后...

最新回答 / SoWhat2016
这样写 火狐还是没反应

最赞回答 / moonstar
我刚刚测试过 不支持
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言