利用TweenMax針對HTML頁面製作動畫 – CSS篇

前一篇文章跟大家分享了如何利用TweenMax在HTML裡面製作基礎的動畫,接下來示範如何利用TweenMax來控制CSS的效果,當然前置作業跟之前相同,這邊就不多提,但在TweenMax內需加上CSS的控制項目,大致的語法如下:

TweenMax.to(物件,動畫秒數,{css:{樣式名稱:值},ease:動畫模式});

其實跟前篇文章大致相同,只是在動畫的部分要利用「css:{}」這段語法來包含欲更改的樣式,以下是更改寬度和高度的範例:

TweenMax.to(div,1,{css:{width:100, height:200},ease:Expo.easeOut});

接下來為各位示範一下在網頁上製作動畫的範例,這是第一個範例,主要為Div移動的效果,下面是本範例整個網頁的程式碼:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>GreenSock HTMLTweening CSS Move</title>
    <style type="text/css">
        #box {
            height: 200px;
            width: 200px;
            position: absolute;
            background-color: #9CF;
        }

        /* box div 的樣式 */
    </style>
    <script src="src/minified/TweenMax.min.js"></script>
    <script language="javascript">
        window.onload = moveFn;

        function moveFn() {
            var div = document.getElementById("box"); /* 利用div變數儲存ID名稱為box的物件 */
            var divX = "0px" /* 利用變數儲存div預設的x位置 */
            var divY = window.innerHeight / 2 - 100 + "px"; /* 利用變數儲存div預設的y位置 */
            var moveX = window.innerWidth / 2 - 100 + "px"
            div.style.left = divX div.style.top = divY TweenMax.to(div, 1, {
                css: {
                    left: moveX
                },
                ease: Expo.easeOut
            });
        }
    </script>
</head>
<body style="background-color:#FFF">
    <div id="box"></div>
</body>
</html>

延續上面,接下來第二個範例程式碼大致與上面相同,只是增加了div變形和旋轉的效果,可以看得出來除了CSS本身的樣式之外,還可以利用TweenMax所提供的scale和rotation來製作動畫,下面是本範例整個網頁的程式碼:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>GreenSock HTMLTweening CSS Move</title>
    <style type="text/css">
        #box {
            height: 200px;
            width: 200px;
            position: absolute;
            background-color: #9CF;
        }

        /* box div 的樣式 */
    </style>
    <script src="src/minified/TweenMax.min.js"></script>
    <script language="javascript">
        window.onload = moveFn;

        function moveFn() {
            var div = document.getElementById("box"); /* 利用div變數儲存ID名稱為box的物件 */
            var divX = "0px" /* 利用變數儲存div預設的x位置 */
            var divY = window.innerHeight / 2 - 100 + "px"; /* 利用變數儲存div預設的y位置 */
            var moveX = window.innerWidth / 2 - 100 + "px"
            div.style.left = divX div.style.top = divY TweenMax.to(div, 1, {
                css: {
                    left: moveX
                },
                ease: Expo.easeOut
            });
            TweenMax.to(div, 1, {
                css: {
                    scale: 2,
                    rotation: 90
                },
                delay: 1,
                ease: Expo.easeOut
            });
        }
    </script>
</head>
<body style="background-color:#FFF">
    <div id="box"></div>
</body>
</html>

接下來第三個案例加上了更換背景顏色的部分,背景顏色更換的部分,要注意語法跟css的背景顏色樣式名稱有所不同,下面是本範例整個網頁的程式碼:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>GreenSock HTMLTweening CSS Move</title>
    <style type="text/css">
        #box {
            height: 200px;
            width: 200px;
            position: absolute;
            background-color: #9CF;
        }

        /* box div 的樣式 */
    </style>
    <script src="src/minified/TweenMax.min.js"></script>
    <script language="javascript">
        window.onload = moveFn;

        function moveFn() {
            var div = document.getElementById("box"); /* 利用div變數儲存ID名稱為box的物件 */
            var divX = "0px" /* 利用變數儲存div預設的x位置 */
            var divY = window.innerHeight / 2 - 100 + "px"; /* 利用變數儲存div預設的y位置 */
            var moveX = window.innerWidth / 2 - 100 + "px"
            div.style.left = divX div.style.top = divY TweenMax.to(div, 1, {
                css: {
                    left: moveX
                },
                ease: Expo.easeOut
            });
            TweenMax.to(div, 1, {
                css: {
                    scale: 2,
                    rotation: 90
                },
                delay: 1,
                ease: Expo.easeOut
            });
            TweenMax.to(div, 3, {
                css: {
                    backgroundColor: "#EEEEEE"
                },
                delay: 2,
                ease: Expo.easeOut
            });
        }
    </script>
</head>
<body style="background-color:#FFF">
    <div id="box"></div>
</body>
</html>

接下來第四個案例是利用TimelineMax來輔助製作這段動畫,可以看的出來上面範例都在使用delay來決定動畫播放順序,但在前面的文章中有提到TimelineMax可以協助我們來掌握動畫播放的順序,所以本範例更改為利用TimelineMax來製作動畫,下面是本範例整個網頁的程式碼:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>GreenSock HTMLTweening CSS Move</title>
    <style type="text/css">
        #box {
            height: 200px;
            width: 200px;
            position: absolute;
            background-color: #9CF;
        }

        /* box div 的樣式 */
    </style>
    <script src="src/minified/TweenMax.min.js"></script>
    <script language="javascript">
        window.onload = moveFn;

        function moveFn() {
            var div = document.getElementById("box"); /* 利用div變數儲存ID名稱為box的物件 */
            var divX = "0px" /* 利用變數儲存div預設的x位置 */
            var divY = window.innerHeight / 2 - 100 + "px"; /* 利用變數儲存div預設的y位置 */
            var moveX = window.innerWidth / 2 - 100 + "px"
            div.style.left = divX div.style.top = divY
            var tMax = new TimelineMax;
            tMax.to(div, 1, {
                css: {
                    left: moveX
                },
                ease: Expo.easeOut
            });
            tMax.to(div, 1, {
                css: {
                    scale: 2,
                    rotation: 90
                },
                ease: Expo.easeOut
            });
            tMax.to(div, 3, {
                css: {
                    backgroundColor: "#EEEEEE"
                },
                ease: Expo.easeOut
            });
        }
    </script>
</head>
<body>
    <div id="box"></div>
</body>
</html>

看了上面的幾個案例之後,在這邊也來製作幾個比較完整的範例供大家參考,首先是第一個範例,利用文字連結來更換div內容的效果,下面是本範例整個網頁的程式碼:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>GreenSock HTMLTweening CSS Sample 1</title>
    <style type="text/css">
        * {
            padding: 0px;
            margin: 0px;
        }

        body {
            font-size: 13px;
        }

        #box {
            height: 450px;
            width: 600px;
            margin-left: auto;
            margin-right: auto;
            background-color: #EEE;
        }

        /* box div 的樣式 (內容div) */
        #content {
            padding: 10px 10px 0px 10px;
            line-height: 26px;
            width: 500px;
            margin-left: auto;
            margin-right: auto;
        }

        /* content div 的樣式 (內容p) */
        #btn {
            height: 30px;
            width: 600px;
            text-align: center;
            margin-left: auto;
            margin-right: auto;
            padding-top: 10px;
        }

        #btn a {
            margin: 5px;
        }

        /* btn div 的樣式 (下方文字連結div) */
    </style>
    <script src="src/minified/TweenMax.min.js"></script>
    <script language="javascript">
        var intro1 =
            "<p style='text-align:center;'><img src='ford/p1.jpg' style='border:1px solid #000; background-color:#FFFFFF'></p><p>全新導入的運動模式(S-Mode),讓變速箱升檔時機往後遞延,以維持較高的引擎轉速再進行換檔,充分提升駕駛加速感受。在中高速行駛時,運動模式可提供更及時的降檔反應,使引擎仍可保持在扭力峰值的轉速範圍內,同時讓動力輸出對油門的反應更加靈敏,整體引擎動力的運動性大幅提升,創造最動感的馳騁體驗。</p>";
        var intro2 =
            "<p style='text-align:center;'><img src='ford/p2.jpg' style='border:1px solid #000; background-color:#FFFFFF'></p><p>高科技的雙離合器變速箱擁有自排、手排、上坡、下坡、高海拔修正、怠速、斜坡潛滑減緩、緊急安全八大模式。以手排齒輪箱為基礎,搭配平行排列濕式雙離合器機構,能在極短時間內完成換檔,沒有傳統自排變速箱的扭力頓挫感,加速也更加敏捷平順,且操作介面與傳統自排一樣簡易方便。</p>";
        var intro3 =
            "<p style='text-align:center;'><img src='ford/p3.jpg' style='border:1px solid #000; background-color:#FFFFFF'></p><p>全新高傳真CD/MP3/WMA音響主機,具備DSP數位音場設定、Clip失真檢測功能、智慧型音量控制、高傳真音效調整、AST電台頻道自動掃描儲存功能、位於中央扶手中AUX-IN功能的孔狀插槽與USB插槽(包含一般MP3裝置與iPod主機連結功能),是目前同等級房車中與iPod整合性最高的機種。</p>"; /* 以上為利用三個變數儲存不同的網頁內容 */
        window.onload = moveFn; /* 網頁載入時執行moveFn */
        function moveFn() {
            var div = document.getElementById("box"); /* 利用div變數儲存ID名稱為box的物件 */
            var intro = document.getElementById("content"); /* 利用intro變數儲存ID名稱為content的物件 */
            intro.innerHTML = intro1; /* 設定content的div內容為第一個連結的內容 */
            var tMax = new TimelineMax;
            tMax.from(div, 0.5, {
                css: {
                    scale: 0
                },
                ease: Expo.easeOut
            });
            tMax.from(intro, 1, {
                css: {
                    alpha: 0
                }
            }); /* 以動畫的方式呈現內容 */
        }

        function changeFn(no) {
            var div = document.getElementById("box"); /* 利用div變數儲存ID名稱為box的物件 */
            var intro = document.getElementById("content"); /* 利用intro變數儲存ID名稱為content的物件 */
            var tMax = new TimelineMax;
            tMax.to(intro, 0, {
                css: {
                    alpha: 0
                }
            });
            tMax.to(div, 0.5, {
                css: {
                    scale: 0
                },
                ease: Expo.easeOut
            });
            tMax.to(div, 0.5, {
                css: {
                    scale: 1
                },
                ease: Expo.easeOut
            });
            tMax.to(intro, 1, {
                css: {
                    alpha: 1
                }
            });
            switch (no) {
                case 1:
                    intro.innerHTML = intro1;
                    break;
                case 2:
                    intro.innerHTML = intro2;
                    break;
                case 3:
                    intro.innerHTML = intro3;
                    break;
            }
        }
    </script>
</head>
<body style="background-color:#FFF">
    <div id="box">
        <p id="content"></p>
    </div>
    <div id="btn"><a href="javascript:;" onClick="changeFn(1)">運動模式</a><a href="javascript:;"
            onClick="changeFn(2)">雙離合器</a><a href="javascript:;" onClick="changeFn(3)">整合音響</a></div>
</body>
</html>

接下來的範例是利用TweenMax來設計讓一個div永遠保持在畫面左邊中間的效果,下面是本範例整個網頁的程式碼:

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>GreenSock HTMLTweening CSS Sample 2</title>
    <script src="src/minified/TweenMax.min.js"></script>
    <script language="javascript">
        window.onload = init; //網頁載入時執行init
        window.onscroll = init; //捲動網頁時執行init
        window.onresize = init; //網頁更改尺寸時執行init
        function init(){
            var div=document.getElementById("bannerDiv");
            //利用div變數儲存網頁上ID為bannerDiv的物件(即為放圖片的Div)
            var banner=document.getElementById("tweenMax");
            //利用banner變數儲存網頁上ID為tweenMax的物件(即為圖片本身)
            positionY= window.innerHeight/2-banner.height+window.pageYOffset;
            //利用PositionY儲存在畫面中Div應該出現的座標位置
            TweenMax.to(div,1,{css:{top:positionY},ease:Elastic.easeOut});
            //利用TweenMax將Div移動到上面所儲存的位置
        } 
    </script>
    <style type="text/css">
        #bannerDiv {
            height: 54px;
            width: 108px;
            position: absolute;
        }
    </style>
</head>

<body style="background-color:#FFF">
    <div id="bannerDiv"><img src="mw_tweenmax.gif" name="tweenMax" width="108" height="54" id="tweenMax" /></div>
    <div
        style="width:400px; height:2000px; background-color:#EEE; margin-left:auto; margin-right:auto; font-size:13px; text-align:center">
        網頁內容</div>
</body>

</html>

看完了上面幾個範例之後,相信大家可以利用TweenMax搭配HTML和Javascript來取代更多需要Flash才可以完成的效果了,祝大家設計順利!

You may also like...

12,037 Responses

  1. Профессиональный сервисный центр по ремонту посудомоечных машин с выездом на дом в Москве.
    Мы предлагаем: ремонт посудомоечных машин
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  2. Gartandabsex表示:

    Как поддерживать хорошее настроение с помощью забавных приколов

  3. Gartandabsex表示:

    Как развеселить друга с помощью смешных приколов

  4. ArnfPaish表示:

    See all 5 photosLike any month of pregnancy, this first one differs greatly from woman to woman.
    Is taking how many mg of tadalafil should i take illegally.
    Unfortunately, giving into these behaviors is likely to make your mood worse, not better.

  5. CallumGed表示:

    Мелбет – международный букмекер, основанный в 2012 году. Компания получила официальную лицензию от Кюрасао, ориентирована на пользователей со всех стран мира, но в первую очередь на русскоязычных игроков. Зарегистрированные клиенты имеют прекрасную возможность пользоваться всеми преимуществами компании, принимать участие в акциях, собирать выигрышные экспрессы, получать промокоды и бесплатные ставки. Компания Мелбет регулярно предоставляет своим клиентам большое количество бонусов и промокоды. Что дает Мелбет промокод при регистрации? Данное поощрение позволяет каждому игроку совершать бесплатные ставки, получать дополнительные денежные средства при пополнении игрового баланса. Кроме этого, благодаря промокодам сумма первого депозита может увеличиться до 100%. Букмекерская контора дарит бесплатные ставки для новых игроков и фрибеты для постоянных пользователей.

  6. RobertWAisa表示:

    buy prescription drugs from canada cheap Cheapest online pharmacy canadian mail order pharmacy

  7. RogerTut表示:

    canadian pharmacy 365: Cheapest online pharmacy – onlinepharmaciescanada com

  8. Успейте воспользоваться промокодом для cryptoboss casino|Новый промокод для cryptoboss casino
    Бонусный код для cryptoboss casino|Используйте промокод в cryptoboss casino и увеличьте свои шансы на победу
    Успейте воспользоваться привилегией cryptoboss casino промокода|Уникальное предложение от cryptoboss casino с промокодом
    Увеличьте свои шансы на победу в cryptoboss casino промокодом|Бонус при регистрации в cryptoboss casino с промокодом
    криптобосс промокод при регистрации криптобосс промокод hds5 .

    Успех в cryptoboss casino с промокодом
    Получите бонусный приз с cryptoboss casino промокодом
    Играйте в cryptoboss casino с дополнительными бонусами от промокодов|Получите уникальное предложение с cryptoboss casino промокодами
    cryptoboss casino – ваш ключ к успеху с промокодом|cryptoboss casino – ваши шансы на победу с промокодами|Бонусная программа cryptoboss casino с уникальным промокодом|Играйте с выгодой: cryptoboss casino промокод|Играйте в cryptoboss casino с эксклюзивным промокодом для успеха|cryptoboss casino – играйте с преимуществами промокода|Получите дополнительные бонусы с cryptoboss casino промокодом|cryptoboss casino промокод – ваш шанс на успех|Специальные бонусы с cryptoboss casino промокодом|cryptoboss casino промокоды – ваш путь к успеху|Действуйте прямо сейчас с cryptoboss casino промокодом|cryptoboss casino промокод – ваш ключ к победе|Играйте в cryptoboss casino с дополнительными бонусами по промокоду|Успейте активировать cryptoboss casino промокод для дополнительных выигрышей|Получите дополнительные бонусы в cryptoboss casino с промокодом|Уникальные предложения от cryptoboss casino с промокодом|Получите привилегии с cryptoboss casino промокодом|Получите дополнительные бонусы в crypt

  9. Профессиональный сервисный центр по ремонту планшетов в том числе Apple iPad.
    Мы предлагаем: ремонт айпада
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  10. Профессиональный сервисный центр по ремонту гироскутеров в Москве.
    Мы предлагаем: ремонт гироскутеров с гарантией
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  11. Профессиональный сервисный центр по ремонту моноблоков в Москве.
    Мы предлагаем: вызвать мастера по ремонту моноблоков
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  12. CharlesWAb表示:

    купить строительную бытовку
    Купить бытовку распашонку (лмдф) 184 900? (в т.ч. НДС)
    Аренда бытовки распашонки (лмдф)
    9 000? в месяц (в т.ч. НДС)
    Внешний размер контейнера 5850х2400х2400(в).
    Каркас стальной, верхняя и нижняя рама из промышленных сложногнутых профилей различной конфигурации, ширина верхнего пояса 160 мм, нижнего 120 мм, стойки стальные гнутые шестигранные 150х100 мм.
    Кровля – лист стальной оцинкованный 0,5 мм, соединенный двойным стоячим фальцем по всей дине контейнера.
    Стены каркасные из бруса 40х100, снаружи профилированный оцинкованный лист С-8.
    Два окна ПВХ 900х1100(в) с поворотно-откидной створкой.

  13. Профессиональный сервисный центр по ремонту кондиционеров в Москве.
    Мы предлагаем: срочный ремонт кондиционеров в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  14. Gartandabsex表示:

    Смешные приколы
    История приколов в интернете. Узнайте, как улучшить себе настроение!

  15. Gartandabsex表示:

    Ржачные приколы
    Как появились приколы. Узнайте, как улучшить себе настроение!

  16. Armandoknot表示:

    Прикольные анекдоты. Что такое анекдот.

  17. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: ремонт бытовой техники в тюмени
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  18. RogerTut表示:

    mexican pharmaceuticals online: mexican mail order pharmacies – buying prescription drugs in mexico online

  19. Gartandabsex表示:

    Ржачные приколы
    История приколов в интернете. Узнайте, как поднять себе настроение!

  20. Stanleyerurl表示:


    Временная регистрация в СПб: Быстро и Легально!
    Ищете, где оформить временную регистрацию в Санкт-Петербурге?
    Мы гарантируем быстрое и легальное оформление без очередей и лишних документов.
    Ваше спокойствие – наша забота!
    Минимум усилий • Максимум удобства • Полная легальность
    Свяжитесь с нами прямо сейчас!
    Временная регистрация

  21. Timothystoft表示:

    pharmacies in mexico that ship to usa: mexican pharmaceuticals online – mexican mail order pharmacies

  22. RichardHal表示:

    DB娛樂遊戲中心:頂級線上娛樂平台評價介紹

    DB娛樂城,前身為PM遊戲平台,於2023年完整更名為【DB多寶遊戲】。本次品牌轉型的過程,DB娛樂平台更加專注於呈現綜合性的線上娛樂體驗,為玩家帶來更廣泛的娛樂項目與創新的服務項目。無論是莊家遊戲、體育博彩還是其他流行遊戲,DB娛樂城都能符合玩家的興趣。

    多寶遊戲的推出與擴展 在亞洲遊戲市場中,DB賭場很快壯大,成為許多玩家的首選平台之一。隨著PM公司的品牌更名,DB多寶遊戲聚焦於提升用戶體驗,並著眼於建立一個安全、便捷且合規的平台環境。從遊戲內容到付款選項,DB娛樂網站不斷尋求卓越,為玩家帶來最佳的線上娛樂服務。

    DB娛樂網站的遊戲種類與特點

    百家樂遊戲 DB娛樂城最為著名的是其多重的百家樂遊戲。平台推出多個版本的賭桌遊戲,包括標準百家樂和無佣金百家樂,迎合不同玩家的偏好。透過實時荷官的現場互動,玩家可以體驗逼真的現場氣氛。

    體育博彩 作為一個多功能平台,DB娛樂城還提供各類體育賽事的博彩服務。從球賽、籃球到網球遊戲等受歡迎賽事,玩家都可以隨處進行體育博彩,感受比賽的快感與下注的刺激。

    促銷活動與獎金 DB娛樂網站經常推出多重的促銷計畫,為新老玩家推動各種折扣與獎勵。這些活動不僅提高了遊戲的趣味性,還為玩家帶來更多贏取獎金的途徑。

    DB賭場的回饋與亮點 在2024年的最新線上娛樂平台排行榜中,DB娛樂網站獲得了極高評價,並且因其豐富的遊戲選擇、便利的提款效率和持續的促銷活動而贏得玩家喜愛。

  23. Профессиональный сервисный центр по ремонту гироскутеров в Москве.
    Мы предлагаем: ремонт гироскутера в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  24. Профессиональный сервисный центр по ремонту моноблоков в Москве.
    Мы предлагаем: моноблок москва
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  25. Профессиональный сервисный центр по ремонту планшетов в том числе Apple iPad.
    Мы предлагаем: починка айпада в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  26. Профессиональный сервисный центр по ремонту кондиционеров в Москве.
    Мы предлагаем: вызвать мастера по ремонту кондиционеров
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  27. Timothystoft表示:

    buying from online mexican pharmacy: mexican pharmacy – mexican drugstore online

  28. RobertWAisa表示:

    п»їlegitimate online pharmacies india online Indian pharmacy reputable indian pharmacies

  29. проститутки москвы по районам https://mgtimez.ru/ .

  30. michat bo表示:

    Hi there, its nice article regarding media print, we all know media is a fantastic source of facts.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。