当前位置:首页 > 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实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现吸色

js实现吸色

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