<address id="9d9v3"></address>
        <form id="9d9v3"></form><listing id="9d9v3"><nobr id="9d9v3"><progress id="9d9v3"></progress></nobr></listing>
          <noframes id="9d9v3"><form id="9d9v3"></form>

          <address id="9d9v3"></address>

          <span id="9d9v3"><nobr id="9d9v3"><meter id="9d9v3"></meter></nobr></span>
          <address id="9d9v3"></address>
          <form id="9d9v3"><nobr id="9d9v3"></nobr></form>

          直播帶貨服務

          cssanimations由關鍵幀(@keyframes)和css聲明兩部分構成

          animation屬性

          cssanimations由關鍵幀(@keyframes)和css聲明兩部分構成

          通過前面的知識點知道cssanimations關鍵幀(@keyframes)和css聲明兩部分構成,接下來學習下動畫的聲明屬性。animation屬性用于描述動畫的css聲明,包括指定具體動畫以及動畫時長等行為。與transtion類似,animation也是一個復合屬性,其取值主要有以下8個,下表格6-5列出了@keyframes規則和所有動畫屬性:

          表6-5 @keyframes規則和所有動畫屬性         

          cssanimations由關鍵幀(@keyframes)和css聲明兩部分構成

          1.animation-name

          用來定義一個動畫的名稱,其主要有兩個值,一個是name,是由@keyframes創建的動畫名,換句話說此處的name要和@keyframes中的name一致,如果不一致,將不會實現任何動畫效果;另一個是none,默認值,當值為none時,將沒有任何動畫效果,另外,該屬性可以同時附多個animation的名稱給一個元素,只需要用逗號“,”隔開,可以實現更多且不同的動畫效果。

          2.animation-duration

          用來指定元素播放動畫所持續的時間長,也就是完成從0%到100%一次動畫所需要的時間,取值<time>為數值,單位為s(秒),其默認值為0。

          3.animation-timing-function

          animation-timing-function屬性用來設置動畫播放方式,指元素根據時間的推進來改變屬性值的變換速率,其取值與作用同transition屬性一致。

          4.animation-delay

          用來指定元素播放動畫開始時間,取值<time>為數值,單位為s,默認值為0。

          5.animation-iteration-count

          用來指定元素播放動畫的循環次數,取值<number>可以為數字,其默認值為“1”;infinite為無限次數循環。

          6.animation-direction

          用來指定元素動畫播放的方向,其只有兩個值,默認為normal,如果設置為normal,動畫的每次循環都是向前播放;另一個值是alternate,作用是,動畫播放在第偶數次向前播放,第奇數次向反方向播放。

          通過案例6-16來體驗div尺寸由小到大,然后由大到小。

          6-16   example16.html

           

          <!DOCTYPE html>

           

          <html>

           

          <head>

           

            <meta charset="utf-8">

           

            <title>動畫animation-direction屬性</title>

           

            <style type="text/css">

           

                @-webkit-keyframes  'testAnimationDirection' {

           

                    /*from{} 動畫開始時的設置,也可以使用0%*/

           

                    0% {width: 50px;}

           

                    20% {width: 100px;}

           

                    40% {width: 150px;}

           

                    60% {width: 200px;}

           

                    80% {width: 250px;}

           

                    /*to{} 動畫結束時的狀態,也可以使用100%*/

           

                    100% {width: 300px;}

           

                  }

           

              div{

           

                 width: 50px;height: 50px;border:1px solid  red;

           

                 -webkit-animation-name:'testAnimationDirection';  /*動畫名稱*/

           

                 animation-duration: 10s; /*動畫所持續的時間*/

           

                     -webkit-animation-timing-function:  ease-in-out;

           

                      /*動畫播放方式,這個屬性要使用前綴*/

           

                 animation-delay:  0s;/*動畫開始時間*/

           

                 -webkit-animation-iteration-count:  infinite;

           

          /*動畫播放循環次數:infinite(無限次循環),這個屬性要使用前綴*/

           

                animation-direction: alternate;

           

          /*動畫播放方向,alternate(偶數次向前,奇數次向反方向)*/

           

                    }

           

              </style>

           

          </head>

           

          <body>

           

              <div></div>

           

          </body>

           

          </html>

           

          7.animatiob-play-state

          用來控制元素動畫的播放狀態,其有running和paused兩個值,其中running為默認值,它的作用就類似于音樂播放器,可以通過paused將正在播放的動畫停下來,也可以通過running將暫停的動畫重新播放。但這里的重新播放不是從元素動畫的開始播放,而是從暫停的那個位置開始播放,另外,如果暫停了動畫的播放,元素的樣式將回到最原始設置狀態。(這個屬性目前很少內核支持,所以只是稍微提一下), 通過案例6-17來體驗控制元素動畫的播放狀態,當鼠標移除離開div時,小方塊暫停移動,元素的樣式回到最原始設置狀態。效果如圖6-20所示。

          6-17   example17.html

           

          <!DOCTYPE html>

           

          <html>

           

          <head>

           

              <meta  charset="utf-8">

           

              <title></title>

           

              <style>

           

                  @keyframes move {

           

                      0%{transform:  translateY(90px);}

           

                      15%{transform:  translate(90px,90px);}

           

                      30%{transform:  translate(180px,90px);}

           

                      45%{transform:  translate(90px,90px);}

           

                      60%{transform:  translate(90px,0);}

           

                      75%{transform:  translate(90px,90px);}

           

                      90%{transform:  translate(90px,180px);}

           

                      100%{transform: translate(90px,90px);}

           

                  }

           

          div {width: 200px;height: 200px;border: 1px solid red;margin: 20px  auto; }

           

          span {display: inline-block; /*行內塊元素*/

           

                width: 20px;height:  20px;background: orange;

           

                transform:  translateY(90px); /*垂直方向移動*/

           

                animation-name: move; /*動畫名稱*/

           

                animation-duration: 10s; /*動畫持續時長*/

           

                animation-timing-function: ease-in; /*播放方式:加速*/

           

                animation-delay: 0.2s;

           

                animation-iteration-count:infinite;  /*循環次數:無限循環*/

           

                animation-direction:alternate; /*播放方向*/

           

          animation-play-state:paused; /*播放狀態:正在播放的動畫停下來*/

           

                  }

           

                  div:hover span { /*暫停的動畫重新播放*/

           

                     animation-play-state:running;  background: red;

           

                  }

           

              </style>

           

          </head>

           

          <body>

           

             <div><span></span></div>

           

          </body>

           

          </html>

           


          6-20 控制元素動畫的播放狀態

          8.animation-fill-mode

          規定當動畫不播放時(當動畫完成時,或當動畫有一個延遲未開始播放時)要應用的樣式。主要具有四個屬性值:none、forwards、backwards和both。其四個屬性值對應效果如下表6-6所示。

          表6-6   animation-fill-mode           

           

           
           

          描述

           
           

          none

           
           

          不改變默認行為。

           
           

          forwards

           
           

          當動畫完成后,保持最后一個屬性值(在最后一個關鍵幀定義)。

           
           

          backwards

           
           

           animation-delay 所指定的一段時間內,在動畫顯示之前,應用開始屬性值(在第一個關鍵幀中定義)。

           
           

          both

           
           

          向前和向后填充模式都被應用。

           

          屬性詳解:

          • none,animation-fill-mode:none時,默認值,不改變元素默認行為,使用的動畫不會對動畫等待和動畫完成的元素樣式產生改變。

          • forwards,animation-fill-mode:forwards;當使用這個值時,告訴瀏覽器動畫結束后,元素的樣式將設置為動畫的最后一幀的樣式。

          • backwards和forwards效果不一樣,如果設置為backwards值,那么在動畫等待的那段時間內,元素的樣式將設置為動畫第一幀的樣式。

          從技術上講,每一個動畫都有一個默認的延遲時間,只不過這個時間是0而已,所以你并沒有看到其中的變化。根據前面對backwards的描述:動畫等待的那段時間內,元素的樣式將設置為動畫第一幀的樣式。這樣解釋你就應該較為明白,因為我們的示例有一個1s時間的延遲,這樣一來,元素在等待的這1s時間內,元素的樣式就是關鍵幀(也就是@keyframes中的frome或0%的樣式)第一幀中的樣式,通過案例6-18來體驗。

          6-18   example18.html

           

          <!DOCTYPE html>

           

          <html>

           

          <head>

           

              <meta  charset="utf-8">

           

               <title>animation-fill-mode屬性值</title>

           

              <style>

           

                  @-webkit-keyframes  'wobble' {

           

                      0% {margin-left:  100px;background: green; /*綠色*/}

           

                      40% {margin-left:  150px;background: orange;}

           

                      60% {margin-left:  75px;background: blue;}

           

                      100% {margin-left:  100px;background: red;}

           

                  }

           

                  div{

           

               width: 50px;height:  50px;margin-left:100px;background: blue;

           

                       -webkit-animation-name:'wobble';

           

                      animation-duration:  10s;

           

                       -webkit-animation-timing-function: ease-in-out;

           

                      animation-delay: 5s;

           

                      /*循環次數*/

           

                       -webkit-animation-iteration-count: 10;

           

                      animation-direction:  alternate;

           

                       animation-fill-mode:none; /*動畫開始為藍色*/

           

                       /*animation-fill-mode:backwards; /*動畫開始為綠色*/

           

                  }

           

              </style>

           

          </head>

           

          <body>

           

              <div>   </div>

           

          </body>

           

          </html>

           

          在這個示例中,在延遲的時間內方形變成藍色。然后在5s時間之后,元素顏色變成動畫第一幀的顏色。如果設置為“animation-fill-mode:backwards;”動畫等待的那段時間內,元素的樣式將設置為動畫第一幀的樣式為綠色。

          • both,如果animation-fill-mode取值為both的效果。這個值將會告訴瀏覽器同時應用forwards和backwards兩個屬性值的效果。言外之意,animation-fill-mode取值為both值時,animation-fill-mode相當于同時配置了backwards和forwards,意味著在動畫等待和動畫結束狀態,元素將分別應用動畫第一幀和最后一幀的樣式。

          利用animation組合屬性,也同樣可以實現上述屬性的設置,如圖6-21所示:

          cssanimations由關鍵幀(@keyframes)和css聲明兩部分構成

                                         圖6-21 animation組合屬性

          由圖6-21定義的組合屬性可知,這個動畫的關鍵幀名稱加“wobble”,動畫持續時間為“10s”,使用“ease-in”播放方式,延遲時間為“2s”,無限次來回輪流播放。

          動畫屬性綜合案例1:通過案例6-19來體驗讓一個正方形逐漸變大并變成圓形。該動畫不要求移動,循環輪流播放,延遲2s開始,并且使用均勻變換,另外,當鼠標指針懸停在該動畫上時,該動畫暫停播放,代碼實現如下所示:

          6-19   example19.html

          <!DOCTYPE html>
          <html>
          <head>
              <meta charset="utf-8">
              <title>方形變圓形</title>
              <style>
                div{
          width: 200px;height: 200px;background-color: #ff7448;margin: 20px auto;
                      /*依次:名稱,時長,方向,次數,開始時間,播放方式*/
                   animation: movediv 3s alternate infinite 2s ease-in-out;
                  }
                  div:hover{animation-play-state: paused;}
                  @keyframes movediv{
             from{
                 /*定義剛開始時的一些處理,通常直接使用原始樣式*/
                  }
           to{ width: 300px;height: 300px;border-radius: 50%; /*圓角*/ }
                  }
              </style>
          </head>
          <body>
              <div></div>
          </body>
          </html>

          動畫屬性綜合案例2:通過案例6-20來體驗div做矩形運行。本實例將完成一個相對更復雜一點的動畫。讓一個div沿一個矩形路線從左上移動到右上,再移動到右下,再移動到左下,最后回到原點。本實例主要用來解決關鍵幀更細致的處理問題。代碼實現如下所示:

          6-20   example20.html

          <!DOCTYPE html>
          <html>
          <head>
              <meta charset="utf-8">
              <title>動畫幀的變化</title>
              <style>
                  body{margin: 0px;padding: 0px;}
                  div{width: 800px;height: 800px;border: 1px solid red;}
                  #mydiv{
                      width: 200px;height: 200px;background-color: #61ff87;
                      left: 0px;top:0px;animation: movediv 5s alternate;
                  }
                  div:hover{
                      animation-play-state: paused;
                  }
                  @keyframes movediv{
                  from{} /*動畫開始時的設置,也可以使用0%*/
           25%{background-color: #ff79ef;margin-left: 600px;margin-top: 0px;}
           50%{background-color: #4249ff;margin-left: 600px;margin-top:600px;}
           75%{border: double 2px #0e2218;margin-left: 0px;margin-top: 600px;}
          /*to表示動畫結束時的狀態,也可以使用100%*/
                      to{margin-left: 0px;margin-top: 0px;}
                  }
              </style>
          </head>
          <body>
              <div><div id="mydiv"></div></div>
          </body>
          </html>

          動畫屬性綜合案例3:通過案例6-21來體驗實現動漫人物跑動的動畫效果。本實例將完成游戲中人物跑動的動畫:讓一個圖片動畫人物“跑起來”......。代碼實現如下所示:

          6-21  example21.html

           

          <!DOCTYPE  html>

           

          <html>

           

            <head>

           

              <meta charset="utf-8">

           

              <title>幀動畫(animation)屬性</title>

           

              <style>

           

                   /*background-position 屬性設置背景圖像的起始位置*/

           

                  @keyframes myanimation { /* 開始創建動畫幀 */

           

                      0%, 8% {  background-position: 0  0;  }

           

                     9.2%, 17.2% {  background-position: -140px 0;  }

           

                     18.4%, 26.4% {  background-position: -280px 0 ;  }

           

                     27.6%, 35.6% {  background-position: -420px 0 ;  }

           

                     36.8%, 44.8% {  background-position: -560px 0 ;  }

           

                     46%, 54% {  background-position: -700px 0 ;  }

           

                     55.2%, 63.2% {  background-position: -840px 0 ;  }

           

                     64.4%, 72.4% {  background-position: -980px 0 ;  }

           

                     73.6%, 81.6% {  background-position: -1120px 0 ;  }

           

                     82.8%, 90.8% {  background-position: -1400px 0 ;  }

           

                     92%, 100% {  background-position: -1540px 0 ;  }

           

                 }

           

                 div {

           

                   width: 340px;height: 315px;border: 1px solid red;

           

                   background-image: url('image/run.png');background-size:  contain;

           

                   /* 設置幀動畫效果 */

           

                    animation-name: myanimation;  animation-duration: 2s;

           

                    animation-timing-function: linear;

           

           animation-iteration-count: infinite;

           

                    animation-fill-mode: backwards;

           

                }

           

              </style>

           

            </head>

           

            <body>

           

              <div><div>

           

            </body>

           

          </html>

           


          © Copyright 六六互聯.Some Rights Reserved.www.ic.vip
          真正国产乱子伦高清对白