Page 110 - css揭秘
P. 110

解决方案恰恰来源于一个看似最不沾边的地方。我们将使用上面刚刚
                    用到的那个动画,但动画必须处于暂停状态。跟常规情形下我们让动画动起
                    来的做法不一样,这里我们要用负的动画延时来直接跳至动画中的任意时间
                    点,并且定格在那里。很难理解?别担心,先来看看负的 animation-delay
                    在规范中的解释。

                         “一个负的延时值是合法的。与 0s 的延时类似,它意味着动画会立即
                      开始播放,但会自动前进到延时值的绝对值处,就好像动画在过去已经播
                      放了指定的时间一样。因此实际效果就是动画跳过指定时间而从中间开始
                      播放了。”                                                              图 3-56
                                                                                         我们最终得到了正确的 60% 饼图
                                    ——CSS 动画(第一版)(http://w3.org/TR/css-animations/
                                                                       #animation-delay)  小提示
                        因为我们的动画是暂停的,所以动画的第一帧(由负的 animation-                                  你可以把这个技巧应用到其
                    delay 值定义)将是唯一显示出的那一帧。在饼图上显出的比率就是我们的                                 他场景中,比如你想从一条渐变
                                                                                         中摘出几个颜色值而不想产生重
                    animation-delay 值在总的动画持续时间中所占的比率。举例来说,如果动
                                                                                         复的代码或者复杂的计算,又或
                    画持续时间定为 6s,我们只需要把 animation-delay 设置为 -1.2s,就能                       者你想以步进的方式来调试动画,
                    显示出 20% 的比率。为了简化这个计算过程,我们可以设置一个长达 100s                               等等。在 play.csssecrets.io/
                    的持续时间。别忘了,这里的动画是永远处在暂停状态的,因此我们指定的                                    static-interpolation 中,我为
                                                                                         这个技巧制作了一个单独的简化
                    持续时间并不会产生其他副作用。
                                                                                         示例。
                        现在还剩最后一个问题:动画是作用在伪元素上的,但我们希望最终
                    内联样式可以设置在 .pie 元素上。不过,由于 <div> 上并没有任何动画效
                    果,我们可以用内联样式的方式为其设置 animation-delay 属性,然后再
                    在伪元素上应用 animation-delay:  inherit; 属性。综合以上要素,如果
                    要让饼图显示为 20% 和 60%,则结构代码为:

                        <div class="pie"                                       HTML
                             style="animation-delay: -20s"></div>
                        <div class="pie"
                             style="animation-delay: -60s"></div>

                        我们刚刚为动画准备的 CSS 代码就会变成(这里省去了 .pie 的相关样
                    式,因为跟前面相比没有变化):

                        @keyframes spin {
                            to { transform: rotate(.5turn); }
                        }

                        @keyframes bg {
                            50% { background: #655; }
                        }

                        .pie::before {
                            /* [其余的样式代码保持原样] */
                            animation: spin 50s linear infinite,
                                       bg 100s step-end infinite;                        图 3-57
                            animation-play-state: paused;                                文本内容在隐藏之前的样子



                                                                                             14 简单的饼图          79







          ඀ࠡ  JOEC
   105   106   107   108   109   110   111   112   113   114   115