靠的两个东西Mitt.js和TWEEN.js,那么他们分别是什么呢,咱们下来说说
1.Mitt.js
它被叫做小型事件发布订阅库,常被作为兄弟组件间传值.
gitHub地址: GitHub - developit/mitt: 🥊 Tiny 200 byte functional event emitter / pubsub.
npm地址: mitt - npm
使用方法也很简单
- import mitt from 'mitt'
- const emitter = mitt()
- function onFoo(data) {
- console.log(data);
- }
- const TOPIC = 'topic'
- // 订阅,在触发的页面监听值,onFoo里面的参数就是被传递的data
- emitter.on(TOPIC, onFoo)
- // 发布事件,在触发的页面传递值
- emitter.emit(TOPIC, { a: 'b' })
- // 取消订阅
- emitter.off(TOPIC, onFoo)
以上方法就形成了点击事件传递给js文件
2.TWEEN.js
TWEEN又叫补间动画,允许你以平滑的方式更改对象的属性。你只需告诉它哪些属性要更改,当补间结束运行时它们应该具有哪些最终值,以及这需要多长时间,补间引擎将负责计算从起始点到结束点的值。
在Three.js中其实已经引入了TWEEN,只需要引入它就可以了。
- import { TWEEN } from 'three/examples/jsm/libs/tween.module.min'
- /**
- * 移动视角
- */
- var tween;
- const moveCamera = (newT = { x: 0, y: 0, z: 0 }, newP = { x: 215, y: 251, z: 378 }) => {
- if (tween) {
- tween.stop()
- }
- let oldP = camera.position
- // return console.log(this.controls)
- let oldT = controls.target
- // let oldT = controls.object.position
-
- tween = new TWEEN.Tween({
- x1: oldP.x,
- y1: oldP.y,
- z1: oldP.z,
- x2: oldT.x,
- y2: oldT.y,
- z2: oldT.z
- })
- tween.to(
- {
- x1: newP.x,
- y1: newP.y,
- z1: newP.z,
- x2: newT.x,
- y2: newT.y,
- z2: newT.z
- },
- 2000
- )
- tween.onUpdate((object) => {
- camera.position.set(object.x1, object.y1, object.z1)
- controls.target.x = object.x2
- controls.target.y = object.y2
- controls.target.z = object.z2
- controls.update()
- })
- tween.onComplete(() => {
- controls.enabled = true
- })
- tween.easing(TWEEN.Easing.Cubic.InOut)
- tween.start()
- }
20230911_162304
本期的threejs的使用技巧和代码页面的组成就讲到这里,下期我会给大家将一些例如标签的创建,热力图的展示等效果,有没有很期待呢。