css动画

animation

属性 描述
@keyframes 规定动画
animation-name 定义动画的名称
animation-duration 指定动画完成时间
animation-timing-function 设置动画的速度曲线
animation-delay 指定动画的延迟时间
animation-iteration-count 设置动画的执行次数
animation-direction 设置动画的执行方向
animation-fill-mode 设置动画结束或开始或延迟时的样式
animation-play-state 设置动画的开始和结束

语法
animation:动画名称 动画时间 运动曲线 何时开始 播放次数 是否反方向 动画不播放样式 动画开始与结束;

animation: name duration timing-function delay iteration-count direction fill-mode play-state;

@keyframes name {
  //from to分别是0% 100%,之间的百分值代表各个帧
  25% {
    //效果
  }
  50% {
    //效果
  }
  75% {
    //效果
  }
}

animation-timing-function

语法
animation-timing-function: value;

描述
linear 动画的速度是相同的
ease 动画以低速开始,然后加快,在结束前变慢。默认值
ease-in 动画以低速开始
ease-out 动画以低速结束
ease-in-out 动画以低速开始和结束
cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中定义速度函数。可能的值是从 0 到 1 的数值。

在线调试贝塞尔曲线链接:cubic-bezier

animation-iteration-count

语法
animation-iteration-count: value;

描述
n 动画的播放次数,默认为1
infinite 指定动画无限循环播放

animation-direction

语法
animation-direction: value;

描述
normal 默认值,动画正常播放
reverse 动画反向播放
alternate 动画在奇数次正向播放,偶数次反向播放
alternate-reverse 动画在奇数次反向播放,偶数次正向播放

简单的例子

direction示例图

在这个例子中,动画的效果只是将图标进行简单的放大处理

@keyframes heart {
            to {
                transform: scale(2);
            }
        }

从左至右,animation-direction分别为normal reverse alternate alternate-reversenormal的处理效果是将图形慢慢放大到两倍,然后一下子回到初始状态,reverse效果相反,alternate是将图形慢慢放大再慢慢回到初始状态,alternate-reverse与之相反。这就是direction的四个方向。

animation-fill-mode

语法
animation-fill-mode: value;

描述
none 默认值,动画样式为:初始定义样式-帧样式(from-to)-初始样式
forwards 动画反向播放
backwards 动画样式为:帧样式(from-to)-初始定义样式
both 兼顾forwards与backwards,动画一直是帧规定的样式
利用animation实现轮播图

效果图

轮播图

思路

  1. 将所有图片并排水平放置,设置overflow: hidden;
  2. 定义轮播动画,在两个帧之间保持transform: translateX();不变实现图片滑动暂停的效果
  3. 文字和小点的变换原理类似
@keyframes change{
            0% {
                transform: translateX(0px);
            }
            20% {
                transform: translateX(0px);
            }
            25% {
                transform: translateX(-800px);
            }
            45% {
                transform: translateX(-800px);
            }
            50% {
                transform: translateX(-1600px);
            }
            70% {
                transform: translateX(-1600px);
            }
            75% {
                transform: translateX(-2400px);
            }
            95% {
                transform: translateX(-2400px);
            }
            100% {
                transform: translateX(-3200px);
            }
        }
结合js实现弹幕

效果图

弹幕

js部分:

/**
     * 获取指定范围的随机数
     * @param {*开始} start 
     * @param {*技术} end 
     */
     function Random(start, end) {
        let num = (Math.random() * (end - start) + start).toString();
        return parseInt(num, 10);
    }


    /**
     * 添加一个弹幕
     * @param {*内容} text 
     */
    function SetBarrage(text) {
        // 创建dom并添加class 和各种数据
        var barrage = document.createElement('span');
        // console.log(barrage);
        barrage.className = "barrage-info";
        barrage.innerText = text;
        document.getElementById('screen').appendChild(barrage);
        // 创建弹幕从右到左面的10-15的随机秒数
        const randomTime = Random(5, 15);
        // 创建离上方的距离  百分比 现在是半屏
        const randomTop = Random(15, 40);
        barrage.style.top = randomTop + "%";
        barrage.style.animation = "barrage " + randomTime + "s linear";
        // 添加一个定时器 在运行完成之后删除这个DOM
        setTimeout(() => {
            document.getElementById('screen').removeChild(barrage)
        }, randomTime * 1000);
    }

    // 绑定发送弹幕按钮
    document.getElementById("send").onclick = function (e) {
        SetBarrage(document.getElementById("input_barrage").value);
    }

注:不存在中间值的内容则无动画,如bordersolid变为dotted无中间值,则会在最后一刻进行改变。

transform

语法
transform: none|transform-functions;

属性 描述
none 不进行变换
rotate 旋转
translate 移动
scale 放大
skew 扭曲
matrix 矩阵

matrix与矩阵对应,可表示2d和3d转换,利用matrix可实现其余效果。

.demo {
  transform: matrix(a, b, c, d, e, f);
}
矩阵图

2d转换由3*3矩阵表示,第一行代表x轴变化,第二行代表y轴,第三行代表z轴,2d与z轴无关,使用 0 0 1

rotate

旋转影响a b c d四个值

transform: rotate(0deg)
a=cos0
b=sin0
c=-sin0
d=cos0

translate

平移对应的是矩阵中的e f

transform: translate(10, 20);
e = 10
f = 20

trandform: matrix(a, b, c, d, 10, 20);

scale

缩放对应的是矩阵中的a d

transform: scale(1.2, 0.8)
a = x
d = y

transform: matrix(1.5, 0, 0, 0.8, 0, 0)

skew

偏移对应的是矩阵中的c b

transform: skew(20deg, 30deg)
b = tan30°
c = tan20°

transform: matrix(a, tan30°, tan20°, d, e, f)

matrix表示各种效果的叠加时需要用到矩阵的乘法,每种效果都可以得到一个矩阵,各个矩阵相乘的结果就是叠加效果

矩阵相乘

transition

语法
transition: property duration timing-function delay;

属性 描述
transition-property 设置过渡效果的css属性名称
transition-duration 完成过渡效果需要的时间
transition-timing-function 速度曲线
transition-delay 过渡效果何时开始

transition-property

描述
none 没有过渡动画
all 所有可被动画的属性
IDENT 属性名称(可多个)

其余属性与animation中的类似

常用的动画库:
Animate.css
Hover.css
Anime.js

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,858评论 0 4
  • CSS 中的 transform,transition 和 animation 是分开的三部分内容,其中 tran...
    单纯的土豆阅读 718评论 0 4
  • CSS 中的 transform,transition 和 animation 是分开的三部分内容,其中 tran...
    teabyii阅读 1,295评论 0 25
  • css3动画 过渡:transition 2D 转换 transform 3D 转换 transform 动画:a...
    刘松阳阅读 741评论 0 0
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,312评论 0 11