Page 241 - css揭秘
P. 241

解决方案

                                                  用 CSS 动画确实可以实现各种类型的闪烁效果,比如对整个元素进行
                                              闪烁(通过 opacity 属性),对文字的颜色进行闪烁(通过 color 属性),
                                              对边框进行闪烁(通过 border-color 属性),等等。在下面的内容中,我
                                              们将只讨论文字的闪烁效果,因为这是最常见的需求。不过,我们介绍的原
                                              理同样适用于元素其他部分的闪烁效果。
                                                  要实现一个平滑的闪烁效果其实很简单。我们迈出的第一步可能是这
                                              样的:

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

                                                  .highlight { animation: 1s blink-smooth 3; }

                                                  这基本上成功了。这段文字可以平滑地从它原来的颜色淡化为透明色,
                                              但随后会生硬地跳回原来的颜色。我们把文字颜色随时间发生的变化用图形
                                              的方式记录下来(参见图 8-18),有助于我们接下来的分析。


                    图 8-18
                    这段文字的颜色在三秒钟(三个
                    循环周期)内的变化过程
                                                  这可能正是我们预先设想的效果。如果是这样的话,那就大功告成了!
                                              但如果我们希望文字颜色的变化不仅是平滑隐去的,同时还是平滑显现的,
                                              那就还得继续努力一番。为了达到这个结果,我们想到了一个办法:修改关
                                              键帧,让状态切换发生在每个循环周期的中间。

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

                                                  .highlight {
                                                      animation: 1s blink-smooth 3;
                                                  }

                                                  现在它似乎就是我们所期望的效果了。不过这里还有一个问题,虽然
                                              在这个特定的动画中表现得不是很明显(因为颜色或透明度的过渡很难体
                                              现出各种调速函数的特征),但我们心里一定要明白:这个动画一直是处在
                                              加速过程中的,不论是在文字显现还是隐去时——这对某些动画来说可能
                                              会显得不太自然(比如类似脉搏跳动的动画)。在那种情况下,我们可以从
                                              工具箱中请出另一件法宝:animation-direction。

                                                  animation-direction 的 唯 一 作 用 就 是 反 转 每 一 个 循 环 周 期
                                             (reverse),或第偶数个循环周期(alternate),或第奇数个循环周期
                                             (alternate-reverse)。它的伟大之处在于,它会同时反转调整函数,
                                              从而产生更加逼真的动画效果。我们可以把它用在需要闪烁的元素上,
                                              比如:





                  210   第 8 章 过渡与动画







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