Page 255 - css揭秘
P. 255

animation: spin-reverse 3s infinite linear;
                                                  }

                                                  这样一来,在任意时间点上,假设第一套动画的旋转角度是 x,那么第
                                              二套动画的旋转角度就正好是 360 – x,因为前者的角度值是不断增加的,
                                              而后者则是相应减少的。这正是我们所期望的。于是在图 8-37 中可以看到,
                                              它终于产生了我们梦寐以求的效果。


                    图 8-37
                    我们现在达到了想要的动画效果,
                    但代码稍显臃肿









                                                  虽然效果已经达到了,但这段代码仍然是有必要继续改进的。比如说,
                                              两套动画中的各个参数其实是重复了两次的。如果我们需要调整动画周期的
                                              话,还要修改两处,这显然是不够 DRY 的。我们可以很容易地解决这个问
                                              题,让内层动画从父元素那里继承所有的动画属性,然后把动画名覆盖掉就
                                              可以了:

                                                  @keyframes spin {
                                                      to { transform: rotate(1turn); }
                                                  }
                                                  @keyframes spin-reverse {
                                                      from { transform: rotate(1turn); }
                                                  }

                                                  .avatar {
                                                      animation: spin 3s infinite linear;
                                                      transform-origin: 50% 150px; /* 150px = 路径的半径 */
                                                  }

                                                  .avatar > img {
                                                      animation: inherit;
                                                      animation-name: spin-reverse;
                                                  }

                                                  不过再想一想,如果只是为了反转第一套动画,就又建了一套新动画,
                                              有点浪费啊。还记得我们在“闪烁效果”中所提到的 animation-direction
                                              属性吗?在那一篇攻略中,我们已经领会到了 alternate 这个值的实用之
                                              处。而在这里,我们将会用到 reverse 这个值,它可以得到原始动画的反向
                                              版本,这样我们就可以利用一套关键帧实现两套旋转动画:


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




                  224   第 8 章 过渡与动画







          ඀ࠡ  JOEC
   250   251   252   253   254   255   256   257   258   259   260