当前位置: 首页 > news >正文

JSAPIThree 事件系统学习笔记:处理交互的基础

作为刚接触 mapvthree 的新手,今天我专门学习了事件系统。这里汇总最实用的内容,帮助和我一样的初学者快速掌握交互的核心用法。

绑定与移除事件,只需记住 add/remove

mapvthree 复用了 Three.js 的 addEventListener / removeEventListener,所以任何继承自 Object3D 的对象都能直接绑定事件。引擎内部的调度器会帮我们处理拾取、命中检测等复杂逻辑,我们只需要专注于“监听哪一个对象”和“响应什么事件”。

const box = engine.add(new THREE.Mesh(new THREE.BoxGeometry(10, 10, 10),new THREE.MeshBasicMaterial({color: 0xaa0000}),
));const handleClick = (e) => {console.log('盒子被点击,地理坐标:', e.point);box.removeEventListener('click', handleClick); // 一次性事件
};box.addEventListener('click', handleClick);
  • 常见事件:clickdblclickmousemovemouseentermouseleavepointerdownpointerup
  • 一定记得在物体移除或销毁前调用 removeEventListener,避免内存泄漏

EventParam 里的信息足够丰富

每次事件触发,回调都会收到统一的 EventParam,其中最常用的字段如下:

属性 说明
target / currentTarget 触发事件的对象、绑定事件的对象
position 鼠标在世界坐标中的位置(Array[3])
point 鼠标在地理坐标中的位置(经纬度)
index / entity 当事件来自支持 dataSource 的图层时,可获取对应的数据索引和实体
event 原始浏览器事件对象
box.addEventListener('mousemove', (e) => {if (e.position) {helper.position.fromArray(e.position); // 在 3D 空间显示鼠标所在点}
});

注意:当事件绑定在 engine.map 这类场景根对象上时,只能拿到 positionpoint,其它字段不存在。

事件不仅限于几何体,根对象也能监听

可以在可视化图层、地图根节点甚至 engine.map 上绑定事件,从而实现不同层级的交互。例如:

engine.map.addEventListener('pointerdown', () => {engine.clock.currentTime = new Date('2025-05-15 18:00:00');
});
engine.map.addEventListener('pointerup', () => {engine.clock.currentTime = new Date('2025-05-15 14:00:00');
});

这段代码演示了如何在地图级别监听按下/抬起事件,并根据交互切换天空时间。

事件冒泡:必要时调用 stopPropagation

事件从子节点向父节点冒泡,沿着场景树一直传递到根对象。我们可以利用冒泡做统一处理,也可以在需要时阻止冒泡。

ear.addEventListener('click', (e) => {alert('点击到了耳朵');e.stopPropagation(); // 阻止继续触发头部或整个人的点击事件
});
head.addEventListener('click', () => alert('点击到了头像'));
human.addEventListener('click', () => alert('点击到了整个人'));

当需要在某个层级拦截事件时,记得调用 stopPropagation()

使用建议

  • 善用一次性事件:如果某个事件只需要触发一次,回调里立即调用 removeEventListener
  • 场景根对象的事件:仅能获取位置坐标,适合做“全局点击”或“拖拽地图切换模式”之类的功能。
  • 粒度控制:能在具体对象上监听就不要放在根节点,粒度越精细,代码越容易维护。
  • 性能提示:事件调度器会在帧末集中处理,并做异步、去重等优化,正常使用不必担心性能问题。

学习笔记就到这里!事件系统本身并不复杂,关键是熟悉 addEventListenerEventParam 和冒泡这几个核心概念。掌握它们之后,构建交互式地图就顺手多了。希望这份笔记也能帮到你!

http://www.gsyq.cn/news/61189.html

相关文章:

  • 2025广州留学机构有哪些学校招生
  • 现今安徽香菇厂家推荐排行
  • 2025年Q4内容审核公司推荐,全链路防护+弹性人力池测评榜
  • 深扒Pickle反序列化
  • 2025年靠谱的西安外贸网站建设行业内最具实力的三家公司
  • 2025 年 11 月铣床厂家权威推荐榜:立式铣床/摇臂铣床/炮塔铣床/数控铣床/升降台铣床/精密铣床/多功能铣床/万能铣床/手摇铣床,高效精准加工利器精选
  • 运维监控厂商格局重塑:2025可观测技术如何重构企业IT运维效能?
  • Rust 创建环境配置:IDE 选择与深度优化实践
  • 2025 年 11 月镀膜材料厂家权威推荐榜:真空镀膜材料,光学镀膜材料,PVD镀膜材料,磁控溅射镀膜材料,专业品质与创新技术深度解析
  • MATLAB中主成分分析(PCA)与相关性分析的实现
  • 2025年11月休闲食品品牌推荐排行:满足多元场景的理性选择
  • OOP-实验四
  • 2025年LED灯珠优质厂家权威推荐榜单:LED灯‌/led灯‌/led景观灯‌源头厂家精选
  • 分布式、域控及SOA架构车身功能测试方案
  • 2025年广东枫叶卡企业外派保卡豁免条件方案权威榜单:广东枫叶卡企业外派保卡审批/广东枫叶卡企业外派保卡进度查询渠道/广东枫叶卡企业外派保卡失败原因服务机构精选
  • 2025 年 11 月靶材厂家权威推荐榜:溅射/磁控溅射/镀膜/旋转靶材,ITO/半导体/光学镀膜/陶瓷/金属/钛/铝/铜/钨/钼/钽/硅/合金/稀土靶材精选品牌,技术实力与镀膜效果深度解析
  • Java新手建站避坑:3天遭爬取后,10分钟部署免费WAF护住学习笔记
  • 2025天津留学机构推荐排名前十
  • 2025厦门比较好的留学机构有哪些
  • 2025 年 11 月铝单板厂家权威推荐榜:氟碳铝单板、仿木纹铝单板、仿石材铝单板,精选耐用美观的定制化外墙装饰解决方案
  • 2025 年 11 月管道更换服务实力厂家推荐榜:覆盖老旧破损/防腐耐高温/无损快速更换,自来水/燃气/暖气/工业/中央空调/地下室内外管道专业施工与高效解决方案
  • 2025年最受欢迎的一对一家教老师TOP5,一对一家教/上门家教一对一家教机构老师推荐排行榜单
  • [题解]P12444 [COTS 2025] 发好奖 / Hijerarhija
  • 2025年M12焊板式插座厂家权威推荐榜单:M12电源连接器方形法兰插座‌/M12连接器K编码插头‌/M12连接器T编码插座‌源头厂家精选
  • 抓住寒假提分窗!推荐硬实力初中数学补习老师,弯道超车正当时
  • 2025年奥福兰权威深度解析:八大核心技术如何重塑健康睡眠新标准
  • 2025年奥福兰权威解析:八大核心技术如何重塑健康睡眠新标准
  • 2025北京留学机构哪个好
  • 小明网站微信登录改造记——OAuth2完整指南(含续期逻辑)
  • 2025年11月网络推广公司推荐榜单:五大服务商综合对比分析