用css動畫寫一個文字落下的背景動畫(密恐勿進)

桃花朵朵開3發表於2020-10-31

效果:

在這裡插入圖片描述

這裡其實全是span 標籤 然後使用css3動畫讓他動起來就行了 比較簡單 直接上程式碼

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        html,
        body {
            margin: 0;
            padding: 0;
            height: 100%;
            background-color: lightblue;
            overflow: hidden;
        }
        
        span {
            width: 100px;
            color: gray;
            display: block;
            font-size: 20px;
            font-family: FZXingKai-S04S, Cochin, Georgia, Times, 'Times New Roman', serif;
            user-select: none;
            position: absolute;
            animation: move 15s linear infinite;
        }
        
        .bigbox {
            position: absolute;
            transform: rotate(20deg);
        }
        
        @keyframes move {
            100% {
                transform: rotate(10deg) translateX(2194px);
            }
        }
    </style>
</head>

<body>
    <div class="bigbox"></div>
    <script>
        for (var i = 0; i < 20; i++) {
            for (var j = 0; j < 20; j++) {
                var span = document.createElement('span')
                span.innerText = "桃花朵朵開"
                span.style.transform = `rotate(10deg)`
                span.style.top = `${window.innerHeight/7*(-10+i)}px`
                span.style.left = `${window.innerWidth/7*(-10+j)}px`
                document.querySelector('.bigbox').appendChild(span)
            }
            console.log(window.innerWidth / 7)
        }
    </script>
</body>

</html>

這麼多標籤 我們可以用迴圈來建立 但是如果只有一整個螢幕的文字的話 很顯然不能做到全屏覆蓋 所以我總共建立了4個螢幕的span標籤 然後讓它旋轉後向下運動

   for (var i = 0; i < 20; i++) {
            for (var j = 0; j < 20; j++) {
                var span = document.createElement('span')
                //設定需要顯示的文字
                span.innerText = "桃花朵朵開"
                //讓他旋轉10度
                span.style.transform = `rotate(10deg)`
                //一個螢幕顯示49個 可以根據自己喜好調整密度
                span.style.top = `${window.innerHeight/7*(-10+i)}px`
                span.style.left = `${window.innerWidth/7*(-10+j)}px`
                document.querySelector('.bigbox').appendChild(span)
            }
   
        }

定義動畫

這裡會有個小bug 因為是迴圈建立的span標籤所以寬度不好確定所以 會出現跳幀的bug
解決辦法:計算運動的距離+兩個標籤之間的距離
transform: rotate(10deg) translateX(計算運動的距離+兩個標籤之間的距離px);

  @keyframes move {
            100% {
                transform: rotate(10deg) translateX(2194px);
            }
        }

使用動畫

 span {
            animation: move 15s linear infinite;
        }

上面給父盒子加了定位和旋轉角度 (可加可不加) 不加改一改迴圈裡的角度即可

 .bigbox {
            position: absolute;
            transform: rotate(20deg);
        }

end!

相關文章