当前位置:首页 > JavaScript

js实现晚霞

2026-02-01 11:34:39JavaScript

实现晚霞效果的 JavaScript 方法

使用 Canvas 绘制渐变晚霞

通过 HTML5 Canvas 可以创建动态的晚霞效果,利用径向渐变和线性渐变模拟天空颜色变化:

const canvas = document.getElementById('sunsetCanvas');
const ctx = canvas.getContext('2d');

function drawSunset() {
  // 创建天空渐变
  const skyGradient = ctx.createLinearGradient(0, 0, 0, canvas.height);
  skyGradient.addColorStop(0, '#FF7F50');  // 深橙色
  skyGradient.addColorStop(0.5, '#FF4500'); // 橙红色
  skyGradient.addColorStop(1, '#8B0000');  // 深红色

  ctx.fillStyle = skyGradient;
  ctx.fillRect(0, 0, canvas.width, canvas.height);

  // 绘制太阳
  ctx.beginPath();
  ctx.arc(canvas.width/2, canvas.height/2, 50, 0, Math.PI * 2);
  const sunGradient = ctx.createRadialGradient(
    canvas.width/2, canvas.height/2, 10,
    canvas.width/2, canvas.height/2, 50
  );
  sunGradient.addColorStop(0, '#FFFF00');
  sunGradient.addColorStop(1, '#FFA500');
  ctx.fillStyle = sunGradient;
  ctx.fill();
}

drawSunset();

使用 CSS 动画创建晚霞背景

通过 CSS 关键帧动画可以实现颜色渐变的晚霞效果:

// 动态创建样式元素
const style = document.createElement('style');
style.textContent = `
  .sunset-sky {
    height: 100vh;
    background: linear-gradient(to bottom, #FF7F50, #FF4500, #8B0000);
    animation: sunsetGlow 10s infinite alternate;
  }

  @keyframes sunsetGlow {
    0% { background-color: #FF7F50; }
    50% { background-color: #FF4500; }
    100% { background-color: #8B0000; }
  }
`;
document.head.appendChild(style);

// 应用到页面元素
document.body.innerHTML = '<div class="sunset-sky"></div>';

使用 Three.js 创建 3D 晚霞

对于更逼真的效果,可以使用 WebGL 库 Three.js:

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 skyGeometry = new THREE.SphereGeometry(500, 60, 40);
const skyMaterial = new THREE.ShaderMaterial({
  vertexShader: `
    varying vec3 vWorldPosition;
    void main() {
      vec4 worldPosition = modelMatrix * vec4(position, 1.0);
      vWorldPosition = worldPosition.xyz;
      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
    }
  `,
  fragmentShader: `
    uniform vec3 topColor;
    uniform vec3 bottomColor;
    varying vec3 vWorldPosition;

    void main() {
      float h = normalize(vWorldPosition).y;
      gl_FragColor = vec4(mix(bottomColor, topColor, max(pow(h, 0.8), 0.0)), 1.0);
    }
  `,
  uniforms: {
    topColor: { value: new THREE.Color(0xFF4500) },
    bottomColor: { value: new THREE.Color(0x8B0000) }
  },
  side: THREE.BackSide
});

const sky = new THREE.Mesh(skyGeometry, skyMaterial);
scene.add(sky);

// 动画循环
function animate() {
  requestAnimationFrame(animate);
  renderer.render(scene, camera);
}
animate();

使用粒子系统模拟云彩

通过粒子系统可以增强晚霞的真实感:

const particles = new THREE.BufferGeometry();
const particleCount = 5000;
const positions = new Float32Array(particleCount * 3);

for (let i = 0; i < particleCount; i++) {
  const i3 = i * 3;
  positions[i3] = (Math.random() - 0.5) * 1000;
  positions[i3 + 1] = Math.random() * 200 + 100;
  positions[i3 + 2] = (Math.random() - 0.5) * 1000;
}

particles.setAttribute('position', new THREE.BufferAttribute(positions, 3));
const particleMaterial = new THREE.PointsMaterial({
  color: 0xFF7F50,
  size: 5,
  transparent: true,
  opacity: 0.7
});

const particleSystem = new THREE.Points(particles, particleMaterial);
scene.add(particleSystem);

这些方法可以根据需求单独使用或组合使用,创建不同风格的晚霞视觉效果。Canvas 方法适合简单的二维效果,CSS 动画实现简单但效果有限,Three.js 则能创建更复杂的三维场景。

js实现晚霞

标签: 晚霞js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现倒计时

js实现倒计时

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

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const ch…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…