每週一個前端動畫之一:UC瀏覽器球隊展現動畫的實現

做爲一個眼中有碼的人,看見某個網頁或者app的炫酷效果時,第一反應就是這怎麼實現的。這個系列就是把本身見到的一些動畫效果分析實現出來,本文分析實現的某些效果,僅僅做爲一個思路分享,僅僅做爲學習素材使用。閒話不說,這篇文章是前端動畫系列的第一篇。css

源動畫效果

做爲一個輕度僞球迷,常常會看些賽事比分,好比英超(利物浦是冠軍)。使用UC的朋友應該發現過,UC在展現比賽時的效果仍是很炫的,動畫很簡單,可是效果的確不錯。效果圖以下:前端

實現分析

通過觀察不難發現:git

  • 動畫效果是左右對稱的,只要實現了一側便可。
  • 球隊的logo只是在x軸進行了移動,可是停的位置以及停頓時機都須要注意
  • 球隊logo有一個從大到小的縮放
  • logo的透明度逐漸增大

分析出以上四點,就會發現效果實現起來也不復雜。github

代碼實現

動畫使用CSS3的幀動畫實現animation,不熟悉該屬性用法的同窗須要補補課了。注意該屬性的兼容性寫法,Safari 和 Chrome須要寫成-webkit-animationweb

咱們只分析左側曼聯logo的實現便可。從logo進入到動畫定格,咱們將整個過程分紅4個部分,能夠肯定4個關鍵幀:bash

@-webkit-keyframes team-logo-left {}
複製代碼

關鍵幀1:logo放大一倍,x軸偏離初始位置到窗體外部。app

0% {
      -webkit-transform: translate3d(-145px, 0, 0) scale(2);
      -webkit-transform-origin: center;
      -webkit-animation-timing-function: ease-out;
      opacity: .05
   }
複製代碼

關鍵幀2:logo放大一倍,x軸偏離初始位置到窗體中間部分,並稍做停頓,因此使用了50%,60%做停頓,時間函數使用了cubic-bezier來調整。函數

50%, 60% {
            -webkit-transform: translate3d(76px, 0, 0) scale(2);
            -webkit-transform-origin: center;
            -webkit-animation-timing-function: cubic-bezier(.33, .95, .77, 1.01);
            opacity: .8
        }
複製代碼

關鍵幀3:logo恢復到正常大小,x軸偏離初始位置略左側,透明度已經變成徹底不透明。學習

85% {
            -webkit-transform: translate3d(-10px, 0, 0) scale(1);
            -webkit-animation-timing-function: ease-in;
            -webkit-transform-origin: center;
            opacity: 1
        }
複製代碼

關鍵幀4:即從偏左位置到達最終的停留位置動畫

100% {
            -webkit-transform: translate3d(0, 0, 0) scale(1);
            -webkit-transform-origin: center;
            opacity: 1
        }
複製代碼

效果展現

關鍵點解讀

計時函數animation-timing-function

  • 屬性能夠做用於整個動畫中,定義了動畫的每次循環是如何隨時間遞進的。
  • 該屬性還能夠做用於關鍵幀,如本例的用法,各個關鍵幀都有單獨的計時函數。這時的計時其實指的的幀之間的時間函數,順序播放的動畫,結尾關鍵幀的計時函數不會生效。
  • 屬性的值可選,有linear,ease,ease-in,ease-out,ease-in-out,cubic-bezier(n,n,n,n),以及還有階躍函數steps(n,start/end),有興趣的同窗能夠深刻了解一下。

動畫的實現其實很簡單,代碼已上傳到github,歡迎提出Issues

![](https://user-gold-cdn.xitu.io/2018/2/3/16157535de4e4f6e?w=1024&h=528&f=png&s=346745)
相關文章
相關標籤/搜索