摩天轮文字特效

一个旋转的立体星环(类似于摩天轮)文字效果,我们将使用HTML、CSS和JavaScript来实现这个效果。

主要组成部分

HTML部分

    • 没有额外的HTML元素,所有内容通过JavaScript动态生成。

    CSS部分

      • 设置了基本的样式,包括背景颜色为浅灰色 (#f4f4f9)。
      • 定义了文字的基本样式,包括字体大小为 24px,加粗,并且居中对齐。

      JavaScript部分

        • 使用一个预定义的鲜艳颜色数组来生成随机颜色。
        • 创建文字元素,并将其添加到页面中。
        • 更新每个文字的位置,使其围绕鼠标形成一个旋转的文字环。
        • 生成初始的文字元素。
        • 初始化文字元素,并监听鼠标移动事件以更新鼠标位置。
        <!DOCTYPE html>
        <html lang="zh-CN">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>立体文字环效果</title>
            <style>
                body {
                    margin: 0;
                    overflow: hidden;
                    display: flex;
                    justify-content: center;
                    align-items: center;
                }
                .text-star {
                    position: absolute;
                    font-size: 24px;
                    font-weight: bold;
                    text-align: center;
                }
            </style>
        </head>
        <body>
            <script>
                const numStars = 20;
                const textStars = [];
                const radius = 130; // 文字环半径
                const angleStep = (Math.PI * 2) / numStars; // 每个文字的角度间隔
        
                function getRandomColor() {
                    const colors = [
                        '#FF5733', '#33FF57', '#3357FF', '#F3FF33', '#FF33A1',
                        '#33FFF6', '#F633FF', '#33F6FF', '#FFB333', '#FF33C6'
                    ];
                    return colors[Math.floor(Math.random() * colors.length)];
                }
        
                function createTextStar(text, x, y) {
                    const textStar = document.createElement('div');
                    textStar.className = 'text-star';
                    textStar.textContent = text;
                    textStar.style.color = getRandomColor(); // 设置随机鲜艳颜色
                    textStar.style.left = `${x - 12}px`; // 调整文字位置使其居中
                    textStar.style.top = `${y - 12}px`; // 调整文字位置使其居中
                    document.body.appendChild(textStar);
                    textStars.push({ element: textStar, x, y });
                }
        
                function animate(mouseX, mouseY) {
                    for (let i = 0; i < textStars.length; i++) {
                        const angle = angleStep * i + performance.now() / 1000; // 添加时间因素使文字环旋转
                        const x = mouseX + radius * Math.cos(angle);
                        const y = mouseY + radius * Math.sin(angle);
                        textStars[i].element.style.left = `${x - 12}px`; // 调整文字位置使其居中
                        textStars[i].element.style.top = `${y - 12}px`; // 调整文字位置使其居中
                    }
        
                    requestAnimationFrame(() => animate(mouseX, mouseY));
                }
        
                function spawnTextStars(num) {
                    const text = "网页特效库";
                    for (let i = 0; i < num; i++) {
                        const angle = angleStep * i;
                        const x = window.innerWidth / 2 + radius * Math.cos(angle);
                        const y = window.innerHeight / 2 + radius * Math.sin(angle);
                        createTextStar(text[Math.floor(i % text.length)], x, y);
                    }
                }
        
                spawnTextStars(numStars);
        
                let mouseX = window.innerWidth / 2;
                let mouseY = window.innerHeight / 2;
        
                document.addEventListener('mousemove', (event) => {
                    mouseX = event.clientX;
                    mouseY = event.clientY;
                });
        
                animate(mouseX, mouseY);
            </script>
        </body>
        </html>

        No responses yet

        发表回复

        您的邮箱地址不会被公开。 必填项已用 * 标注