You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Three.js模块脚本中的setModel等函数挂载到window全局以实现外部调用?

解决方案:将Three.js模块中的函数暴露到全局

当然可以把这些函数添加到window全局对象上!因为你用的是ES模块脚本(通过type="module"引入),模块内部的变量和函数默认都是私有作用域,外部脚本无法直接访问。手动将需要暴露的函数挂载到window对象,就能让它们在脚本外部被调用。

具体操作步骤

在每个你想对外暴露的函数定义完成后,添加一行代码将函数赋值给window的对应属性即可:

// 定义你的setModel函数
function setModel(url, callback) {
 gltfLoader.load( url, function ( gltf ) {
 if (model) scene.remove(model); // Remove the old model
 model = gltf.scene; // remember this one so we can remove it later.
 scene.add( model ); // Add new model
 render(); // Something has changed, render again.
 if (callback) {
 callback();
 }
 } );
}
// 暴露到全局window对象
window.setModel = setModel;

// 定义setNormalMapFromUrl函数
function setNormalMapFromUrl(url, complete, error) {
 textureLoader.load( url, function ( texture ) {
 setNormalMap(texture);
 if (complete) complete(texture);
 }, undefined, function ( err ) {
 if (error) error(err);
 } );
};
// 暴露到全局
window.setNormalMapFromUrl = setNormalMapFromUrl;

// 同理处理其他需要暴露的函数
function setRoughnessMapFromUrl(url, complete, error) {
 // 原有逻辑
}
window.setRoughnessMapFromUrl = setRoughnessMapFromUrl;

function setMapFromUrl(url, complete, error) {
 // 原有逻辑
}
window.setMapFromUrl = setMapFromUrl;

注意事项

  • 确保外部调用这些函数的脚本,是在你的Three.js模块脚本加载完成之后执行的。比如可以把外部脚本放在模块脚本的后面,或者监听DOMContentLoaded事件再调用。
  • 这种全局挂载的方式虽然简单,但如果项目规模较大,建议考虑使用更模块化的方案(比如导出函数后在外部脚本中通过import引入),不过对于快速实现外部调用的需求,挂载到window是完全可行的。

内容的提问来源于stack exchange,提问作者Udders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:37:33