当前位置:首页 > JavaScript

js实现阳光

2026-03-14 04:08:06JavaScript

实现阳光效果的JavaScript方法

使用Canvas绘制阳光效果是一种常见的方式。以下是一个简单的实现方法:

const canvas = document.createElement('canvas');
document.body.appendChild(canvas);
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
const ctx = canvas.getContext('2d');

function drawSun(x, y, radius, rays) {
    // 绘制太阳核心
    ctx.beginPath();
    ctx.arc(x, y, radius, 0, Math.PI * 2);
    const gradient = ctx.createRadialGradient(x, y, 0, x, y, radius);
    gradient.addColorStop(0, 'rgba(255, 255, 0, 1)');
    gradient.addColorStop(1, 'rgba(255, 200, 0, 0.8)');
    ctx.fillStyle = gradient;
    ctx.fill();

    // 绘制光线
    ctx.strokeStyle = 'rgba(255, 255, 0, 0.7)';
    ctx.lineWidth = 3;
    for(let i = 0; i < rays; i++) {
        const angle = (i / rays) * Math.PI * 2;
        const rayLength = radius * 2;
        const endX = x + Math.cos(angle) * rayLength;
        const endY = y + Math.sin(angle) * rayLength;
        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.lineTo(endX, endY);
        ctx.stroke();
    }
}

function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    drawSun(canvas.width/2, canvas.height/2, 50, 12);
    requestAnimationFrame(animate);
}

animate();

添加发光效果

使用CSS可以增强阳光的视觉效果:

js实现阳光

canvas {
    position: fixed;
    top: 0;
    left: 0;
    z-index: -1;
    background: linear-gradient(to bottom, #87CEEB, #E0F7FA);
}

body {
    margin: 0;
    overflow: hidden;
}

实现动态阳光变化

修改动画函数实现阳光大小和亮度的变化:

js实现阳光

let scale = 1;
let growing = true;

function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);

    // 动态变化
    if(growing) {
        scale += 0.005;
        if(scale > 1.2) growing = false;
    } else {
        scale -= 0.005;
        if(scale < 0.8) growing = true;
    }

    drawSun(canvas.width/2, canvas.height/2, 50 * scale, 12);
    requestAnimationFrame(animate);
}

使用WebGL实现更逼真效果

对于更高级的阳光效果,可以考虑使用Three.js等WebGL库:

import * as THREE from 'three';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// 创建太阳光源
const sunGeometry = new THREE.SphereGeometry(1, 32, 32);
const sunMaterial = new THREE.MeshBasicMaterial({color: 0xffff00});
const sun = new THREE.Mesh(sunGeometry, sunMaterial);
scene.add(sun);

// 添加辉光效果
const sunLight = new THREE.PointLight(0xffff00, 1, 100);
sunLight.position.set(0, 0, 0);
scene.add(sunLight);

camera.position.z = 5;

function animate() {
    requestAnimationFrame(animate);
    sun.rotation.x += 0.01;
    sun.rotation.y += 0.01;
    renderer.render(scene, camera);
}
animate();

性能优化建议

对于复杂场景,考虑以下优化措施:

  • 使用requestAnimationFrame进行动画循环
  • 对静态元素使用缓存
  • 合理设置Canvas或WebGL的尺寸
  • 避免在动画循环中创建新对象

这些方法可以根据具体需求进行调整和组合,创造出不同风格的阳光效果。

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

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…