当前位置:首页 > JavaScript

js实现月亮

2026-03-14 18:41:12JavaScript

使用Canvas绘制月亮

在JavaScript中,可以通过HTML5的Canvas API绘制月亮形状。以下是一个简单的实现示例:

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

// 绘制满月
ctx.beginPath();
ctx.arc(150, 150, 100, 0, Math.PI * 2);
ctx.fillStyle = '#FDB813';
ctx.fill();

// 绘制月牙(通过叠加圆形实现)
ctx.beginPath();
ctx.arc(170, 150, 100, 0, Math.PI * 2);
ctx.fillStyle = '#000';
ctx.fill();

使用SVG创建月亮

SVG是另一种创建矢量图形的有效方式,适合需要缩放而不失真的场景:

<svg width="300" height="300">
  <circle cx="150" cy="150" r="100" fill="#FDB813"/>
  <circle cx="170" cy="150" r="100" fill="#000"/>
</svg>

使用CSS绘制月亮

纯CSS也可以实现简单的月亮效果,适合不需要复杂交互的场景:

<div class="moon"></div>

<style>
.moon {
  width: 200px;
  height: 200px;
  background-color: #FDB813;
  border-radius: 50%;
  position: relative;
}
.moon::after {
  content: '';
  position: absolute;
  width: 200px;
  height: 200px;
  background-color: #000;
  border-radius: 50%;
  left: 20px;
}
</style>

使用Three.js创建3D月亮

对于需要3D效果的场景,可以使用Three.js库:

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 geometry = new THREE.SphereGeometry(5, 32, 32);
const material = new THREE.MeshBasicMaterial({color: 0xFDB813});
const moon = new THREE.Mesh(geometry, material);
scene.add(moon);

camera.position.z = 10;

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

添加月相变化效果

通过调整Canvas绘制参数可以实现月相变化:

js实现月亮

function drawMoonPhase(ctx, x, y, radius, phase) {
  ctx.beginPath();
  ctx.arc(x, y, radius, 0, Math.PI * 2);
  ctx.fillStyle = '#FDB813';
  ctx.fill();

  ctx.beginPath();
  ctx.ellipse(x + radius * (1 - phase * 2), y, radius, radius, 0, 0, Math.PI * 2);
  ctx.fillStyle = '#000';
  ctx.fill();
}

标签: 月亮js
分享给朋友:

相关文章

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现复选框

js实现复选框

实现复选框的基本方法 使用HTML的<input type="checkbox">元素创建复选框,并通过JavaScript监听其状态变化。 <input type="checkb…

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…