返回项目目录
前端框架精选项目

A-Frame

建立在 Three.js 之上的声明式 WebXR 框架,通过 HTML 与实体组件系统构建 3D、AR 和 VR 体验。

主要语言JavaScript
开源许可MIT
项目类型前端框架
维护状态活跃维护
OVERVIEW

项目概述

A-Frame 用 <a-scene>、<a-entity> 等自定义元素把 3D 场景带入 HTML,同时保留对 JavaScript、DOM、Three.js 与 WebXR 的完整访问。它适合快速制作跨头显、桌面和移动设备的沉浸式 Web 体验。

A-Frame 是一个面向浏览器 3D、AR 和 VR 体验的开源 Web 框架。它建立在 Three.js 之上,通过 Custom Elements 暴露 <a-scene>、<a-entity>、<a-camera> 等声明式 HTML API,并以 Entity-Component System 组织几何体、材质、灯光、动画、输入和业务行为。初学者可以只用 HTML 创建可运行场景,复杂项目则可以注册自定义 Component,直接访问 DOM、Three.js Object3D、WebGL/WebGPU 与 WebXR API。A-Frame 会处理渲染循环、场景初始化、XR Session、默认相机和控制器等常见样板。当前稳定版为 1.8.0。

稳定版本1.8.0
核心架构HTML + Entity-Component System
许可证MIT
FEATURES

主要特点

A-Frame 把 Three.js 和 WebXR 能力封装为可组合的 HTML Entity 与 Component,让沉浸式场景能够从简单标记逐步扩展到完整应用。

01

声明式 3D HTML

通过 <a-scene>、<a-box>、<a-camera> 等自定义元素描述场景,结构直观且便于复制、教学和快速迭代。

02

实体组件系统

Entity 作为通用容器,Geometry、Material、Position、Animation 和自定义行为以可复用 Component 组合。

03

建立在 Three.js 之上

可以直接访问 Entity 的 object3D、Scene 和 Renderer,在声明式 API 不够时继续使用 Three.js 能力。

04

WebXR 会话管理

A-Frame 处理进入 VR/AR、XR Camera、Frame Loop 与常见设备样板,让基础场景可以直接在兼容头显中运行。

05

跨设备输入

提供 Cursor、Raycaster、Laser Controls、Tracked Controls、Hand Controls 等组件统一鼠标、触屏、手柄和手部追踪。

06

内置场景组件

常用 Geometry、Material、Light、Shadow、Animation、Sound、Fog、Sky、Video 和模型能力可直接通过属性配置。

07

glTF 模型加载

内置 gltf-model Component,并可通过 <a-assets> 预加载 GLB、Texture、Audio 和 Video 等资源。

08

自定义 Component

使用 AFRAME.registerComponent 定义 Schema、初始化、更新、事件与每帧 Tick,沉淀可复用的 3D 行为模块。

09

DOM 与事件模型

Entity 是真实 DOM Element,可以使用 querySelector、Attribute、Custom Event 和普通 Web 工具进行组织。

10

Visual Inspector

内置快捷方式可打开 3D Inspector,查看 Entity 层级、调整 Transform 和 Component 属性并导出结果。

11

社区组件生态

导航、物理、粒子、环境、多人协作与手势等能力可通过社区 Component 扩展。

12

桌面与移动降级体验

没有头显时仍可用鼠标、键盘、触屏和 Magic Window 浏览场景,便于分享同一 URL。

13

WebGPU 与 TSL 探索

新版本提供 WebGPU 和 Three.js Shading Language 示例,但采用前仍需确认浏览器支持与具体 Component 兼容性。

USE CASES

适用场景

它适合需要快速构建和分享 WebXR 内容、希望让网页开发者或设计人员直接参与场景编辑的项目。

VR 展厅与虚拟导览

用 glTF 场景、热点、空间音频、传送和控制器构建博物馆、展会、房产与园区导览。

AR 产品展示

在支持 WebXR AR 的设备上放置模型、响应命中测试,并为普通浏览器提供 3D 查看模式。

360° 图片与视频

通过 <a-sky>、Video Texture 和热点快速制作全景故事、旅游内容和活动直播体验。

教育与工作坊

HTML 语法和即时反馈降低 3D 入门门槛,适合课堂、编程工作坊和交互式知识演示。

沉浸式培训

结合步骤引导、控制器、空间音频和对象交互制作设备操作、安全演练与软技能培训。

轻量 WebXR 游戏

使用 Component、Raycaster、碰撞/物理扩展、动画和音频实现节奏、射击、解谜与休闲体验。

创意网页与互动装置

将 3D 场景与普通 HTML、实时数据、传感器和展览硬件结合,构建艺术作品和品牌互动。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

A-Frame 擅长的地方

  • 只用少量 HTML 就能创建可运行的 3D 与 WebXR 场景,原型速度快。
  • Entity-Component 架构便于组合、复用和共享交互行为。
  • 同时保留 DOM、JavaScript、Three.js 和 WebXR 访问权,不受声明式 API 完全限制。
  • 自动处理渲染循环、XR Session、默认 Camera 和常见输入样板。
  • 同一场景可覆盖头显、桌面与移动设备,分享和体验门槛较低。
  • Visual Inspector 有助于非图形程序员调整场景和理解 Entity 层级。
  • glTF、360 媒体和 Web 标准资产工作流成熟,容易与现有内容管线衔接。
  • 社区 Component 能快速补充环境、导航、物理和多人能力。
  • MIT 许可证宽松,适合教学、商业产品和开源项目。

需要注意

采用前应考虑的问题

抽象不会消除 3D 基础

仍需理解坐标系、相机、PBR、灯光、Draw Call、纹理、动画和 GPU 性能,复杂场景不能只靠 HTML 属性堆叠。

每帧更新不要走高层 DOM

高频 Transform 和交互逻辑应写入 Component 的 tick 并直接操作 object3D,避免反复 setAttribute 带来的解析成本。

社区 Component 质量不一

第三方插件可能依赖旧 A-Frame 或 Three.js,采用前要检查维护状态、版本范围、许可证和移动端表现。

底层 Three.js 版本由 A-Frame 管理

不要随意再安装并混用另一份 Three.js;访问内部 API 时应核对 A-Frame 当前绑定的 Three.js Release。

WebXR 需要安全上下文

除 localhost 外通常必须使用 HTTPS,且设备、浏览器和权限策略会影响 XR Session、相机及传感器访问。

设备能力差异明显

头显控制器、手部追踪、AR、移动 Safari 和桌面浏览器支持不同,应设计 Feature Detection 与交互降级。

大型资产仍需优化

应控制模型面数、材质数量、贴图尺寸、骨骼和动画,并使用 Draco、KTX2、LOD 与延迟加载等策略。

React 等框架集成要避免双重更新

不要让框架每帧重渲染 Scene Tree;业务 UI 可交给 React/Vue,实时 3D 状态应留在 A-Frame Component 内。

TypeScript 类型并非核心包内置

TypeScript 项目通常需要额外安装 @types/aframe,并可能为社区 Component 补充声明。

WebGPU 支持需要单独验证

A-Frame 的 WebGPU/TSL 路径较新,不能假设所有材质、后处理和社区 Component 与 WebGL 路径完全等价。

Canvas 内容不利于直接索引

SEO 和内容可访问性需要额外的 HTML 标题、说明、字幕、替代图像和非沉浸式操作路径。

沉浸式体验要关注舒适度

避免强制 Camera 移动、低帧率和不稳定 Locomotion,提供传送、转向、坐姿与 Reduced Motion 选项。

QUICK START

快速开始

下面先用单个 HTML 文件创建可交互场景,再展示 npm/Vite、glTF 资源、自定义 Component 与 XR 控制器的常见写法。

1使用 CDN 创建第一个场景
html
<!doctype html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <script src="https://aframe.io/releases/1.8.0/aframe.min.js"></script>
  </head>
  <body>
    <a-scene>
      <a-box
        position="-1 0.5 -3"
        rotation="0 45 0"
        color="#4cc3d9"
      ></a-box>
      <a-sphere
        position="0 1.25 -5"
        radius="1.25"
        color="#ef2d5e"
      ></a-sphere>
      <a-plane
        position="0 0 -4"
        rotation="-90 0 0"
        width="6"
        height="6"
        color="#7bc8a4"
      ></a-plane>
      <a-sky color="#ececec"></a-sky>
    </a-scene>
  </body>
</html>
2使用 Vite 和 npm
bash
npm create vite@latest aframe-demo -- --template vanilla
cd aframe-demo
npm install
npm install aframe
npm run dev
3在模块入口加载 A-Frame
javascript
import "aframe";

// A-Frame 注册自定义元素后,index.html 中的
// <a-scene> 与 <a-entity> 会自动初始化。
4预加载并显示 glTF 模型
html
<a-scene>
  <a-assets timeout="15000">
    <a-asset-item
      id="robot"
      src="/models/robot.glb"
    ></a-asset-item>
  </a-assets>

  <a-entity
    gltf-model="#robot"
    position="0 0 -3"
    rotation="0 30 0"
  ></a-entity>
</a-scene>
5注册可复用的旋转 Component
javascript
AFRAME.registerComponent("auto-rotate", {
  schema: {
    speed: { type: "number", default: 30 },
  },

  tick(_time, delta) {
    this.el.object3D.rotation.y +=
      THREE.MathUtils.degToRad(this.data.speed) *
      (delta / 1000);
  },
});

// HTML 中使用:
// <a-entity gltf-model="#robot" auto-rotate="speed: 20"></a-entity>
6增加头显控制器与射线交互
html
<a-entity
  laser-controls="hand: left"
  raycaster="objects: .interactive"
></a-entity>

<a-entity
  laser-controls="hand: right"
  raycaster="objects: .interactive"
></a-entity>

<a-box
  class="interactive"
  position="0 1.5 -3"
  color="#ef2d5e"
></a-box>
7执行发布前检查
bash
npm run build

# 通过 HTTPS 测试桌面、手机和目标头显
# 验证鼠标、触屏、控制器、手部追踪、资源失败和 XR 退出流程
# 在真机中监控帧率、Draw Call、纹理显存与首次加载时间

下一步:先用声明式 Entity 验证场景,再把每帧行为放进 A-Frame Component 的 tick 生命周期;上线前必须在 HTTPS、目标头显和普通桌面/移动浏览器上分别测试。

ALTERNATIVES

类似项目

这些站内项目覆盖 A-Frame 的底层图形库、完整 3D 引擎和现代构建工具;外部项目则提供其他 WebXR 或声明式 3D 方案。

COMPARISON

A-Frame vs Three.js

A-Frame 建立在 Three.js 之上,两者不是完全独立的竞争关系。A-Frame 提供 HTML、Entity-Component、WebXR 和输入层的高阶框架;Three.js 提供更直接、更自由的场景与渲染 API。

比较维度A-FrameThree.js
核心定位声明式 3D / AR / VR Web 框架通用 JavaScript 3D 图形库
技术关系内部使用 Three.js 完成渲染直接封装 WebGL/WebGPU 图形能力
主要写法HTML Entity + Component + JavaScriptJavaScript/TypeScript Object 与 Renderer API
架构Entity-Component SystemScene Graph + 可选 Addons
WebXR 起步Scene、按钮、Camera 与控制器样板集成度高提供 WebXR Manager 和 Helper,由应用自行组合
输入交互Cursor、Raycaster 和多类 Controls ComponentRaycaster 与 XR Controller API,更偏底层
场景调试内置可视化 Inspector官方 Examples、Editor 与浏览器调试工具
自由度约定明确,常见场景更快,复杂底层控制需下探组合自由度高,但应用架构和交互层需自行设计
框架集成DOM 元素易嵌入网页,但需避免双重状态更新原生 API 或 React Three Fiber、TresJS、Threlte 等封装
学习入口熟悉 HTML 即可快速看到结果需要先理解 Scene、Camera、Renderer 和渲染循环
许可证MITMIT
更适合WebXR 原型、教育、展厅和声明式场景定制渲染、数据可视化、产品 3D 与复杂图形应用
如何选择

如果团队希望用 HTML 快速构建跨头显、移动与桌面的 WebXR 场景,并偏好 Entity-Component 模型,优先评估 A-Frame;如果项目需要精细控制渲染管线、自由选择架构,或重点是非 XR 的复杂 3D 可视化,直接使用 Three.js 通常更合适。A-Frame 项目在需要时仍可以访问底层 Three.js,但应尊重 A-Frame 管理的版本和生命周期。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 8 月 20 日
核验版本A-Frame 1.8.0
内容维护aframevr contributors
项目维护状态活跃维护

npm 官方元数据与 A-Frame 1.8.0 文档核验的稳定版为 1.8.0,许可证为 MIT。官方资料确认 A-Frame 建立在 Three.js 上,采用声明式 HTML 与 Entity-Component 架构,并面向支持 WebXR 的头显、移动和桌面浏览器;官方仓库未归档,最近可见提交日期为 2026 年 7 月 13 日。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 13 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 13 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库