问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

想要更深入理解c和c++看什么书比较好呢?像设计他们的内存分配,在计算机里的一些实现方式这些。

发布网友 发布时间:2022-04-21 08:35

我来回答

2个回答

懂视网 时间:2022-04-21 12:56

作者:Aaron的博客

网址:http://www.cnblogs.com/aaronjs/p/4642015.html

--------------------------------------------------------------------------------------------------------------------------------

CSS3我在5年之前就有用了,包括公司项目都一直在很前沿的技术。

最近在写慕课网的七夕主题,用了大量的CSS3动画,但是真的沉淀下来仔细的去深入CSS3动画的各个属性发现还是很深的,这里就写下关于帧动画steps属性的理解

我们知道CSS3的Animation有八个属性

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

其中1-7大多都有介绍,但是animation-timing-function是控制时间的属性

在取值中除了常用到的 三次贝塞尔曲线 以外,还有个让人比较困惑的steps() 函数

animation默认以ease方式过渡,它会在每个关键帧之间插入补间动画,所以动画效果是连贯性的

除了ease,linear、cubic-bezier之类的过渡函数都会为其插入补间。但有些效果不需要补间,只需要关键帧之间的跳跃,这时应该使用steps过渡方式

animation-timing-function 规定动画的速度曲线

以上w3school网站上给的使用方法,但是漏掉一个很重要的steps

简单的来说,我们一直使用animation基本都是实现线性渐变的动画

位置在固定的时间从起点到终点
尺寸在固定的时间线性变化
颜色的线性改变等等

看效果线性动画:http://sandbox.runjs.cn/show/5u3ovsfb

截取CSS如下

.test1 { width: 90px; height: 60px; -webkit-animation-name: skyset; -webkit-animation-duration: 2000ms; -webkit-animation-iteration-count: infinite; /*无限循环*/ -webkit-animation-timing-function: linear;}@-webkit-keyframes skyset { 0% { background: red;} 50%{ background: blue} 100% {background: yellow;}}

timing-function:linear 定义的是一个匀速变化的动画,就是在2秒内,从红色过度到蓝色到黄色,是一个很线性的颜色变化

如果要实现帧动画效果而不是线性的变化就需要引入step这个值了,换句话就是没有过渡的效果,而是一帧帧的变化

同样可以看测试帧动画:http://sandbox.runjs.cn/show/t5xqz6i4

理解steps

steps 函数指定了一个阶跃函数

第一个参数指定了时间函数中的间隔数量(必须是正整数)

第二个参数可选,接受 start 和 end 两个值,指定在每个间隔的起点或是终点发生阶跃变化,默认为 end。

step-start等同于steps(1,start),动画分成1步,动画执行时为开始左侧端点的部分为开始;

step-end等同于steps(1,end):动画分成一步,动画执行时以结尾端点为开始,默认值为end。

看看W3C的规范transition-timing-function

steps第一个参数的错误的理解:

steps(5,start)

steps() 第一个参数 number 为指定的间隔数,即把动画分为 n 步阶段性展示,估计大多数人理解就是keyframes写的变化次数

例如:

@-webkit-keyframes circle { 0% {} 25%{} 50%{} 75%{} 100%{}}

我之前也一直认为steps(5,start)中的5 就是指的keyframes中的0% 25% 50% 75% 100% 分成5个间隔等分

为什么会出现这种理解错误,我们看一个例子

keyframes的关键帧是只有2个规则的时候,假如我们有一张400px长度的雪碧图

@-webkit-keyframes circle { 0% {background-position-x:0;} 100%{background-position-x: -400px;}} 

此刻设置steps(5,start)那么会发现5张图会出现帧动画的效果,因为steps中的5把 0% ? 100%的规则,内部分成5个等分

实际内部会执行这样一个关键帧效果

@-webkit-keyframes circle { 0% {background-position-x: 0;} 25% {background-position-x: -100px;} 50% {background-position-x:-200px;} 75%{background-position-x: -300px;} 100%{background-position-x: -400px;}}  

将这个规则稍微修改下,加入一个50%的状态

@-webkit-keyframes circle { 0% {background-position-x: 0;} 50% {background-position-x: -200px;} 100%{background-position-x: -400px;}}

那么同样用steps(5,start)效果就会乱套

此刻你会很迷惑,所以关键要理解第一个参数的针对点,首先引入一个核心点:

timing-function 作用于每两个关键帧之间,而不是整个动画

那么第一个参数很好理解了,steps的设置都是针对两个关键帧之间的,而非是整个keyframes,所以第一个参数对 ? 次数对应了每次steps的变化

换句话说也是 0-25 之间变化5次,? 25-50之间 变化5次 ,50-75 之间变化5次,以此类推


第二个参数可选,接受 start 和 end 两个值,指定在每个间隔的起点或是终点发生阶跃变化,默认为 end

通过案例看下step-start,step-end的区别

@-webkit-keyframes circle { 0% {background: red} 50%{background: yellow} 100% {background: blue}}

step-start: 黄色与蓝色相互切换

step-end : 红色与黄色相互切换

2个参数都会选择性的跳过前后部分,start跳过0%,end跳过100%

step-start在变化过程中,都是以下一帧的显示效果来填充间隔动画,所以0% 到 50%? 直接就显示了黄色yellow

step-end与上面相反,都是以上一帧的显示效果来填充间隔动画,所以0% 到 50% 直接就显示了红色red

引用w3c的一张step的工作机制图

总结:

steps函数,它可以传入两个参数,第一个是一个大于0的整数,他是将间隔动画等分成指定数目的小间隔动画,然后根据第二个参数来决定显示效果。

第二个参数设置后其实和step-start,step-end同义,在分成的小间隔动画中判断显示效果。可以看出:steps(1, start) 等于step-start,steps(1,end)等于step-end

最核心的一点就是:timing-function 作用于每两个关键帧之间,而不是整个动画。

demo : http://designmodo.com/steps-css-animations/

热心网友 时间:2022-04-21 10:04

《C Primer Plus》经典之作~!~!如果想深入学习的话可以看这本书。 如果是想考个什么计算机二级这样的东西的话,看潭浩强的《C程序设计》就可以了。就不用看《C Primer Plus》了。杀鸡焉用牛刀?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小红书怎么修改ID 专属ID更改方法 Win11如何更改字体视觉效果 Win11字体视觉效果修改方法介绍 华为团队管理模式 通信工程这个专业主要是学什么 专注力差的孩子该如何纠正 三岁的孩子专注力不好,怎么培养她的专注力呀!。 镇江关周围有什么玩的,镇江及周边旅游景点 大港南站去镇江汽车站怎么走 镇江汽车站到大港南站有多远 出国去澳大利亚留学都需要注意哪些事项呢? 澳大利亚留学条件及注意事项有哪些 cam是计算机辅助什么的缩写? 怎样批量删除qq空间说说 公积金封存被冻结部分款项余款怎么取? 银行卡冻结公积金怎么取 北京理工大学在职研究生需要论文答辩吗? 自考生攻读北京理工大学在职研究生双证教育难度怎么样 帮帮我把``市场营销选择题!!!高手来!! 财务管理高手请进。急急急!!! 集成支付宝接口为什么一定要用--合作身份者id和安全检验码呢?各有什么作用?? 我想请问一下,房东去银行贷款,把房子做抵押,那租客要不要跟银行签字的? 房东用门面贷款为什么需要承租者的身份证复印件和签字? 房东房子抵押贷款租客要在银行合约上签字吗?还要提供身份证复印件吗 房东抵押贷款需要租客签字 银监会对房产抵押贷款的规定,是否需要承租人签字确认? 房屋抵押合同到期了以后还想继续抵押贷款是否需要户主再次签字 房东把房子抵押贷款租客需要签字吗 step7ip地址怎么看 洗衣机如何连接水龙头?我们家的这种接头是没有四个螺丝的那种,现在连接不上水龙头,总是在喷水。在线等 车子事故走保险 到4s店维修 中间需要自己联系保险公司谈定损价吗?如价格有高低该怎么办?我需要先垫付的 4s店买车上的保险,车碰后,如何联系 windows10系统的电脑中温度的符号咋打出来 “一场秋雨一场凉,一曲相思一场忧,夏未尽,秋已至,风吹叶落,后续是什么? 河北大城县属于哪个市阜草镇在什么地方 廊坊市大城县阜草的邮编是多少 大城县属于哪个市? 大城县属于哪个省哪个市 河北省的大成属于哪个市管辖? 大城县属哪个市 河间在哪啊? 大城县属于哪个省 河北省廊坊市大城县北魏乡东杜各庄村的邮编号是多少 廊坊市邮政编码是多少?大城县的是多少? 大城县霍辛庄70年前归哪个市 廊坊市大城县最大的自然村是哪个村? 河北省廊坊市大城县的翻译是:什么意思 河北省廊坊间大城县藏屯乡鲍马策村邮编号是多少 廊坊市大城县的去白沟行吗??? 河北省廊坊市大城县权村镇邮编是多少 被老板开除也要写离职单交接单吗? 被辞退可以签离职交接表吗