Page 242 - css揭秘
P. 242

@keyframes blink-smooth { to { color: transparent } }

                        .highlight {
                            animation: .5s blink-smooth 6 alternate;
                        }


                                                                                         图 8-19
                                                                                         animation-direction 属性接
                                                                                         受的值共有四个,本图以一段从
                                                                                         black 变化到 transparent 并循
                                                                                         环三次的动画为例,展示了这四
                                                                                         个值各自对动画的作用效果





                        请注意,我们必须把动画循环的次数翻倍(而不是像前面的方法那样把
                    循环周期的时间长度翻倍),因为现在一次淡入淡出的过程是由两个循环周
                    期组成的。基于同样的原因,我们也要把 animation-duration 减半。

                        如果我们想得到的是一个平滑的闪烁动画,现在就可以收工了。不过,
                    假如我们只想得到最普通的那种闪烁效果呢?应该如何实现?我们首先想到
                    的办法可能是:

                        @keyframes blink { to { color: transparent } }

                        .highlight {
                            animation: 1s blink 3 steps(1);
                        }

                        但是,这个尝试会华丽地失败:什么动静也没有。原因在于,steps(1)
                    本质上等同于 steps(1,  end),它表示当前颜色与 transparent 之间的过
                    渡会在一次步进中完成,于是颜色值的切换只会发生在动画周期的末尾(参
                    见图 8-20)。因此,我们会看到起始值贯穿于整个动画周期,而终止值只在
                    动画结尾的无限短的时间点处出现。如果我们改用 steps(1, start),结果
                    就完全相反了:颜色值的切换会发生在动画周期最开始,于是我们始终只能
                                                                                          动画进度
                    看到纯透明的文字,没有任何动画或闪烁效果。

                        以这个逻辑来看,我们接下来可以换用 steps(2) 来碰碰运气,两种步                              时间
                    进方式(start 或 end)都可以试一下。现在我们终于可以看到闪烁效果了,                              图 8-20
                    但这个闪烁效果要么是由半透明切到纯透明,要么是由半透明切到实色,原                                    实际上 steps(1) 对动画的作用
                    因同上。由于我们无法通过配置 steps() 来让这个切换动作发生在动画周期                               结果是这样的
                    的中间点(只能发生在起点或终点),唯一的解决方案是调整动画的关键帧,
                    让切换动作发生在 50% 处,就像我们在本节刚开始所做的那样:

                        @keyframes blink { 50% { color: transparent } }

                        .highlight {



                                                                                               44 闪烁效果        211







          ඀ࠡ  JOEC
   237   238   239   240   241   242   243   244   245   246   247