# CSS關鍵幀與動畫
## 動畫的原理
即靜態圖片的快速切換,快到人眼分辨不出來的時候就可以產生連續移動動畫的效果。
## 需要多快
對于純靜態圖片來說,需要一秒切換三十張(游戲的CG),對于拍攝來說,需要一秒切換24張(電影)。
因為攝像機拍出來的東西并不是純靜態的,它的每一幀包含有它的上一幀和下一幀的部分信息(比如如果說風扇再轉,拍攝出來的效果的每一張截圖都是模糊的,相反賽車游戲,你截屏的每一張都是清晰的風景壁紙)
## 幀
通解即最小單元,這個概念在網絡上也同樣適用,在這里就是構成動畫的每一張靜態圖片。
## 關鍵幀
對于早期動畫來說,例如《大鬧天宮》,30幀的動畫幾乎每一幀都是畫出來的,但是現在在計算機的幫助下不需要了,計算機可以自動推算補幀,而你需要給出的是**關鍵幀**,關鍵幀與關鍵幀之間的動畫則由計算機自己腦補。比如第一個關鍵幀說盒子在左邊,第二個關鍵幀說盒子在右邊,那么計算機會自動補齊從左到右的移動過程。
## 實戰一下
HTML部分
```html
<body>
<div class="box"></div>
</body>
```
非常簡單,一個盒子就可以了
css部分
```css
// 設置背景顏色
body {
background: #333;
}
.box {
background: #fff; // 設置顯眼的顏色
width: 200px; // 固定寬,為了看的見
height: 200px; // 固定高,為了看的見
position: relative; // 相對定位
animation-name: myanimation; // 動畫名字,指定關鍵幀的名字就可以,細節在下面的定義
animation-duration: 4s; // 動畫持續時間,間接控制速率,越長越慢!
}
// 定義關鍵幀
@keyframes myanimation {
// 必須。在動畫開始時,關鍵幀的位置
0% {
background: #fff;
left: 0;
top: 0;
}
// 在動畫四分之一時,關鍵幀的位置
25% {
background: #f00;
left: 300px;
top: 0;
}
// 在動畫一半時,關鍵幀的位置
50% {
background: #0f0;
left: 300px;
top: 300px;
}
// 在動畫四分之三時,關鍵幀的位置
75% {
background: #00f;
left: 0;
top: 300px;
}
// 必須,在動畫結束時,關鍵幀的位置
100% {
background: #fff;
left: 0;
top: 0;
}
}
```
更多內容下個篇章見
> 本文作者: 不愛喝橙子汁
- 自述
- 學會提問
- 起步
- 安裝
- 版本升級
- 1.x 升級 2.x 常見問題
- 命令行模式下node-sass安裝錯誤
- 查看版本
- uView UI 1.x 相關問題
- 安裝
- Popup 彈窗
- tabs 標簽
- Waterfall 瀑布流
- Table 表格
- Dropdown 下拉菜單
- uview-ui組件篇
- u-upload監聽beforeRead事件無效
- 組件怎么關不了
- 導航欄不默認返回好麻煩
- ref怎么獲取不到
- z-index拉滿都覆蓋不了map
- u-text對手機號脫敏
- u-input的placeholder去不掉
- 服務端返回數據,form表單驗證錯誤
- checkbox增加選中面積
- uview-ui組件篇/checkbox無法取消選中
- 小程序輸入框的placeholder會穿透到彈出層
- JavaScript篇
- 判斷數據類型
- 數組操作
- 節流與防抖函數
- this怎么就不對
- 計算地圖上兩點間的距離
- CSS篇
- 我要超出顯示省略號
- uniapp中小程序樣式穿透問題
- 關鍵幀與動畫
- CSS動畫屬性總結
- 過渡與動畫
- 正則表達式篇
- 身份證號
- 手機號
- 是否合法的http/https域名
- 數據處理篇
- 對數組分組
- 深拷貝對象
- 提取數組屬性
- 提取對象屬性
- 常見問題
- 如何給由組件觸發的事件中傳入自定義的參數
- 分類的雙列聯動
- 三級聯動的實現
- 小程序預覽提示包過大
- 框架安裝失敗
- 表格、瀑布流、下拉列表 組件為什么沒有了
- tabBar組件怎么用
- 時間、日歷、選擇器相關問題
- 字體圖標不顯示
- class 或 /deep/ 不生效