侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

css transition animation的使用(内含贝赛尔曲线详解)

前端  /  管理员 发布于 7年前   197

区别:

transition也叫过渡动画,主要是用于让一个元素从一种状态过渡到另一种状态效果,常用于主动触发的效果。例如移动端的页面切换(很常用)、button点击效果(也很常见)。

animation才是css3正宗的动画,主要是用于实现某种持续的动画效果(当然简单的过渡动画也可以实现),常用于自动触发的效果。例如加载中的持续动画效果等等。

在学习这两种动画之前要最好是先了解一下 transition-timing-function(过渡效果时间曲线);

举个栗子:

比如一辆小汽车从a点到b点的运动过程是一个动画,那么过渡效果时间曲线就是这辆小汽车到底是匀速过去呢还是一直加速冲过去,又或者说一会加速冲一会减速慢行。

这个属性有五种可供选择的属性值和一种可以自定义的属性值

自定义属性值:cubic-bezier(n,n,n,n)

在了解这个自定义属性值之前我们再来深入了解一下贝塞尔曲线。

为什么要了解贝塞尔曲线?因为这个自定义时间过渡曲线就是用贝塞尔曲线表示的。(这是一个三阶的贝塞尔曲线)

贝塞尔曲线应用场景有哪些?贝塞尔曲线不仅仅在描述速度、时间上会起作用,在ps中的色彩调节和一些建筑工程学上面都会有涉及。

那我们先来画一个二阶的贝塞尔曲线吧。

首先打开ps,在一个平面内随便画三个点a、b、c然后连接起来,如下图。

然后在a、b中找到一点d,在b、c中找到一点e,满足公式:ad/ab = be/bc

然后呢,连接d、e,在de线上找到一点f,满足公式:df/de = ad/ab = be/bc

然后就没有然后了,因为这个二阶贝塞尔曲线已经画完了,这个曲线就是所有可能的f点。

然后我用谷歌浏览器调试工具再演示一下二阶贝塞尔曲线图(本来是想用火狐演示的,但是火狐浏览器调试曲线的时候层级有点高,还很敏感,无法用gif工具录制,所以就放弃了,但实际上我更喜欢火狐的调试动画调试工具一点。)

1、上面的球代表动画执行的过程,球越快,颜色越浅,反之越深。

2、两个固定点的坐标是(0,0)和(1,1)

3、可调试点的坐标是随意拉动的,x轴要在0-1之间,y轴随意。

4、x轴代表的时间,y轴代表的是路程(因为很多动画并不是简单的左右移动,所以以后要理解成动画执行的过程),注意:y轴不是速度,更不是加速度哦。

5、最下面的是cubic-bezier属性具体取到的值(后面再讲里面4个值得具体含义)

但实际开发过程中我们用到的大部分都是三阶贝塞尔曲线(当然也有用多阶贝塞尔曲线的),也就是用两个点去控制曲线的弧度,具体原理和上面的类似,如图:

现在就可以解释cubic-bezier为什么有四个值,就是这个两个坐标点。

再次声明一下,y轴是距离,不是速度和加速度

cubic-bezier属性还有五个可供选择的值:(其实就是几种写死的过渡效果曲线)

 ·linear      规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。    ·ease       规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。    ·ease-in        规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。    ·ease-out       规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。    ·ease-in-out        规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。

一、transition (过渡动画) 

属性描述CSS

transition

简写属性,用于在一个属性中设置四个过渡属性。3

transition-property

规定应用过渡的 CSS 属性的名称。3

transition-duration

定义过渡效果花费的时间。默认是 0。3

transition-timing-function

规定过渡效果的时间曲线。默认是 "ease"。3

transition-delay

规定过渡效果何时开始。默认是 0。3
 

实例: 

<!DOCTYPE html><html><head><style> div{    width:100px;    height:100px;    background:yellow;    transition-property:width;    transition-duration:1s;    transition-timing-function:cubic-bezier(0,0,1,1);    transition-delay:0s;}div:hover{    width:500px;}</style></head><body><div></div><p>请把鼠标指针放到黄色的 div 元素上,来查看过渡效果。</p><p><b>注释:</b>本例在 Internet Explorer 中无效。</p><p><b>注释:</b>这个过渡效果会在开始之前等待两秒。</p></body></html>

效果如下

transition简化属性写法:
transition: property duration timing-function delay;

默认值是transition:all 0 ease 0;

注意事项

在移动开发中直接使用transition动画会让页面变得非常卡顿(亲测),所以我们常用transform:translate3D(0,0,0)或者transform:translateZ(0)来开启移动端动画的gpu加速,使动画过程更流畅。
translate3D(0,0,0)是指电仪3D转换
translateZ(0)是指定义3D转换,只用Z轴

二、animation(动画效果)

因为animation动画是一段持续且循环的动画效果,所以不像transition过渡动画那样简洁,可能会涉及到很复杂的动画效果,所以我们要先学习一下@keyframes规则
该规则是用来创建动画的,说直白点就是告诉元素按哪种动画效果执行

@keyframes语法

@keyframes animationname {keyframes-selector {css-styles;}}

 

值描述
animationname必需。定义动画的名称。
keyframes-selector

必需。动画时长的百分比。

合法的值:

  • 0-100%
  • from(与 0% 相同)
  • to(与 100% 相同)
css-styles必需。一个或多个合法的 CSS 样式属性。

案例

<!DOCTYPE html><html><head><style> div{    width:100px;    height:100px;    background:red;    position:relative;    animation:mymove 5s infinite;    -moz-animation:mymove 5s infinite; /* Firefox */    -webkit-animation:mymove 5s infinite; /*Safari and Chrome */    -o-animation:mymove 5s infinite; /* Opera */}@keyframes mymove{    0%   {top:0px;}    25%  {top:200px;}    75%  {top:50px}    100% {top:100px;}}@-moz-keyframes mymove /* Firefox */{    0%   {top:0px;}    25%  {top:200px;}    75%  {top:50px}    100% {top:100px;}}@-webkit-keyframes mymove /* Safari and Chrome */{    0%   {top:0px;}    25%  {top:200px;}    75%  {top:50px}    100% {top:100px;}}@-o-keyframes mymove /* Opera */{    0%   {top:0px;}    25%  {top:200px;}    75%  {top:50px}    100% {top:100px;}}</style></head><body><p><b>注释:</b>本例在 Internet Explorer 中无效。</p><div></div></body></html>

效果如下:

说明

也就是说keyframes允许你设置在不同的时间段执行不同的动画效果

css3 动画属性 

属性描述CSS

@keyframes

规定动画。3

animation

所有动画属性的简写属性,除了 animation-play-state 属性。3

animation-name

规定 @keyframes 动画的名称。3

animation-duration

规定动画完成一个周期所花费的秒或毫秒。默认是 0。3

animation-timing-function

规定动画的速度曲线。默认是 "ease"。3

animation-delay

规定动画何时开始。默认是 0。3

animation-iteration-count

规定动画被播放的次数。默认是 1。3

animation-direction

规定动画是否在下一周期逆向地播放。默认是 "normal"。3

animation-play-state

规定动画是否正在运行或暂停。默认是 "running"。3

animation-fill-mode

规定对象动画时间之外的状态。3

<!DOCTYPE html><html><head><style> div{    width:100px;    height:100px;    background:red;    position:relative;    animation:myfirst 5s linear 2s infinite alternate;    -moz-animation:myfirst 5s linear 2s infinite alternate;/* Firefox: */    -webkit-animation:myfirst 5s linear 2s infinite alternate;/* Safari and Chrome: */    -o-animation:myfirst 5s linear 2s infinite alternate;/* Opera: */}@keyframes myfirst{    0%   {background:red; left:0px; top:0px;}    25%  {background:yellow; left:200px; top:0px;}    50%  {background:blue; left:200px; top:200px;}    75%  {background:green; left:0px; top:200px;}    100% {background:red; left:0px; top:0px;}}@-moz-keyframes myfirst /* Firefox */{    0%   {background:red; left:0px; top:0px;}    25%  {background:yellow; left:200px; top:0px;}    50%  {background:blue; left:200px; top:200px;}    75%  {background:green; left:0px; top:200px;}    100% {background:red; left:0px; top:0px;}}@-webkit-keyframes myfirst /* Safari and Chrome */{    0%   {background:red; left:0px; top:0px;}    25%  {background:yellow; left:200px; top:0px;}    50%  {background:blue; left:200px; top:200px;}    75%  {background:green; left:0px; top:200px;}    100% {background:red; left:0px; top:0px;}}@-o-keyframes myfirst /* Opera */{    0%   {background:red; left:0px; top:0px;}    25%  {background:yellow; left:200px; top:0px;}    50%  {background:blue; left:200px; top:200px;}    75%  {background:green; left:0px; top:200px;}    100% {background:red; left:0px; top:0px;}}</style></head><body><p><b>注释:</b>本例在 Internet Explorer 中无效。</p><div></div></body></html>

效果如下:

彩蛋

在火狐和谷歌中可以很方便的调处过渡效果时间曲线的定时函数编辑器,只用点击下面的按钮就可以了。

谷歌中:

火狐中:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    CSS中@support实现渐进式网页设计实例代码
    下一条:
    CSS背景图片固定宽高比自适应调整的实现方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客