three-base 1.0.73 → 1.0.75

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.
@@ -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
- resize(width: number, height: number): void;
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.resize(div.clientWidth, div.clientHeight);
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
- resize(width, height) {
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.resize(100, 100);
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.resize(div.clientWidth, div.clientHeight);
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
- resize(width: number, height: number) {
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.resize(100, 100);
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
 
package/lib/threeUtils.js CHANGED
@@ -46,10 +46,8 @@ class ThreeUtils extends EventDispatcher {
46
46
  this._keepZoomDoms = this._keepZoomDoms.filter(l => this.inDocument(l.dom));
47
47
  //2.设置dom的缩放值样式
48
48
  this._keepZoomDoms.map((item, i) => {
49
- let parentRact = window.getComputedStyle(item.dom.parentNode);
50
- let width = parseInt(parentRact.width);
51
- let height = parseInt(parentRact.height);
52
- let scale = Math.min(width / item.width, height / item.height);
49
+ let parentDom = item.dom.parentNode;
50
+ let scale = Math.min(parentDom.clientWidth / item.width, parentDom.clientHeight / item.height);
53
51
  Object.assign(item.dom.style, {
54
52
  position: "absolute",
55
53
  top: "50%",
@@ -70,6 +68,7 @@ class ThreeUtils extends EventDispatcher {
70
68
  // 把配置加入到列表中
71
69
  this._keepZoomDoms.push({ dom, width, height });
72
70
  dom.dataset.a = "这个元素缩放比例由 threeUtils.keepZoom 方法设置";
71
+ this._computerDomZoom();
73
72
  }
74
73
  }
75
74
  workList = [];
package/lib/threeUtils.ts CHANGED
@@ -63,10 +63,8 @@ class ThreeUtils extends EventDispatcher {
63
63
 
64
64
  //2.设置dom的缩放值样式
65
65
  this._keepZoomDoms.map((item, i) => {
66
- let parentRact = window.getComputedStyle(item.dom.parentNode as Element);
67
- let width = parseInt(parentRact.width);
68
- let height = parseInt(parentRact.height);
69
- let scale = Math.min(width / item.width, height / item.height);
66
+ let parentDom = item.dom.parentNode as HTMLDivElement;
67
+ let scale = Math.min(parentDom.clientWidth / item.width, parentDom.clientHeight / item.height);
70
68
  Object.assign(item.dom.style, {
71
69
  position: "absolute",
72
70
  top: "50%",
@@ -91,6 +89,8 @@ class ThreeUtils extends EventDispatcher {
91
89
  this._keepZoomDoms.push({ dom, width, height });
92
90
 
93
91
  dom.dataset.a = "这个元素缩放比例由 threeUtils.keepZoom 方法设置";
92
+
93
+ this._computerDomZoom();
94
94
  }
95
95
  }
96
96
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-base",
3
- "version": "1.0.73",
3
+ "version": "1.0.75",
4
4
  "description": "three 3d three-base",
5
5
  "repository": {
6
6
  "type": "git",