three-base 1.0.73 → 1.0.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ThreeBase.d.ts +1 -1
- package/lib/ThreeBase.js +8 -8
- package/lib/ThreeBase.ts +9 -8
- package/package.json +1 -1
package/lib/ThreeBase.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
16
16
|
controls: OrbitControls;
|
|
17
17
|
isRendererContextLost: boolean;
|
|
18
18
|
setContainer(div: HTMLDivElement | null): Promise<void>;
|
|
19
|
-
|
|
19
|
+
setsize(width: number, height: number): void;
|
|
20
20
|
controlsPosition: Transition;
|
|
21
21
|
controlsCenter: Transition;
|
|
22
22
|
init(): void;
|
package/lib/ThreeBase.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* @Last Modified by: xiaosihan
|
|
5
5
|
* @Last Modified time: 2023-03-16 14:31:32
|
|
6
6
|
*/
|
|
7
|
-
import elementResizeEvent from "element-resize-event";
|
|
8
7
|
import { round } from "lodash";
|
|
9
8
|
import { AxesHelper, EventDispatcher, GridHelper, LinearFilter, Mesh, MOUSE, NoBlending, NormalBlending, PerspectiveCamera, RGBAFormat, Scene, TOUCH, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
|
|
10
9
|
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
|
|
@@ -76,10 +75,6 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
76
75
|
for (let c of canvas)
|
|
77
76
|
c.remove();
|
|
78
77
|
div.append(this.renderer.domElement);
|
|
79
|
-
// 监听容器的尺寸的改变
|
|
80
|
-
elementResizeEvent(div, () => {
|
|
81
|
-
this.resize(div.clientWidth, div.clientHeight);
|
|
82
|
-
});
|
|
83
78
|
// 如果上下文被销毁了, 就恢复上下文
|
|
84
79
|
if (this.isRendererContextLost) {
|
|
85
80
|
this.renderer.forceContextRestore();
|
|
@@ -87,14 +82,14 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
87
82
|
await new Promise(resolve => requestAnimationFrame(resolve));
|
|
88
83
|
this.renderer.domElement.style.opacity = "1";
|
|
89
84
|
}
|
|
90
|
-
this.
|
|
85
|
+
this.setsize(div.clientWidth, div.clientHeight);
|
|
91
86
|
// 开启时时渲染
|
|
92
87
|
threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
|
|
93
88
|
threeUtils.addEventListener("requestAnimationFrame", this.renderBindThis);
|
|
94
89
|
}
|
|
95
90
|
}
|
|
96
91
|
// 修改尺寸
|
|
97
|
-
|
|
92
|
+
setsize(width, height) {
|
|
98
93
|
if (this.camera instanceof PerspectiveCamera) {
|
|
99
94
|
this.camera.aspect = width / height;
|
|
100
95
|
this.camera.updateProjectionMatrix();
|
|
@@ -229,7 +224,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
229
224
|
this.renderer.forceContextLoss();
|
|
230
225
|
// 标记上下文被销毁了
|
|
231
226
|
this.isRendererContextLost = true;
|
|
232
|
-
this.
|
|
227
|
+
this.setsize(100, 100);
|
|
233
228
|
this.renderer.domElement.style.opacity = "0";
|
|
234
229
|
}
|
|
235
230
|
// 渲染场景
|
|
@@ -241,6 +236,11 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
241
236
|
this.stopRender();
|
|
242
237
|
return;
|
|
243
238
|
}
|
|
239
|
+
//判断尺寸发生改变时重置尺寸
|
|
240
|
+
const parentNode = this.renderer.domElement.parentNode;
|
|
241
|
+
if (parentNode.clientWidth !== this.size.x || parentNode.clientHeight !== this.size.y) {
|
|
242
|
+
this.setsize(parentNode.clientWidth, parentNode.clientHeight);
|
|
243
|
+
}
|
|
244
244
|
// 分发鼠标事件
|
|
245
245
|
this.threeMouse.dispatchEvent();
|
|
246
246
|
// 在不自动渲染时, needRender=false 就跳过渲染
|
package/lib/ThreeBase.ts
CHANGED
|
@@ -92,11 +92,6 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
92
92
|
for (let c of canvas) c.remove();
|
|
93
93
|
div.append(this.renderer.domElement);
|
|
94
94
|
|
|
95
|
-
// 监听容器的尺寸的改变
|
|
96
|
-
elementResizeEvent(div, () => {
|
|
97
|
-
this.resize(div.clientWidth, div.clientHeight);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
95
|
// 如果上下文被销毁了, 就恢复上下文
|
|
101
96
|
if (this.isRendererContextLost) {
|
|
102
97
|
this.renderer.forceContextRestore();
|
|
@@ -105,7 +100,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
105
100
|
this.renderer.domElement.style.opacity = "1";
|
|
106
101
|
}
|
|
107
102
|
|
|
108
|
-
this.
|
|
103
|
+
this.setsize(div.clientWidth, div.clientHeight);
|
|
109
104
|
|
|
110
105
|
// 开启时时渲染
|
|
111
106
|
threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
|
|
@@ -114,7 +109,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
114
109
|
}
|
|
115
110
|
|
|
116
111
|
// 修改尺寸
|
|
117
|
-
|
|
112
|
+
setsize(width: number, height: number) {
|
|
118
113
|
if (this.camera instanceof PerspectiveCamera) {
|
|
119
114
|
this.camera.aspect = width / height;
|
|
120
115
|
this.camera.updateProjectionMatrix();
|
|
@@ -273,7 +268,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
273
268
|
this.renderer.forceContextLoss();
|
|
274
269
|
// 标记上下文被销毁了
|
|
275
270
|
this.isRendererContextLost = true;
|
|
276
|
-
this.
|
|
271
|
+
this.setsize(100, 100);
|
|
277
272
|
this.renderer.domElement.style.opacity = "0";
|
|
278
273
|
}
|
|
279
274
|
|
|
@@ -289,6 +284,12 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
289
284
|
return;
|
|
290
285
|
}
|
|
291
286
|
|
|
287
|
+
//判断尺寸发生改变时重置尺寸
|
|
288
|
+
const parentNode = this.renderer.domElement.parentNode as HTMLDivElement;
|
|
289
|
+
if (parentNode.clientWidth !== this.size.x || parentNode.clientHeight !== this.size.y) {
|
|
290
|
+
this.setsize(parentNode.clientWidth, parentNode.clientHeight);
|
|
291
|
+
}
|
|
292
|
+
|
|
292
293
|
// 分发鼠标事件
|
|
293
294
|
this.threeMouse.dispatchEvent();
|
|
294
295
|
|