news 2026/4/18 12:25:19

JSAPIThree UI 控件学习笔记:用内置控件提升交互

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JSAPIThree UI 控件学习笔记:用内置控件提升交互

作为刚接触 mapvthree 的新手,今天我专门学习了 UI 控件模块。这里整理出最常用的控件和实用技巧,帮助和我一样的初学者快速上手。

控件管理入口:engine.widgets

mapvthree 中的控件由 EngineWidgets 管理,实例化后可以通过 engine.widgets 访问。控件分两种启用方式:

初始化时配置:在 new Engine() 时,通过 widgets 字段设置 enabled

运行时控制:引擎创建完成后,直接修改 engine.widgets.xxx.enabled

const engine = new mapvthree.Engine(container, {

map: { center: [106.515, 29.639], range: 500 },

rendering: {

// 导出图片需要开启

preserveDrawingBuffer: true,

},

widgets: {

zoom: { enabled: true }, // 缩放控件

fullscreen: { enabled: true }, // 全屏控件

geoLocate: { enabled: true }, // 定位控件

exportImage: { enabled: true }, // 导出图片控件

compass: { enabled: true }, // 指南针

mapInfo: { enabled: true }, // 显示地理坐标

},

});

// 运行时开启比例尺与 logo

engine.widgets.scale.enabled = true;

engine.widgets.logo.enabled = true;

小贴士:exportImage 必须搭配 rendering.preserveDrawingBuffer = true,否则截图会是空白。

常用控件一览

控件 作用 使用建议

zoom 显示缩放按钮 与鼠标滚轮配合,易用性更高

compass 显示方向和倾角 适合 3D 场景,便于用户恢复默认视角

fullscreen 全屏切换 适合大屏展示或需要沉浸体验的场景

geoLocate 定位按钮 搭配获取定位的业务逻辑使用

exportImage 导出当前场景为图片 需开启 preserveDrawingBuffer

mapInfo 显示当前地理坐标 对需要精确定位的业务很有帮助

drawer 自定义控件容器(如工具面板) 可以挂自定义按钮或操作

深入配置:mapInfo、drawer 与 accessors

除了 enabled,部分控件还提供更细的参数:

mapInfo

template:字符串由 C(中心点)、R(视野距离)、H(heading)、P(pitch)等占位符组成,默认 CR

separator:字段之间的分隔符,默认 ' | '

例如:mapInfo: { enabled: true, template: 'CHP', separator: ', ' }

drawer

draws 数组描述每个工具项:name、defaultChecked、data、onChange

onChange(checked, data, engine) 在开关时触发,可用于添加/移除对象

访问器(accessor)

每个控件都有对应的 getter,例如 engine.widgets.zoom、engine.widgets.scale

获取到的是控件实例,可以直接读写属性:engine.widgets.mapInfo.template = 'CRH'

自定义 Drawer 控件

drawer 类似一个工具抽屉,可以配置多个“工具项”。每个工具项的 onChange 回调会在开关时触发,可用于添加/移除物体等自定义逻辑。

const engine = new mapvthree.Engine(container, {

...,

widgets: {

drawer: {

enabled: true,

draws: [

{

name: '添加绿盒子',

data: { mesh: null },

onChange: (checked, data, engine) => {

if (!data.mesh) {

const position = engine.map.projectArrayCoordinate([106.515, 29.639]);

const geometry = new THREE.BoxGeometry(100, 100, 100);

const material = new THREE.MeshBasicMaterial({color: 0x00ff00});

const mesh = new THREE.Mesh(geometry, material);

mesh.position.set(position[0], position[1], position[2]);

data.mesh = mesh;

}

checked ? engine.add(data.mesh) : engine.remove(data.mesh);

},

},

],

},

},

});

截图功能:别忘了 preserveDrawingBuffer

exportImage 控件其实是一个“导出当前画面”的按钮,但要正常截图必须开启 rendering.preserveDrawingBuffer = true。在纯引擎场景下只用设置这一项;如果叠加 BMapGL 或 mapbox,还需要在对应地图实例初始化时开启同名参数。

const engine = new mapvthree.Engine(container, {

rendering: {

preserveDrawingBuffer: true,

},

widgets: {

exportImage: { enabled: true },

},

});

使用建议

按需启用:控件越多越不一定好,按场景需求启用即可

统一风格:若有自定义 UI,尽量与内置控件保持视觉一致

与业务逻辑配合:控件只是入口,核心业务逻辑仍需自行实现(如定位、截图结果保存等)

运行时控制:可以根据场景状态动态开启/关闭控件,例如进入播放模式时隐藏所有按钮

学习笔记就到这里啦!内置控件用起来并不复杂,关键是理解“初始化配置 + 运行时控制”这两种方式,然后按需组合即可。希望这份笔记能帮你快速把控件用好!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:31:34

Quill富文本在博客系统中的应用实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个博客系统的文章编辑模块,使用Quill富文本编辑器实现:1. 文章内容编辑和格式化 2. 图片和视频嵌入 3. 代码高亮功能 4. 自动保存草稿 5. 内容版本对比…

作者头像 李华
网站建设 2026/4/16 18:09:26

企业级解决方案:处理无签名第三方INF文件的最佳实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个企业级INF文件管理系统,功能包括:1.自动扫描网络共享中的INF文件 2.分类存储有签名/无签名文件 3.对无签名文件进行风险评估 4.生成管理报表 5.支持…

作者头像 李华
网站建设 2026/4/17 23:32:29

算法题 K 站中转内最便宜的航班

K 站中转内最便宜的航班 问题描述 有 n 个城市,编号从 0 到 n - 1。给你一个航班数组 flights,其中 flights[i] [from_i, to_i, price_i] 表示从城市 from_i 到城市 to_i 的航班价格为 price_i。 给你三个整数 src(出发城市)、…

作者头像 李华
网站建设 2026/4/18 7:39:35

SMDJ51A单向 TVS瞬态抑制二极管:3000W功率中压浪涌防护核心

SMDJ51A单向 TVS瞬态抑制二极管 二极管产品已经跟我们的生活有着密不可分的联系了, TVS瞬态抑制二极管,是一种高效能保护二极管,产品体积小、功率大、响应快等诸多优点,产品应用广泛 TVS瞬态抑制二极管SMDJ51A,是一种二…

作者头像 李华
网站建设 2026/4/17 12:45:28

小白也能懂:Ubuntu安装Nvidia显卡驱动图解教程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个面向新手的交互式Nvidia驱动安装教程。要求:1. 图形化界面展示每个步骤 2. 包含常见错误截图及解决方法 3. 终端命令可直接复制粘贴 4. 安装后基础检测方法。输…

作者头像 李华
网站建设 2026/4/18 8:18:09

小程序毕设选题推荐:基于springboot+微信小程序的校园活动管理系统设计与实现基于微信小程序的大学生社团活动管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华