国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

CSS魔法堂:更豐富的前端動效by CSS Animation

MrZONT / 844人閱讀

摘要:無效生效重復怎么辦與規則一樣,標準規定相同的關鍵幀不產生層疊,僅最后出現的認定為有效。但實際上和均將關鍵幀設計為可層疊的。為默認值,表示動畫一結束,動畫效果就結束表示動畫一開始就馬上執行完第一個關鍵幀的效果。

前言

?在《CSS魔法堂:Transition就這么好玩》中我們了解到對于簡單的補間動畫,我們可以通過transition實現。那到底多簡單的動畫適合用transtion來實現呢?答案就是——我們只需定義動畫起始和結束幀的狀態的動畫。一旦關鍵幀數大于2時,我們必須轉向CSS Animation了。本文為這段時間學習的記錄,歡迎拍磚。

簡單粗暴介紹CSS Animation 規則和屬性 定義關鍵幀動畫

語法:

@keyframes  {
  [ {
    /* CSS Properties */
  }]*
}

示例:

@keyframes rotate {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

注意項:
1.的命名規范

// 命名需要遵循以下規則
const rIsInvalid = /^--|^[0-9]+-|^(?:unset|initial|inherit|none)$/
    , rIsValid = /^[0-9a-z-_]+$/i
function isValidAnimationName(animationName: string): boolean{
  return !rIsInvalid.test(animationName) && rIsValid(animationName)
}

2.取值
0-100%from,等價與0%to,等價與100%
3.重復怎么辦
@keyframes CSS規則不支持層疊樣式,因此當出現多個同名keyframes,那么僅最后出現的那個有效。

/* 無效 */
@keyframes rotate {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
/* 生效 */
@keyframes rotate {
  from { transform: rotate(90deg); }
  to { transform: rotate(-360deg); }
}

4.重復怎么辦
與@keyframes CSS規則一樣,標準規定相同的關鍵幀不產生層疊,僅最后出現的認定為有效。
但實際上FireFox14+和Chrome均將關鍵幀設計為可層疊的。

@keyframes rotate {
  from { transform: rotate(0deg); }
  from { background: red; }
  /* 上述兩條time offset實際上等價于
   * from { transform: rotate(0deg); background: red; }
   */
  to {
    transform: rotate(360deg);
    background: yellow;
  }
}

5.!important導致屬性失效
一般情況下使用!important會讓CSS屬性獲得最高權重,但在@keyframes下卻會導致該CSS屬性失效。

@keyframes rotate {
  from {
    transform: rotate(90deg);
    background: red!important; /* background屬性無效 */
  }
  to { transform: rotate(-360deg); }
}

6.必須提供至少兩個關鍵幀

/* 不會根據緩動函數產生動畫效果,而是在動畫持續時間的最后瞬間移動過去 */
@keyframes move-left{
   to {
       left: 100px;
   }
}
使用動畫
 {
  animation: 
             
             
             
             
             
             
             ;
}

示例:

.box.rotate {
  animation: rotate 10s infinite alternate;
}
子屬性介紹

,指定通過@keyframes定義的補間動畫名稱。
,動畫持續時長,默認為0s。單位為s和ms。
,動畫播放延遲,默認為0s。單位為s和ms。
,動畫重復播放次數,默認為1,infinite表示無限循環。動畫播放總時長為*
,可選值為normal | reverse | alternate | alternate-reverse,分別表示動畫播放順序是從from到to從to到from從from到to再從to到from從to到from再從from到to注意:設置alternate|alternate-reverse時,animation-iteration-count必須大于1才能看到效果
,可選值為none | forwards | backwards | both,用于設置動畫開始前和結束后是否應用0%100%的樣式對元素上。分別表示不應用應用100%的樣式延遲播放期間應用0%的樣式0%和100%的樣式均應用
注意:

默認情況下(none),動畫結束后會恢復動畫前的樣式;

設置backwards時,值大于0才能看到效果。

,可選值running | paused,獲取和設置播放狀態。注意:通過這個屬性,我們僅能實現暫停和繼續播放的效果,無法實現重播,更別說回放了
,用于設置緩動函數類型,值為ease | ease-in | ease-out | ease-in-out | linear | step-start | step-end | steps(, ) | frames() | cubic-bezier(,,,)
其中ease | ease-in | ease-out | ease-in-out | linear | cubic-bezier(,,,)的效果均為連續漸變的,而step-start | step-end | steps(, ) | frames()則為突變效果。下面我們深入理解后者吧。

緩動函數-step解疑專題

?step-start實際上等價于steps(10, start),而step-end則等價于steps(10),所以我們只要理解好steps(, )即可。

/* 通過設置在一個動畫周期內()的平均刷新幀數,實現突變動效。具體應用有:游戲精靈行走、打字效果等
 *  - 兩個關鍵幀間的刷新次數
 *  - 方向,可選值為 end | start。
 *               end為默認值,表示動畫一結束,動畫效果就結束;
 *               start表示動畫一開始就馬上執行完第一個關鍵幀的效果。
 */
steps(, )

從張旭鑫那偷來的解釋:
start:表示直接開始。也就是時間才開始,就已經執行了一個距離段。于是,動畫執行的5個分段點是下面這5個,起始點被忽略,因為時間一開始直接就到了第二個點:

end:表示戛然而止。也就是時間一結束,當前距離位移就停止。于是,動畫執行的5個分段點是下面這5個,結束點被忽略,因為等要執行結束點的時候已經沒時間了:

另外通過將設置為forwards,那么當設置為end時,也會顯示(保持)動畫最后一個關鍵幀的樣式。

事件
const target = document.getElementById("target")
target.addEventListener("animationstart", e => {
  // 動畫開始時觸發
})
target.addEventListener("animationiteration", e => {
  // 每次重復執行動畫時觸發
  // 當為1時,不會觸發。
})
target.addEventListener("animationend", e => {
  // 當動畫結束時觸發
})
搞盡腦汁實現重播效果

到這里我們已經可以通過@keyframes定義和應用CSS Animation了,但我們能否獲取對動畫效果更多的控制權呢?如開始、暫停、繼續、重播。通過我們能輕易實現開始、暫停和繼續的效果,但重播卻沒那么容易。

function pause (target: HTMLElement):boolean {
  const isRunning = target.style.animationPlayState == "running"
  if (isRunning) {
    target.style.animationPlayState = "paused"
  }
  
  return isRunning
}

function play (target: HTMLElement):boolean {
  const isStop = target.style.animationPlayState == "paused"
  if (isStop) {
    target.style.animationPlayState = "running"
  }
  
  return isStop
}

function replay (target: HTMLElement, animationClassName: string):void {
  // 先移除動畫效果
  target.classList.remove(animationName)
  // requestAnimationFrame的回調函數會在下一次界面渲染前執行
  requestAnimationFrame(_ => {
    // 這時動畫的影響還在,所以要等界面渲染完后再重新啟用動畫效果,才能實現重播
    requestAnimationFrame(_ => {
      target.classList.add(animationName)
    })
  })
}
總結

CSS3為我們提供了動畫效果,除了提供比Transition更豐富的可控性,比JavaScript更簡易的API,還讓我們可以使用GPU來加速呢^_^
尊重原創,轉載請注明來自:https://www.cnblogs.com/fsjoh... ^_^肥仔John

參考

https://developer.mozilla.org...
https://designmodo.com/steps-...
http://lea.verou.me/2011/09/p...
http://jsfiddle.net/simurai/C...
https://www.zhangxinxu.com/wo...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/116846.html

相關文章

  • CSS魔法:稍稍深入偽類選擇器

    摘要:前言過去零零星星地了解和使用和等偽類偽元素選擇器,最近看書時發現這方面有所欠缺,于是決定稍微深入學習一下,以下為偽類部分的整理。偽類偽類選擇器實質上是讓設計師可以根據元素特定的狀態,設置不同的視覺效果。也就是符合以下選擇器的元素均支持狀態。 前言 ?過去零零星星地了解和使用:link、::after和content等偽類、偽元素選擇器,最近看書時發現這方面有所欠缺,于是決定稍微深入學習...

    tanglijun 評論0 收藏0
  • CSS魔法:display:none與visibility:hidden恩怨情仇

    摘要:不耽誤表單提交數據雖然我們無法看到的元素,但當表單提交時依然會將隱藏的元素的值提交上去。讓元素在見面上不可視,但保留元素原來占有的位置。不過由于各瀏覽器實現效果均有出入,因此一般不會使用這個值。繼承父元素的值。 前言 ?還記得面試時被問起請說說display:none和visibility:hidden的區別嗎?是不是回答完display:none不占用原來的位置,而visibilit...

    selfimpr 評論0 收藏0
  • 可能是最全前端動效庫匯總

    摘要:非常的龐大,而且它是完全為設計而生的動效庫。它運行于純粹的之上,是目前最強健的動畫資源庫之一。可能是創建滾動特效最好用的工具,它支持大量的瀏覽器,只要它們支持和特性。可以通過安裝吊炸天了,接近現實生活中的物理運動碰撞慣性動畫庫。 收集日期為2019-02-28,★代表當時的該項目在github的star數量 Animate.css 56401 ★ 一個跨瀏覽器的動效基礎庫,是許多基礎動...

    afishhhhh 評論0 收藏0
  • CSS魔法:重拾Border之——不僅僅是圓角

    摘要:擼代碼實現首頁檢驗單查詢成品通用標準審核圓角的何止是啊上圖的變成橢圓形了,而且中的文字好像飄到外面。我們可以看到兩邊相交所形成的矩形的對角線,將作為邊的相交點。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發現border-radius還分水平半徑和垂直半徑,然后又發現border-top-left/right...

    _Dreams 評論0 收藏0
  • CSS魔法:重拾Border之——廣闊遐想

    摘要:也就是說我們操作的幾何公式中的未知變量,而具體的畫圖操作則由渲染引擎處理,而不是我們苦苦哀求設計師幫忙。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發現border-radius還分水平半徑和垂直半徑,然后又發現border-top-left/right-radius的水平半徑之和大于元素寬度時,實際值會按比...

    lily_wang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<