摘要:无效生效重复怎么办与规则一样,标准规定相同的关键帧不产生层叠,仅最后出现的认定为有效。但实际上和均将关键帧设计为可层叠的。为默认值,表示动画一结束,动画效果就结束表示动画一开始就马上执行完第一个关键帧的效果。
前言
在《CSS魔法堂:Transition就这么好玩》中我们了解到对于简单的补间动画,我们可以通过transition实现。那到底多简单的动画适合用transtion来实现呢?答案就是——我们只需定义动画起始和结束帧的状态的动画。一旦关键帧数大于2时,我们必须转向CSS Animation了。本文为这段时间学习的记录,欢迎拍砖。
简单粗暴介绍CSS Animation 规则和属性 定义关键帧动画语法:
@keyframes{ [ { /* CSS Properties */ }]* }
示例:
@keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
注意项:
1.
// 命名需要遵循以下规则 const rIsInvalid = /^--|^[0-9]+-|^(?:unset|initial|inherit|none)$/ , rIsValid = /^[0-9a-z-_]+$/i function isValidAnimationName(animationName: string): boolean{ return !rIsInvalid.test(animationName) && rIsValid(animationName) }
2.
0-100%、from,等价与0%、 to,等价与100%。
3.
@keyframes CSS规则不支持层叠样式,因此当出现多个同名keyframes,那么仅最后出现的那个有效。
/* 无效 */ @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* 生效 */ @keyframes rotate { from { transform: rotate(90deg); } to { transform: rotate(-360deg); } }
4.
与@keyframes CSS规则一样,标准规定相同的关键帧不产生层叠,仅最后出现的认定为有效。
但实际上FireFox14+和Chrome均将关键帧设计为可层叠的。
@keyframes rotate { from { transform: rotate(0deg); } from { background: red; } /* 上述两条time offset实际上等价于 * from { transform: rotate(0deg); background: red; } */ to { transform: rotate(360deg); background: yellow; } }
5.!important导致属性失效
一般情况下使用!important会让CSS属性获得最高权重,但在@keyframes下却会导致该CSS属性失效。
@keyframes rotate { from { transform: rotate(90deg); background: red!important; /* background属性无效 */ } to { transform: rotate(-360deg); } }
6.必须提供至少两个关键帧
/* 不会根据缓动函数产生动画效果,而是在动画持续时间的最后瞬间移动过去 */ @keyframes move-left{ to { left: 100px; } }使用动画
{ animation: ; }
示例:
.box.rotate { animation: rotate 10s infinite alternate; }子属性介绍
注意:
默认情况下(none),动画结束后会恢复动画前的样式;
设置backwards时,
其中ease | ease-in | ease-out | ease-in-out | linear | cubic-bezier(
step-start实际上等价于steps(10, start),而step-end则等价于steps(10),所以我们只要理解好steps(
/* 通过设置在一个动画周期内()的平均刷新帧数,实现突变动效。具体应用有:游戏精灵行走、打字效果等 * - 两个关键帧间的刷新次数 * - 方向,可选值为 end | start。 * end为默认值,表示动画一结束,动画效果就结束; * start表示动画一开始就马上执行完第一个关键帧的效果。 */ steps( , )
从张旭鑫那偷来的解释:
start:表示直接开始。也就是时间才开始,就已经执行了一个距离段。于是,动画执行的5个分段点是下面这5个,起始点被忽略,因为时间一开始直接就到了第二个点:
end:表示戛然而止。也就是时间一结束,当前距离位移就停止。于是,动画执行的5个分段点是下面这5个,结束点被忽略,因为等要执行结束点的时候已经没时间了:
另外通过将
const target = document.getElementById("target") target.addEventListener("animationstart", e => { // 动画开始时触发 }) target.addEventListener("animationiteration", e => { // 每次重复执行动画时触发 // 当搞尽脑汁实现重播效果为1时,不会触发。 }) target.addEventListener("animationend", e => { // 当动画结束时触发 })
到这里我们已经可以通过@keyframes定义和应用CSS Animation了,但我们能否获取对动画效果更多的控制权呢?如开始、暂停、继续、重播。通过
function pause (target: HTMLElement):boolean { const isRunning = target.style.animationPlayState == "running" if (isRunning) { target.style.animationPlayState = "paused" } return isRunning } function play (target: HTMLElement):boolean { const isStop = target.style.animationPlayState == "paused" if (isStop) { target.style.animationPlayState = "running" } return isStop } function replay (target: HTMLElement, animationClassName: string):void { // 先移除动画效果 target.classList.remove(animationName) // requestAnimationFrame的回调函数会在下一次界面渲染前执行 requestAnimationFrame(_ => { // 这时动画的影响还在,所以要等界面渲染完后再重新启用动画效果,才能实现重播 requestAnimationFrame(_ => { target.classList.add(animationName) }) }) }总结
CSS3为我们提供了动画效果,除了提供比Transition更丰富的可控性,比JavaScript更简易的API,还让我们可以使用GPU来加速呢^_^
尊重原创,转载请注明来自:https://www.cnblogs.com/fsjoh... ^_^肥仔John
https://developer.mozilla.org...
https://designmodo.com/steps-...
http://lea.verou.me/2011/09/p...
http://jsfiddle.net/simurai/C...
https://www.zhangxinxu.com/wo...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/116846.html
摘要:前言过去零零星星地了解和使用和等伪类伪元素选择器,最近看书时发现这方面有所欠缺,于是决定稍微深入学习一下,以下为伪类部分的整理。伪类伪类选择器实质上是让设计师可以根据元素特定的状态,设置不同的视觉效果。也就是符合以下选择器的元素均支持状态。 前言 过去零零星星地了解和使用:link、::after和content等伪类、伪元素选择器,最近看书时发现这方面有所欠缺,于是决定稍微深入学习...
摘要:不耽误表单提交数据虽然我们无法看到的元素,但当表单提交时依然会将隐藏的元素的值提交上去。让元素在见面上不可视,但保留元素原来占有的位置。不过由于各浏览器实现效果均有出入,因此一般不会使用这个值。继承父元素的值。 前言 还记得面试时被问起请说说display:none和visibility:hidden的区别吗?是不是回答完display:none不占用原来的位置,而visibilit...
摘要:非常的庞大,而且它是完全为设计而生的动效库。它运行于纯粹的之上,是目前最强健的动画资源库之一。可能是创建滚动特效最好用的工具,它支持大量的浏览器,只要它们支持和特性。可以通过安装吊炸天了,接近现实生活中的物理运动碰撞惯性动画库。 收集日期为2019-02-28,★代表当时的该项目在github的star数量 Animate.css 56401 ★ 一个跨浏览器的动效基础库,是许多基础动...
摘要:撸代码实现首页检验单查询成品通用标准审核圆角的何止是啊上图的变成椭圆形了,而且中的文字好像飘到外面。我们可以看到两边相交所形成的矩形的对角线,将作为边的相交点。 前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-top-left/right...
摘要:也就是说我们操作的几何公式中的未知变量,而具体的画图操作则由渲染引擎处理,而不是我们苦苦哀求设计师帮忙。 前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-top-left/right-radius的水平半径之和大于元素宽度时,实际值会按比...
阅读 1594·2023-04-26 02:43
阅读 2992·2021-11-11 16:54
阅读 1342·2021-09-23 11:54
阅读 1163·2021-09-23 11:22
阅读 2358·2021-08-23 09:45
阅读 844·2019-08-30 15:54
阅读 3093·2019-08-30 15:53
阅读 3183·2019-08-30 15:53