当前位置:首页 > JavaScript

js实现阳光

2026-02-01 05:47:37JavaScript

以下是几种用JavaScript实现阳光/光照效果的常见方法,可根据具体需求选择:

使用CSS滤镜和动画

通过CSS的brightnessdrop-shadow滤镜结合动画实现阳光照射效果:

js实现阳光

const sun = document.createElement('div');
sun.style.cssText = `
  position: absolute;
  width: 100px; height: 100px;
  background: radial-gradient(circle, yellow, transparent 70%);
  filter: brightness(1.5) drop-shadow(0 0 10px gold);
  animation: pulse 2s infinite alternate;
`;
document.body.appendChild(sun);

// 动态添加CSS关键帧
const style = document.createElement('style');
style.textContent = `
  @keyframes pulse {
    from { transform: scale(1); opacity: 0.8; }
    to { transform: scale(1.2); opacity: 1; }
  }
`;
document.head.appendChild(style);

Canvas绘制阳光光晕

利用Canvas的径向渐变和合成模式创建更复杂的光照效果:

const canvas = document.createElement('canvas');
canvas.width = 300; canvas.height = 300;
document.body.appendChild(canvas);

const ctx = canvas.getContext('2d');
const gradient = ctx.createRadialGradient(150, 150, 0, 150, 150, 150);
gradient.addColorStop(0, 'rgba(255,255,0,1)');
gradient.addColorStop(0.7, 'rgba(255,200,0,0.5)');
gradient.addColorStop(1, 'rgba(255,150,0,0)');

ctx.globalCompositeOperation = 'lighter';
ctx.fillStyle = gradient;
ctx.beginPath();
ctx.arc(150, 150, 150, 0, Math.PI * 2);
ctx.fill();

WebGL实现动态光照

使用Three.js等库创建3D阳光效果:

js实现阳光

import * as THREE from 'three';

const scene = new THREE.Scene();
const light = new THREE.PointLight(0xffccaa, 1, 100);
light.position.set(10, 10, 10);
scene.add(light);

// 添加辉光效果
const sprite = new THREE.TextureLoader().load('glow.png');
const glow = new THREE.SpriteMaterial({ 
  map: sprite, 
  color: 0xffcc66, 
  transparent: true, 
  blending: THREE.AdditiveBlending 
});
const sunSprite = new THREE.Sprite(glow);
sunSprite.scale.set(5, 5, 1);
scene.add(sunSprite);

光线追踪模拟

通过光线步进算法模拟真实阳光(性能要求较高):

// 在片段着色器中实现的光线追踪示例
const shaderCode = `
  uniform vec3 sunDirection;
  void main() {
    vec3 lightDir = normalize(sunDirection);
    float intensity = max(0.0, dot(lightDir, vec3(0,1,0)));
    vec3 color = mix(vec3(0.1), vec3(1.0,0.9,0.7), intensity);
    gl_FragColor = vec4(color, 1.0);
  }
`;

实现选择建议:

  • 简单UI效果推荐CSS方案
  • 游戏或交互式场景建议Canvas/WebGL
  • 需要物理精确模拟时考虑光线追踪
  • 移动端注意性能优化

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

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…