0. threejs源码阅读——结构概述

JavaScript016

0. threejs源码阅读——结构概述,第1张

从Git上Clone好项目后,目录结构如下:

src - 我们主要看的部分,包含了所有源码。

editor - 如果有自己做webgl webIDE的计划,可以参考一下。threejs的IDE多少年没变过了,功能很少也不太好用。

docs - 所有的教程和api文档,文件夹内有index页面可以直接本地浏览,比较方便,省的连外网了。

examples - 所有示例的源码,每个html文件的名字就是示例的名字,可以直接在本地运行。

build - 打包后的源码,一个是按module加载的,一个是整体加载的。

threejs源码中的每个类几乎都有2个文件。一个是ts文件,用来声明方法和变量,一个是js文件,用来实现。最终在打包输出的时候,都会被编译成js语法。

在本系列文章中,我们重点解读js文件中的内容,ts文件中的声明内容作为辅助,帮助我们理解每个js文件的大结构和功能。

使用插件 react-load-script

如果没有安装可以使用

yarn add react-load-script

或者

npm install react-load-script

,看你使用哪个包管理工具。

然后你就可以像使用React组件那样插入JS,如下代码。

import React from 'react'

import Script from 'react-load-script'

class DynamicScriptExample extends React.Component {

constructor(props) {

super(props)

this.state = {

scriptStatus: 'no'

}

}

handleScriptCreate() {

this.setState({ scriptLoaded: false })

}

handleScriptError() {

this.setState({ scriptError: true })

}

handleScriptLoad() {

this.setState({ scriptLoaded: true, scriptStatus: 'yes' })

}

render() {

return (

<>

<Script

url="https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js"

onCreate={this.handleScriptCreate.bind(this)}

onError={this.handleScriptError.bind(this)}

onLoad={this.handleScriptLoad.bind(this)}

/>

<div>动态脚本引入状态:{this.state.scriptStatus}</div>

</>

)

}

}

export default DynamicScriptExample