天天看點

HTML+CSS大話西遊動畫、過渡作業

HTML+CSS大話西遊動畫、過渡

首先,我是為了拿到我部落格位址才發的,哈哈哈!!!

這個用html和css做的動畫效果肯定沒這麼好

先說一下動畫的實作核心,其實就是四張圖檔,每張圖檔裡面的人物都有四個不一樣的動作,利用css樣式使用圖檔,展示成四組動作不一的圖檔,意思就是一張800px×200px的圖檔,我切割成四組200px×200px的圖檔。

剩下的就是讨論該如何完成這些事情了

首先就是在body裡面放5個div分别用來存放

背景圖、悟空圖檔、八戒圖檔、唐僧圖檔、沙僧圖檔,由于我最讨厭起名字,就隻能給他們class類名起一些通俗易懂的名字,如下圖:

<body>
    <div class="one"></div>
    <div class="wk"></div>
    <div class="bj"></div>
    <div class="ts"></div>
    <div class="ss"></div>
</body>
           

接下來就說一下css的核心樣式:

用@keyframes wkbj{}寫動畫,wkbj是動畫的名字,我的悟空和八戒人物都用的這個動畫,是以随便起了一個名字,from{}動畫初始的狀态,我裡面寫了兩個transform: scaleX(1);就是大小是原來一倍的意思,transform: rotateZ(0deg);Z軸從0°開始,接下來10% 20%…的意思就是動畫執行的時間百分占比,這裡也用到一些過渡,我後來覺得好玩添加上去的,剩下的其他幾個動畫,應該也差不多,四個人物用不同動畫的原因是因為,他們四張圖檔有一點差别,是以有些不能夠一起用,就多寫了兩個動畫,分别對應不同圖檔大小比例來使用。

to{}結束時候裡面都有一個屬性就是background-position: 1600px;意思就是結束的時候,跟一個圖檔的總長度,為了後面使用動畫的時候切割使用。

@keyframes wkbj {
            from {
                transform: scaleX(1);
                transform: rotateZ(0deg);


            }

            10% {
                transform: scale(1.1);
                transform: rotateZ(20deg);


            }

            20% {
                transform: scale(1.2);
                transform: rotateZ(40deg);


            }

            30% {
                transform: scale(1.3);
                transform: rotateZ(60deg);


            }

            40% {
                transform: scale(1.4);

            }

            50% {
                transform: scale(1.5);

            }

            60% {
                transform: scale(1.4);

            }

            70% {
                transform: scale(1.3);

            }

            80% {
                transform: scale(1.2);

            }

            90% {
                transform: scale(1.1);

            }


            to {
                background-position: 1600px;
                transform: scale(1);
                transform: rotateZ(180deg);


            }
        }

        @keyframes ts {

            to {
                background-position: 1360px;
            }
        }

        @keyframes ss {
            from {
                transform: rotateZ(0deg);

            }

            to {
                background-position: 1680px;
                transform: rotateZ(360deg);

            }
        }

        @keyframes tp {

            to {
                background-position: 1920px;
            }
        }
           

後面就說一下css樣式了

主要說一下動畫

就拿wkbj的動畫來說把

設定什麼寬高背景圖檔什麼的就不說了,

這裡有一個 animation的屬性

一個速寫動畫的屬性

/* 速寫動畫,動畫名稱 執行時間 把圖檔分成8幀 執行次數(無限次) */
animation: wkbj 1s steps(8) infinite;
           

infinite就是動畫執行無限次,而steps(8)就是之前說的動畫執行的核心了,将一張圖檔分成八份,然後使用過渡動畫執行依次切換,然後使這個動畫無限執行看上去就像是一個人物再走動啦。背景圖檔也使用這個就能看上去像是在動,其實背景圖檔兩頭是由對稱銜接關系的。

後面是我使用的背景圖檔以及個個人物的圖檔

設定背景圖檔的時候注意圖檔位置。

HTML+CSS大話西遊動畫、過渡作業
HTML+CSS大話西遊動畫、過渡作業
HTML+CSS大話西遊動畫、過渡作業
HTML+CSS大話西遊動畫、過渡作業
HTML+CSS大話西遊動畫、過渡作業

後面就是整個代碼了

<!DOCTYPE html>
<html >

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>大話西遊</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .one {
            width: 1920px;
            /* height: 965px; */
            height: 100vh;
            background-size: 100% 100%;
            /* background-size: cover; */
            background-image: url(../../images/background.jpg);
            float: left;
            z-index: 1;
            animation: tp 35s steps(1000) infinite;
            /* transition: all 2s; */
        }

        .wk {
            /* 脫離文檔定位優先級 */
            z-index: 10;
            width: 200px;
            height: 180px;
            background-image: url(../../images/wk.png);
            position: fixed;
            float: left;
            top: 470px;
            left: 460px;
            /* 速寫動畫,動畫名稱 執行時間 把圖檔分成8幀 執行次數(無限次) */
            animation: wkbj 1s steps(8) infinite;
            /* 反轉執行動畫 */
            animation-direction: reverse;

        }

        .bj {
            z-index: 10;
            width: 200px;
            height: 180px;
            background-image: url(../../images/bj.png);
            position: fixed;
            float: left;
            top: 470px;
            left: 680px;
            /* 速寫動畫,動畫名稱 執行時間 把圖檔分成8幀 執行次數(無限次) */
            animation: wkbj 1s steps(8) infinite;
            animation-direction: reverse;


        }

        .ts {
            z-index: 10;
            width: 170px;
            height: 240px;
            background-image: url(../../images/ts.png);
            position: fixed;
            float: left;
            top: 435px;
            left: 880px;
            /* 速寫動畫,動畫名稱 執行時間 把圖檔分成8幀 執行次數(無限次) */
            animation: ts 1s steps(8) infinite;
            animation-direction: reverse;
        }

        .ss {
            z-index: 10;
            width: 210px;
            height: 200px;
            background-image: url(../../images/ss.png);
            position: fixed;
            float: left;
            top: 470px;
            left: 1100px;
            /* 速寫動畫,動畫名稱 執行時間 把圖檔分成8幀 執行次數(無限次) */
            animation: ss 1s steps(8) infinite;
            animation-direction: reverse;
            /* transition: wkbj 10s linear 10s; */

        }

        @keyframes wkbj {
            from {
                transform: scaleX(1);
                transform: rotateZ(0deg);


            }

            10% {
                transform: scale(1.1);
                transform: rotateZ(20deg);


            }

            20% {
                transform: scale(1.2);
                transform: rotateZ(40deg);


            }

            30% {
                transform: scale(1.3);
                transform: rotateZ(60deg);


            }

            40% {
                transform: scale(1.4);

            }

            50% {
                transform: scale(1.5);

            }

            60% {
                transform: scale(1.4);

            }

            70% {
                transform: scale(1.3);

            }

            80% {
                transform: scale(1.2);

            }

            90% {
                transform: scale(1.1);

            }


            to {
                background-position: 1600px;
                transform: scale(1);
                transform: rotateZ(180deg);


            }
        }

        @keyframes ts {

            to {
                background-position: 1360px;
            }
        }

        @keyframes ss {
            from {
                transform: rotateZ(0deg);

            }

            to {
                background-position: 1680px;
                transform: rotateZ(360deg);

            }
        }

        @keyframes tp {

            to {
                background-position: 1920px;
            }
        }
    </style>
</head>

<body>
    <div class="one"></div>
    <div class="wk"></div>
    <div class="bj"></div>
    <div class="ts"></div>
    <div class="ss"></div>
</body>

</html>
           

大概效果是這樣,有點傻傻的!把變大和旋轉的屬性删掉就跟和唐僧差不多了。這裡圖檔展示不了動畫效果,有興趣可以直接用一下試試效果,更多動畫效果,百度有很多。

HTML+CSS大話西遊動畫、過渡作業