当前位置: 首页 > article >正文

文本在屏幕上自由游动

<!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 {
            background-color: #000; /* 设置背景颜色为黑色 */
            width: 100%; /* 设置宽度为100% */
            height: 100vh; /* 设置高度为视口高度 */
            overflow: hidden; /* 隐藏溢出内容 */
            position: relative; /* 设置相对定位 */
        }

        div {
            background-color: #000; /* 设置背景颜色为黑色 */
            color: rgb(255, 255, 255); /* 设置文本颜色为白色 */
            font-size: 100px; /* 设置字体大小为100px */
            position: absolute; /* 设置绝对定位 */
            white-space: nowrap; /* 防止文本换行 */
            will-change: transform; /* 提示浏览器该元素会频繁变化 */
        }
    </style>
</head>

<body>
    <div id="movingText">文本在屏幕上自由游动</div>

    <script>
        (function () {
            // 错误处理:确保元素存在
            const textElement = document.getElementById('movingText');
            if (!textElement) {
                console.error('未找到元素 #movingText');
                return;
            }

            // 初始化位置和速度
            let x = Math.random() * (window.innerWidth - textElement.offsetWidth); /* 随机生成初始x坐标 */
            let y = Math.random() * (window.innerHeight - textElement.offsetHeight); /* 随机生成初始y坐标 */
            let dx = 0.5 + Math.random() * 0.011;  /* 设置x方向速度 */
            let dy = 0.5 + Math.random() * 0.011;  /* 设置y方向速度 */

            // 边界检测函数
            function checkBoundaries() {
                const maxX = window.innerWidth - textElement.offsetWidth; /* 计算x方向最大边界 */
                const maxY = window.innerHeight - textElement.offsetHeight; /* 计算y方向最大边界 */

                if (x > maxX || x < 0) { /* 如果x超出边界 */
                    dx = -dx; /* 反转x方向速度 */
                    x = Math.max(0, Math.min(x, maxX)); /* 防止文本超出边界 */
                }
                if (y > maxY || y < 0) { /* 如果y超出边界 */
                    dy = -dy; /* 反转y方向速度 */
                    y = Math.max(0, Math.min(y, maxY)); /* 防止文本超出边界 */
                }
            }

            // 动画循环
            function moveText() {
                x += dx; /* 更新x坐标 */
                y += dy; /* 更新y坐标 */

                checkBoundaries(); /* 检查边界 */

                // 使用 transform 替代 left 和 top
                textElement.style.transform = `translate(${x}px, ${y}px)`; /* 应用变换 */

                requestAnimationFrame(moveText); /* 请求下一帧动画 */
            }

            // 启动动画
            moveText(); /* 开始动画 */

            // 窗口大小变化时重新计算边界
            window.addEventListener('resize', () => {
                x = Math.random() * (window.innerWidth - textElement.offsetWidth); /* 重新计算x坐标 */
                y = Math.random() * (window.innerHeight - textElement.offsetHeight); /* 重新计算y坐标 */
            });
        })();
    </script>
</body>

</html>


http://www.kler.cn/a/503857.html

相关文章:

  • 如何在Jupyter中快速切换Anaconda里不同的虚拟环境
  • 第27章 汇编语言--- 设备驱动开发基础
  • 探索图像编辑的无限可能——Adobe Photoshop全解析
  • 【Linux】深入理解文件系统(超详细)
  • springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)
  • 开放词汇检测新晋SOTA:DOSOD实时检测算法详解
  • 求矩阵不靠边元素之和(PTA)C语言
  • 用 Python 处理 CSV 和 Excel 文件
  • 构建云原生后端服务——以Spring Boot + Kubernetes为例
  • 《语言模型的新型推理范式:基于链式思考与强化学习的突破》
  • 量子计算:从薛定谔的猫到你的生活
  • hive知识体系
  • ubuntu22.04安装注意点
  • 力扣 全排列
  • ros2笔记-6.5 使用ros2_control驱动机器人
  • iOS 逆向学习 - Inter-Process Communication:进程间通信
  • 56_多级缓存实现
  • 【翻译】2025年华数杯国际赛数学建模题目+翻译pdf自取
  • csv. tsv文件的导入 导出功能总结C#
  • 深度剖析 GROUP BY 和 HAVING 子句:优化 SQL 查询的利器
  • 获取按图搜索淘宝商品(拍立淘)API接口用Java示例解释说明
  • YOLOv5训练长方形图像详解
  • matlab实现了一个优化的遗传算法,用于求解注汽站最优位置的问题
  • # CentOS7 系统 /dev/mapper/centos-root满了,十步清理
  • 像JSONDecodeError: Extra data: line 2 column 1 (char 134)这样的问题怎么解决
  • 【C++】PP5015 [NOIP2018 普及组] 标题统计