当前位置:首页 > 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实现图片放大缩小

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

js实现tab选项卡切换

js实现tab选项卡切换

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

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选框 co…

js 实现按钮点击

js 实现按钮点击

实现按钮点击的 JavaScript 方法 HTML 按钮元素 在 HTML 中创建一个按钮,可以通过 <button> 或 <input> 标签实现: <button…