「趣学前端」昨天画了一张小滑板,今天看我用CSS让它滑起来

1,202 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

背景

我身边一些非互联网技术从业的朋友,偶尔看我转发到朋友圈的文章,会表示出一定的兴趣。前段时间,有朋友问我公众号的问题,所以我来了灵感,准备写一个趣学前端系列,适用于零基础、新手前端或者想把编程当做兴趣培养的人。

学问必须合乎自己的兴趣,方可得益。 ——莎士比亚

上篇习题解析

上一篇结尾留了一个小习题,先来看看,3D环绕旋转的效果是如何实现的。

想要实现动画效果,需要借助CSS提供的animation属性,来设置元素的动画效果。

3D环绕的旋转动画,其实就是一个从某个角度到另外一个角度的过度,然后配合循环播放的动画效果。

水平的旋转,是元素沿着Y轴在运动。所以设置的过度效果是沿着 Y 轴的 3D 旋转。即transform: rotateY(360deg)。

code.juejin.cn/pen/7130212…

知识点讲解

动画有趣不,今天就来聊聊animation动画属性。

动画效果

类型效果展示实现方案
滑滑板元素的animation属性可以实现动画效果。如果想要动画循环, animation-iteration-count属性不设置值,默认是无限次播放。滑板没有设置 animation-iteration-count的值,所以是循环滑动的。
玻璃球碰撞为元素添加animation-delay的属性值,可以实现元素的动画延迟开始的效果。第一个玻璃球先开始,到达第二个玻璃球的时间为2s,所以第二个玻璃球设置的animation-delay属性值为2s。
跳动的篮球🏀篮球因为拥有弹力,所以在拍动的时候,可以触及到地面之后弹起来。元素的animation-timing-function 属性可以定义如何完成动画周期,可以设置完成速度是曲线的,可以先快后慢或者先慢后快。
工作中的时钟时钟的时针和分钟顺时针转动一圈。设置开头动画从角度0开始,结束动画到达角度360度,便可以完成顺时针一圈。

知识点

以下知识内容来自于菜鸟教程

属性名作用属性值
animation设置元素动画效果。animation-name:指定要绑定到选择器的关键帧的名称animation-duration:动画指定需要多少秒或毫秒完成animation-timing-function:设置动画将如何完成一个周期animation-delay 设置动画在启动前的延迟间隔。animation-iteration-count:定义动画的播放次数。animation-direction:指定是否应该轮流反向播放动画。animation-fill-mode:规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。animation-play-state:指定动画是否正在运行或已暂停。initial:设置属性为其默认值。 阅读关于 initial的介绍。inherit:从父元素继承属性。 阅读关于 initinherital的介绍。
animation-delay属性定义动画什么时候开始。time:可选。定义动画开始前等待的时间,以秒或毫秒计。默认值为0。
animation-direction属性定义是否循环交替反向播放动画。normal:默认值。动画按正常播放。reverse:动画反向播放。alternate:动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放。alternate-reverse:动画在奇数次(1、3、5...)反向播放,在偶数次(2、4、6...)正向播放。initial:设置该属性为它的默认值。请参阅 initial。inherit:从父元素继承该属性。请参阅 inherit。
animation-duration属性定义动画完成一个周期需要多少秒或毫秒。time:指定动画播放完成花费的时间。默认值为 0,意味着没有动画效果。
animation-fill-mode属性规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。none:默认值。动画在动画执行之前和之后不会应用任何样式到目标元素。forwards:在动画结束后(由 animation-iteration-count 决定),动画将应用该属性值。backwards:动画将应用在 animation-delay:定义期间启动动画的第一次迭代的关键帧中定义的属性值。这些都是 from 关键帧中的值(当 animation-direction 为 "normal" 或 "alternate" 时)或 to 关键帧中的值(当 animation-direction 为 "reverse" 或 "alternate-reverse" 时)。both:动画遵循 forwards 和 backwards 的规则。也就是说,动画会在两个方向上扩展动画属性。initial:设置该属性为它的默认值。请参阅 initial。inherit:从父元素继承该属性。请参阅 inherit。
animation-name属性为 @keyframes 动画指定名称。keyframename:指定要绑定到选择器的关键帧的名称none:指定有没有动画(可用于覆盖从级联的动画)
animation-play-state属性指定动画是否正在运行或已暂停。paused:指定暂停动画。running:指定正在运行的动画。
animation-timing-function指定动画将如何完成一个周期。linear:动画从头到尾的速度是相同的。ease:默认。动画以低速开始,然后加快,在结束前变慢。ease-in:动画以低速开始。ease-out:动画以低速结束。ease-in-out:动画以低速开始和结束。steps(int,start end):指定了时间函数中的间隔数量(步长)。有两个参数,第一个参数指定函数的间隔数,该参数是一个正整数(大于 0)。 第二个参数是可选的,表示动画是从时间段的开头连续还是末尾连续。含义分别如下:start:表示直接开始。end:默认值,表示戛然而止。cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。

讲解代码

code.juejin.cn/pen/7130274…

讲解代码操作步骤

演示代码都可通过代码复制拷贝到本地的IDE中进行演示。也可以自己照着敲击学习。

第一步: 选中一个想查看代码的功能项;

第二步: 将查看的功能的代码进行复制;

第三步: 将代码粘贴到一个空档html文档中;

第四步: 运行这个新建的html文档,刚才的顶部模块功能就出来啦。

一个小习题

表格在网页中是很常见的一种展示数据的方式。默认的表格是没有颜色等样式的。

下图中的高亮的表头、隔行高亮的效果是如何实现的呢?解答方案会在下篇文章中给出。

总结

如果说transform的旋转跳跃间,可以实现各式各样好玩的展示效果。那么animation属性则是为或是静态或是立体的效果,注入力量,注入可以去跑去跳去漂亮的倒挂金钩的力量。希望未来创造更多的好玩的动画效果。

有时候学习并不困难,如何应用是关键,所以,想要熟练的掌握前端知识,还需要不断的练习和应用。

前端的千变万化,源于对前端知识的融会贯通。