利用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,155 Responses

  1. Robertdef表示:

    пин ап пин ап казино пин ап

  2. Willisquark表示:

    nhà cái
    RGBET: Trang Chủ Cá Cược Uy Tín và Đa Dạng Tại Việt Nam

    RGBET đã khẳng định vị thế của mình là một trong những nhà cái hàng đầu tại châu Á và Việt Nam, với đa dạng các dịch vụ cá cược và trò chơi hấp dẫn. Nhà cái này nổi tiếng với việc cung cấp môi trường cá cược an toàn, uy tín và luôn mang lại trải nghiệm tuyệt vời cho người chơi.

    Các Loại Hình Cá Cược Tại RGBET

    RGBET cung cấp các loại hình cá cược phong phú bao gồm:

    Bắn Cá: Một trò chơi đầy kịch tính và thú vị, phù hợp với những người chơi muốn thử thách khả năng săn bắn và nhận về những phần thưởng giá trị.
    Thể Thao: Nơi người chơi có thể tham gia đặt cược vào các trận đấu thể thao đa dạng, từ bóng đá, bóng rổ, đến các sự kiện thể thao quốc tế với tỷ lệ cược hấp dẫn.
    Game Bài: Đây là một sân chơi dành cho những ai yêu thích các trò chơi bài như tiến lên miền Nam, phỏm, xì dách, và mậu binh. Các trò chơi được phát triển kỹ lưỡng, đem lại cảm giác chân thực và thú vị.
    Nổ Hũ: Trò chơi slot với cơ hội trúng Jackpot cực lớn, luôn thu hút sự chú ý của người chơi. Nổ Hũ RGBET là sân chơi hoàn hảo cho những ai muốn thử vận may và giành lấy những phần thưởng khủng.
    Lô Đề: Với tỷ lệ trả thưởng cao và nhiều tùy chọn cược, RGBET là nơi lý tưởng cho những người đam mê lô đề.
    Tính Năng Nổi Bật Của RGBET

    Một trong những điểm nổi bật của RGBET là giao diện thân thiện, dễ sử dụng và hệ thống bảo mật tiên tiến giúp bảo vệ thông tin người chơi. Ngoài ra, nhà cái này còn hỗ trợ các hình thức nạp rút tiền tiện lợi thông qua nhiều kênh khác nhau như OVO, Gopay, Dana, và các chuỗi cửa hàng như Indomaret và Alfamart.

    Khuyến Mãi và Dịch Vụ Chăm Sóc Khách Hàng

    RGBET không chỉ nổi bật với các trò chơi đa dạng, mà còn cung cấp nhiều chương trình khuyến mãi hấp dẫn như bonus chào mừng, cashback, và các phần thưởng hàng ngày. Đặc biệt, dịch vụ chăm sóc khách hàng của RGBET hoạt động 24/7 với đội ngũ chuyên nghiệp, sẵn sàng hỗ trợ người chơi qua nhiều kênh liên lạc.

    Kết Luận

    Với những ưu điểm nổi bật về dịch vụ, bảo mật, và trải nghiệm người dùng, RGBET xứng đáng là nhà cái hàng đầu mà người chơi nên lựa chọn khi tham gia vào thế giới cá cược trực tuyến.

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

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

  5. ForrestVal表示:

    пин ап вход: pin up зеркало – pin up зеркало

  6. DonaldRer表示:

    пин ап казино вход: пин ап – пин ап вход

  7. Gabrielwaimb表示:

    пин ап казахстан http://pinupru.site/# пин ап казино
    пин ап 634

  8. LeroyAcuff表示:

    Профессиональный сервисный центр ремонт телефонов поблизости от меня ремонт телефонов с гарантией

  9. Santopax表示:

    http://pinupru.site/# пин ап вход

  10. The importance of secure cross-border payments in today’s economy, How to safeguard your transactions with secure cross-border payments, Secure cross-border payments: a competitive advantage for businesses, Top reasons to prioritize secure cross-border payments, How to choose the right secure cross-border payment provider, The evolution of secure cross-border payments in a global economy, Ensuring compliance with secure cross-border payment regulations, Improving efficiency with secure cross-border payment platforms, Safeguarding your transactions with secure cross-border payments, The benefits of secure cross-border payments for e-commerce businesses
    safe international money transfers protecting international payments from fraud .

  11. вывод из запоя на дому в краснодаре вывод из запоя на дому в краснодаре .

  12. Robertdef表示:

    пин ап казино онлайн пин ап пин ап казино онлайн

  13. В магазине сейфов предлагают купить сейф 2 класс в москве сейфы 2 класса

  14. DonaldRer表示:

    pin up kz: пин ап казахстан – пин ап

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

  16. Gartandabsex表示:

    Смешные картинки. Как они появились.

  17. Darylmap表示:

    nhà cái
    Nếu bạn là một người đam mê cá cược và yêu thích sự hấp dẫn của những con số, thì sảnh lô đề RGbet chính là điểm đến lý tưởng cho bạn. Tôi đã có cơ hội trải nghiệm tại đây và muốn chia sẻ một số ấn tượng cũng như kinh nghiệm của mình.

    RGbet nổi bật với mức tỷ lệ trả thưởng cực kỳ hấp dẫn. Trong quá trình chơi, tôi nhận thấy rằng nhà cái này không chỉ cung cấp nhiều loại hình cược mà còn có những mức cược linh hoạt, phù hợp với mọi nhu cầu của người chơi. Bạn có thể bắt đầu với số tiền nhỏ và dần dần tăng lên khi đã nắm bắt được các quy luật và cách thức hoạt động của trò chơi. Sự đa dạng trong các tùy chọn cược giúp cho trải nghiệm chơi không bị nhàm chán, từ cược lô, đề đến các loại cược khác.

    Giao diện của RGbet rất thân thiện, dễ dàng điều hướng. Ngay cả khi bạn là người mới, bạn vẫn có thể nhanh chóng tìm thấy những thông tin cần thiết và bắt đầu đặt cược chỉ trong vài phút. Tôi đặc biệt ấn tượng với hệ thống đổi thưởng siêu tốc của nhà cái. Sau khi trúng thưởng, quá trình rút tiền diễn ra rất nhanh chóng và minh bạch. Tôi đã nhận được tiền thưởng trong tài khoản của mình chỉ sau vài phút, điều này thực sự tạo cảm giác yên tâm và tin tưởng cho người chơi.

    Một điểm đáng chú ý khác là dịch vụ chăm sóc khách hàng của RGbet. Đội ngũ hỗ trợ luôn sẵn sàng 24/7, giúp tôi giải quyết mọi thắc mắc nhanh chóng và hiệu quả. Chỉ cần một tin nhắn, tôi đã có thể nhận được câu trả lời rõ ràng và hữu ích.

    Ngoài ra, để tăng cơ hội trúng thưởng, tôi cũng muốn chia sẻ một vài mẹo nhỏ. Đầu tiên, hãy luôn theo dõi các thống kê và xu hướng của những con số để đưa ra quyết định cược hợp lý. Thứ hai, hãy đặt ra ngân sách cho mỗi lần chơi để tránh việc chi tiêu quá đà. Cuối cùng, đừng quên tham gia các chương trình khuyến mãi và ưu đãi mà RGbet thường xuyên tổ chức; đây là cơ hội tuyệt vời để gia tăng cơ hội thắng lớn.

    Tóm lại, RGbet thực sự là một nhà cái lô đề uy tín với nhiều lợi thế vượt trội. Nếu bạn đang tìm kiếm một sân chơi lô đề an toàn, hấp dẫn và đổi thưởng nhanh chóng, đừng ngần ngại tham gia ngay hôm nay! Chắc chắn rằng bạn sẽ có những trải nghiệm thú vị và có cơ hội trúng thưởng lớn tại đây.

  18. DonaldLen表示:


    Продажа мини-погрузчиков Lonking

    Продажа мини-погрузчиков Lonking на территории России от официального дистрибьютора.
    Новая многофункциональная техника для любых задач.
    Наши машины предназначены для того, чтобы упростить вашу работу: от строительных площадок
    до складских операций.

    Высокая эффективность, надежность и инновационные решения — все, что вам нужно
    для успешных проектов. Погрузите свой бизнес в будущее с мини-погрузчиками Lonking!

    47% российских покупателей выбрали мини-погрузчики Lonking в 2023 году продано более 1200 единиц.
    Наши сайт: Мини-погрузчики Lonking

  19. Неважно, какая у вас карта, наши займ быстро на карту без отказа до 30 000 рублей доступны абсолютно всем.

  20. LeroyAcuff表示:

    Профессиональный сервисный центр сервис смартфонов в ростове стоимость ремонта телефона

  21. DouglasHoapy表示:

    1xBet Welcome Bonus Promo Code https://actuchomage.org/includes/wkl/code_promo_69.html
    The 1xBet welcome bonus promo code is a code that new users can enter during registration to receive a welcome bonus. This bonus typically includes a deposit match and may also provide free bets or free spins.

  22. Vizaimelom表示:

    Не хотите проходить сложные проверки, но нужны деньги срочно? МФО с мгновенным одобрением и без проверок предлагает микрозаймы на карту от 1 до 30 тысяч рублей, доступные с 18 лет. Без отказов, без проверок – деньги поступят мгновенно. Оформляйте заявку онлайн и забудьте о долгих ожиданиях. Подпишитесь на канал, чтобы не пропустить лучшие предложения.

  23. вывод из запоя стационар ростов вывод из запоя стационар ростов .

  24. Transform your wardrobe with elegant pieces from mother denim.

  25. DouglasHoapy表示:

    1xBet Promo Code for Today https://idematapp.com/wp-content/pages/1xbet_promo_codes_free_bonus_offers.html
    1xBet offers daily promo codes that provide bonuses like free bets, deposit matches, or free spins. These codes are valid for the day they are issued and can be used to enhance your betting experience.

發佈留言

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