前端 - css3動(dòng)畫怎樣對(duì)幀的理解?
問題描述
第一種:
@keyframes slow {0% { background-position: -0px -291px;}25% { background-position: -602px -0px;}50% { background-position: -302px -291px;}75% { background-position: -151px -291px;}100% { background-position: -0px -291px;} } /*動(dòng)畫切換的方式是一幀一幀的改變*/-webkit-animation-timing-function: steps(1, start);
第二種:
$spriteWidth: 140px; // 精靈寬度 @keyframes run { 0% { background-position: 0 0; } 100% { background-position: -($spriteWidth * 12) 0; // 12幀 }}#sprite { width: $spriteWidth; height: 144px; background: url('../images/sprite.png') 0 0 no-repeat; animation: run 0.6s steps(12) infinite;}
1,什么叫“一幀一幀的改變”, steps(1, start);該如何理解?2,第二種直接“-($spriteWidth * 12) 0”我就看不懂了,為什么這樣寫?
問題解答
回答1:1. 什么叫“一幀一幀的改變”, steps(1, start);該如何理解?animation-timing-function 中 steps 的用法參見這篇
steps 詳解
2. 第二種直接“-($spriteWidth * 12) 0”我就看不懂了,為什么這樣寫?首先顯然這是 Scss 文件(一種 css 預(yù)編譯文件)
定義了一個(gè)變量:$spriteWidth
-($spriteWidth * 12) 這句就是一個(gè)運(yùn)算呀 => -(140px*12)
回答2:1: steps(1, start)我在MDN上剛好看到一個(gè)解釋
This keyword represents the timing function steps(1, start). Using this timing function, the animation jumps immediately to the end state and stay in that position until the end of the animation.
就是說你的動(dòng)畫幀一開始就馬上跳到結(jié)束了,所以你看見的是keyframes里面5個(gè)幀一幀一幀地切換。如果沒有steps(1, start),就會(huì)是一個(gè)平滑移動(dòng)的效果。
2: -($spriteWidth * 12)應(yīng)該是指把你這個(gè)動(dòng)畫分成12幀,每一幀你的背景右移-($spriteWidth * 12)這個(gè)長度
相關(guān)文章:
1. mysql - 新浪微博中的關(guān)注功能是如何設(shè)計(jì)表結(jié)構(gòu)的?2. android-studio - Android Studio 運(yùn)行項(xiàng)目的時(shí)候一堆警告,跑步起來!?3. MySQL數(shù)據(jù)庫中文亂碼的原因4. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問題。5. 如何解決Centos下Docker服務(wù)啟動(dòng)無響應(yīng),且輸入docker命令無響應(yīng)?6. angular.js - 關(guān)于$apply()7. dockerfile - [docker build image失敗- npm install]8. 表單提交驗(yàn)證,沒反應(yīng),求老師指點(diǎn)9. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安裝失敗???10. 我在centos容器里安裝docker,也就是在容器里安裝容器,報(bào)錯(cuò)了?
