当前位置: 首页 > news >正文

2016.3.17__CSS3动画__第十一天

CSS3动画

假设您认为这篇文章还不错,能够去H5专题介绍中查看很多其它相关文章。

这里写图片描写叙述

通过 CSS3,我们能够创建动画,这能够在很多网页中取代动绘图片、Flash 动画以及 JavaScript。

今日课程预览

这里写图片描写叙述

1. 关键帧

如需在 CSS3 中创建动画,您须要学习 @keyframes 规则。

@keyframes 规则用于创建动画。

在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果。

前面我们在使用transition制作一个简单的transition效果时,

我们包括了初始属性和终于属性。一个開始运行动作时间和一个延续动作时间以及动作的变换速率。

事实上这些值都是一个中间值,假设我们要控制的更细一些。

比方说我要第一个时间段运行什么动作。第二个时间段运行什么动作

(换到flash中说。就是第一帧我要运行什么动作,第二帧我要运行什么动作),

这样我们用Transition就很难实现了,此时我们也须要这种一个“关键帧”来控制。

那么CSS3中就是由“keyframes”这个属性来实现这种效果。

下面我们一起先来看看Keyframes:

Keyframes的语法规则,

@keyframes name1{
    0%{属性名:属性值。属性名:属性值;}
    29%{属性名:属性值。属性名:属性值;}
    50%{属性名:属性值;属性名:属性值;}
    100%{属性名:属性值。属性名:属性值;}
}

我们来解释一下语法规则:

必须以@keyframes开头,后面加动画的名称。名称由自定义。语义化最好。

后面加一对大括号,里面能够写很多个百分比,百分比后面加一对大括号。

里面写要改变的属性及属性值。用分号隔开。

此外能够用from取代0%,表示初始状态,用to取代100%,表示结束状态。即写成例如以下样式:

@keyframes name1{
    from{属性名:属性值。属性名:属性值。}
    29%{属性名:属性值;属性名:属性值;}
    50%{属性名:属性值。属性名:属性值;}
    to{属性名:属性值。属性名:属性值。}
}

2. 浏览器前缀

尽管keyframes已经成为了w3c的标准属性。可是为了兼容,

我们须要在谷歌和Safari等浏览器需加上内核前缀。

一般我们设置属性的时候一般都设置五种。

  • -webkit- : 内核(google chrome、safari、猎豹、360极速版)
  • x5 : QQ 浏览器、微信
  • ms : 微软 IE 浏览器
  • -o-: Opera(欧朋浏览器,转入谷歌阵营了)
  • -moz-: 火狐浏览器(netscape)

3.动画 animate

当您在 @keyframes 中创建动画时,请把它捆绑到某个选择器。否则不会产生动画效果。

通过规定至少下面两项 CSS3 动画属性。就可以将动画绑定到选择器:

  • 规定动画的名称
  • 规定动画的时长

凝视:您必须定义动画的名称和时长。假设忽略时长,则动画不会同意。由于默认值是 0。

属性描写叙述
@keyframes规定动画。
animation全部动画属性的简写属性,除了 animation-play-state 属性。

animation-name规定 @keyframes 动画的名称。
animation-duration规定动画完毕一个周期所花费的秒或毫秒。默认是 0。
animation-timing-function规定动画的速度曲线。

默认是 “ease”。

animation-delay规定动画何时開始。

默认是 0。

animation-iteration-count规定动画被播放的次数。

默认是 1。

animation-direction规定动画是否在下一周期逆向地播放。默认是 “normal”。
animation-play-state规定动画是否正在运行或暂停。默认是 “running”。
animation-fill-mode规定对象动画时间之外的状态。

3.1 动画属性

  1. 动画名称 (animation-name)。名称是差别事物的一种最好的办法,像每个人都有自己的名字一样。我们的动画也有自己的名称,在上面学习keyframes时,我们提到了须要自己定义帧的名字。此处的名称就是刚才我们定义帧时候取的名字,是一个不可缺少的属性。

  2. 动画运行时间 (animation-duration)。在keyframes阶段我们提到了百分比指的是动画运行时间的百分比,所以动画的持续时间也是一个不可缺少的属性。单位是秒或者毫秒

  3. 动画运行次数(animation-iteration-count)。动画的运行时间不可能是无限的,可是我们有时候须要这个动画一直运行下去,这时我们能够定义动画的运行次数为无限次,当然你也能够定义3次、4次、5、6、7、8等等次,当然定义多少次要看你的须要。


    -webkit-animation-iteration-count: 10;(无限次为infinite

  4. 动画变换速率(animation-timing-function)

    实际上就是动画的播放方式,它和transition中的transition-timing-function一样。具有下面几种变换方式:ease , ease-in , ease-in-out , linear , cubic-bezier。cubic-bezier指的是贝塞尔曲线,稍后会讲这一部分的内容。

  5. 延迟(animation-delay)。一个页面中可能有很多的动画,有的时候我们想有的先播放,有的后播放,那么我们怎么实现这种效果呢。animate里面引进了一个属性叫做延迟,它规定这个动画能够在延迟制定时间后再运行。

    单位是秒或者毫秒

  6. 运动方向(animation-direction)。用来指定动画播放的方向,其仅仅有两个值。默认值为normal,假设设置为normal时,动画的每次循环都是向前播放;另一个值是alternate。他的作用是。动画播放在第偶数次向前播放。第奇数次向反方向播放

  7. 动画的播放状态(animation-play-state)。其主要有两个值。running和paused当中running为默认值。他们的作用就相似于我们的音乐播放器一样,能够通过paused将正在播放的动画停下了。也能够通过running将暂停的动画又一次播放,我们这里的又一次播放不一定是从元素动画的開始播放。而是从你暂停的那个位置開始播放。这个属性很少有内核支持。所以仅仅是略微提一下就好。

  8. 动画时间之外的状态(animation-fill-mode)

    我们日常经常使用的是:forwards,当动画完毕后,保持最后一个属性值(在最后一个关键帧中定义)。除此之外还有三个值,各自是none:不改变默认行为。backwards:在 animation-delay 所指定的一段时间内。在动画显示之前,应用開始属性值(在第一个关键帧中定义)。both:向前和向后填充模式都被应用。

3.2 例子代码

全部动画属性串联在一起的时候。属性的排列次数是

animation: 动画名称+动画运行时间+动画变换速率+延迟+动画运行次数+运动方向

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            .animate{
                width: 100px;
                height: 100px;
                background: pink;
                animation: name1 4s linear 2s infinite alternate;
                -webkit-animation: name1 4s linear 2s infinite alternate;
            }
            @keyframes name1{
                0%{width: 100px;}
                29%{width: 200px;}
                50%{width: 50px;}
                100%{width: 100px;}
            }
        </style>
    </head>
    <body>
        <div class="animate"></div>
    </body>
</html>

4. 第三方库 animate.css

假设每次写动画都要自己去写每个运动的过程会是一件很麻烦的事。

那么能不能有一个库存在,里面有很很多的动画,

每次我们想要用动画的时候仅仅须要去这个库里面提取出来。这种话就会很方便。

也是出于这种考虑,第三方库animate.css出现了,它里面封装了很多的动画。

我们想要用的时候直接调用里面的动画就好了,接下来我们就来看动画的第三方库animate.css。

我们已经知道这是个包括了很多动画的库,

这里提供了链接,http://www.17sucai.com/pins/demoshow/9411

我们能够里面看到不同的动画名称相应的不同效果。那么我们怎么使用这里面的动画呢,

它的用法很easy。我们详细来看:

4.1 引入第三方库

    <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第三方库</title>
        <link rel="stylesheet" type="text/css" href="animate.min.css"/>
    </head>
    <body>
    </body>
</html>

4.2 指定详细动画效果

方法一:

格式:animation:”name“ time;

例: animation:”flip” 2s;

表示这个名字叫做flip的动画运行时间是2s。能够看到这个方案和我们刚才学习的是一样的。

完整代码例如以下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="animate.min.css">
    <style type="text/css">
    div{
        height: 200px;
        width: 200px;
        background-color: #ccc;
        -webkit-animation: "flip" 2s;
        -o-animation: "flip" 2s;
        animation: "flip" 2s;
    }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

方法二:

格式:<div class=“name animated”></div>

例: <div class=“flip animated”></div>

完整代码例如以下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="animate.min.css">
    <style type="text/css">
    div{
        height: 200px;
        width: 200px;
        background-color: #ccc;
    }
    </style>
</head>
<body>
    <div class="flip animated"></div>
</body>
</html>

5. 贝塞尔曲线

我们学transition的时候。有一个属性叫做transition-timing-function,

这个属性规定了效果的速度曲线,里面有一些属性值,

  • 匀速运动linear
  • 速度逐渐变慢ease
  • 先慢后快ease-in
  • 先快后慢ease-out
  • 先慢后快再慢ease-in-out

除此之外我们另一个參数值叫做cubic-bezier,该值同意你去自定义一个时间曲线,这就是我们要讲的贝塞尔曲线。

贝塞尔曲线(The Bézier Curves),是一种在计算机图形学中相当重要的參数曲线(2D,3D的称为曲面)。

贝塞尔曲线于1962年,由法国project师皮埃尔·贝塞尔(Pierre Bézier)所发表。他运用贝塞尔曲线来为汽车的主体进行设计。

我们在日常开发中最经常使用的就是二次曲线。

偶尔会使用到三次曲线。

当然更高深的也有。可是咱们不会涉及到。

咱们在日常开发中仅仅须要会确定锚点和控制点的位置就好。

很多其它的尝试能够參考这个站点。我们不须要大家会精确定位每个点。

仅仅须要大家能够大概猜出这个点详细在哪个位置就能够啦。

http://cubic-bezier.com/#0,0,.58,1

代码实现:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            .animate{
                width: 200px;
                height: 200px;
                background: pink;
                transition: width 3s cubic-bezier(1,.02,.31,.9);
                -webkit-transition: width 3s cubic-bezier(1,.02,.31,.9);

            }
            .animate:hover{
                width: 1000px;
            }
        </style>
    </head>
    <body>
        <div class="animate"></div>
    </body>
</html>

相关文章:

  • 【搞机】9.7英寸iPad Pro 上手开箱(图文)
  • 【凯子哥带你夯实应用层】使用ActionProvider实现子菜单时遇到的一个坑
  • 使用 FreeRTOS 时注意事项总结(基础篇教程完结)
  • 推荐系统中的矩阵分解演变方式
  • Java——操作Excel表格,读取表格内容
  • 伊吹萃香
  • BZOJ 1878 SDOI2009 HH的项链 树状数组/莫队算法
  • 数据库对象
  • 中文分词--逆向最大匹配
  • servlet文件下载2(单文件下载和批量下载)
  • php 上传文件
  • 程序员工作中绕不开的9大问题,你遇到过几个?
  • Adobe将于2020年末停止对Flash的支持
  • quick-cocos2d-x教程9:实例之加上背景图片
  • iOS将数组中的内容分拼接成字符串
  • cookie和session
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • IP路由与转发
  • JS实现简单的MVC模式开发小游戏
  • session共享问题解决方案
  • 突破自己的技术思维
  • 微信小程序:实现悬浮返回和分享按钮
  • 学习ES6 变量的解构赋值
  • 鱼骨图 - 如何绘制?
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #HarmonyOS:Web组件的使用
  • (06)金属布线——为半导体注入生命的连接
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (论文阅读30/100)Convolutional Pose Machines
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (转)菜鸟学数据库(三)——存储过程
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net core 6 集成和使用 mongodb
  • .Net接口调试与案例
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ Linux ] Linux信号概述 信号的产生
  • [1204 寻找子串位置] 解题报告
  • [Android]通过PhoneLookup读取所有电话号码
  • [Android学习笔记]ScrollView的使用
  • [BJDCTF2020]The mystery of ip
  • [bzoj1038][ZJOI2008]瞭望塔
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [CLR via C#]11. 事件
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [go 反射] 进阶
  • [hdu 3652] B-number
  • [iOS]随机生成UUID通用唯一识别码
  • [Java、Android面试]_10_Java中==与equal()方法的区别?重写equal()方法?