当前位置:首页 > JavaScript

js实现太阳

2026-04-05 05:03:45JavaScript

使用Canvas绘制太阳动画

以下是一个使用JavaScript和HTML5 Canvas绘制动态太阳效果的实现方法,包含发光效果和简单动画:

<!DOCTYPE html>
<html>
<head>
    <title>太阳动画</title>
    <style>
        body { margin: 0; overflow: hidden; background: #87CEEB; }
        canvas { display: block; }
    </style>
</head>
<body>
    <canvas id="sunCanvas"></canvas>
    <script>
        const canvas = document.getElementById('sunCanvas');
        const ctx = canvas.getContext('2d');

        // 设置画布大小为窗口大小
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;

        // 太阳属性
        const sun = {
            x: canvas.width / 2,
            y: canvas.height / 2,
            radius: 100,
            rays: 12,
            rayLength: 150,
            color: '#FFD700',
            glowColor: 'rgba(255, 215, 0, 0.5)',
            angle: 0,
            pulse: 0
        };

        // 动画循环
        function animate() {
            ctx.clearRect(0, 0, canvas.width, canvas.height);

            // 绘制太阳光芒
            drawSunGlow();

            // 绘制太阳
            drawSun();

            // 更新动画参数
            sun.angle += 0.01;
            sun.pulse = Math.sin(sun.angle) * 0.1 + 1;

            requestAnimationFrame(animate);
        }

        function drawSunGlow() {
            const gradient = ctx.createRadialGradient(
                sun.x, sun.y, sun.radius,
                sun.x, sun.y, sun.radius * 3
            );
            gradient.addColorStop(0, sun.glowColor);
            gradient.addColorStop(1, 'rgba(255, 215, 0, 0)');

            ctx.fillStyle = gradient;
            ctx.beginPath();
            ctx.arc(sun.x, sun.y, sun.radius * 3, 0, Math.PI * 2);
            ctx.fill();
        }

        function drawSun() {
            // 绘制光芒射线
            ctx.save();
            ctx.translate(sun.x, sun.y);

            for (let i = 0; i < sun.rays; i++) {
                const angle = (i * (Math.PI * 2 / sun.rays)) + sun.angle;
                const x1 = Math.cos(angle) * sun.radius;
                const y1 = Math.sin(angle) * sun.radius;
                const x2 = Math.cos(angle) * (sun.radius + sun.rayLength * sun.pulse);
                const y2 = Math.sin(angle) * (sun.radius + sun.rayLength * sun.pulse);

                ctx.beginPath();
                ctx.moveTo(x1, y1);
                ctx.lineTo(x2, y2);
                ctx.lineWidth = 8;
                ctx.strokeStyle = sun.color;
                ctx.stroke();
            }

            ctx.restore();

            // 绘制太阳主体
            ctx.beginPath();
            ctx.arc(sun.x, sun.y, sun.radius, 0, Math.PI * 2);
            ctx.fillStyle = sun.color;
            ctx.fill();
        }

        // 响应窗口大小变化
        window.addEventListener('resize', () => {
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;
            sun.x = canvas.width / 2;
            sun.y = canvas.height / 2;
        });

        animate();
    </script>
</body>
</html>

实现说明

  1. 画布设置
    创建HTML5 Canvas元素并设置其大小为窗口大小,获取2D渲染上下文。

  2. 太阳属性
    定义太阳的各种属性,包括位置、半径、光芒数量、光芒长度、颜色和动画参数。

  3. 动画循环
    使用requestAnimationFrame创建平滑动画,每帧清除画布并重绘太阳。

  4. 发光效果
    使用径向渐变创建太阳的发光效果,从中心向外逐渐淡化。

  5. 光芒射线
    围绕太阳中心绘制多条射线,通过旋转角度和脉冲效果创建动态光芒。

  6. 响应式设计
    监听窗口大小变化事件,调整画布和太阳位置以适应不同屏幕尺寸。

自定义选项

可以修改以下参数来自定义太阳效果:

js实现太阳

  • sun.radius:改变太阳主体大小
  • sun.rays:调整光芒数量
  • sun.rayLength:控制光芒长度
  • sun.colorsun.glowColor:更改颜色方案
  • 动画速度:调整sun.angle的增量值

这个实现创建了一个具有脉冲发光效果的动态太阳,光芒会缓慢旋转并轻微伸缩,模拟真实的太阳视觉效果。

标签: 太阳js
分享给朋友:

相关文章

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…