@shijiu/jsview-vue 2.1.25 → 2.1.200

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.
Files changed (80) hide show
  1. package/package.json +1 -1
  2. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +1 -1
  3. package/utils/JsViewEngineWidget/JsvFocusHub.ts +123 -0
  4. package/utils/JsViewEngineWidget/JsvFocusManager.js +4 -3
  5. package/utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts +145 -51
  6. package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +51 -64
  7. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +62 -71
  8. package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +308 -613
  9. package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +127 -247
  10. package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +1 -0
  11. package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +36 -2
  12. package/utils/JsViewEngineWidget/WidgetCommon.ts +25 -6
  13. package/utils/JsViewPlugin/JsvAudio/{JsvAudioBrowser.vue → BrowserAudio/BrowserAudio.vue} +1 -1
  14. package/utils/JsViewPlugin/JsvAudio/index.js +1 -1
  15. package/utils/JsViewPlugin/JsvLatex/BrowserDomBuilder.js +37 -0
  16. package/utils/JsViewPlugin/JsvLatex/Color.ts +43 -0
  17. package/utils/JsViewPlugin/JsvLatex/JsvLatex.vue +159 -0
  18. package/utils/JsViewPlugin/JsvLatex/JsvLatexBridgeProxy.js +16 -0
  19. package/utils/JsViewPlugin/JsvLatex/JsvLatexBrowser.vue +59 -0
  20. package/utils/JsViewPlugin/JsvLatex/PluginLoader.js +171 -0
  21. package/utils/JsViewPlugin/JsvLatex/index.js +28 -0
  22. package/utils/JsViewPlugin/JsvLatex/mathjax-tex-svg.txt +1 -0
  23. package/utils/JsViewPlugin/JsvLatex/version.js +24 -0
  24. package/utils/JsViewPlugin/JsvLatex/version.mjs +24 -0
  25. package/utils/JsViewPlugin/index.js +2 -1
  26. package/utils/JsViewVueTools/JsvDynamicCssStyle.js +2 -52
  27. package/utils/JsViewVueTools/JsvPerformance.ts +11 -0
  28. package/utils/JsViewVueTools/JsvPreDownloader.ts +55 -11
  29. package/utils/JsViewVueTools/JsvStyleSheetsDeclarer.js +40 -0
  30. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +143 -0
  31. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts +24 -0
  32. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/Path.ts +198 -0
  33. package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +31 -0
  34. package/utils/JsViewVueTools/JsvTextureStore/Store.ts +32 -0
  35. package/utils/JsViewVueTools/JsvTextureStore/Texture.ts +38 -0
  36. package/utils/JsViewVueTools/index.js +3 -0
  37. package/utils/JsViewVueWidget/JsvEnableRenderBreak.vue +17 -0
  38. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.ts +6 -0
  39. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +144 -0
  40. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorState.ts +6 -0
  41. package/utils/JsViewVueWidget/JsvFreeMoveActor/{CallbackManager.js → CallbackManager.ts} +19 -10
  42. package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +45 -0
  43. package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +1 -1
  44. package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +124 -0
  45. package/utils/JsViewVueWidget/JsvFreeMoveActor/KeepFlags.ts +6 -0
  46. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +553 -0
  47. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +138 -0
  48. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +53 -0
  49. package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +11 -1
  50. package/utils/JsViewVueWidget/JsvHole.js +1 -1
  51. package/utils/JsViewVueWidget/JsvLine/JsvLine.vue +101 -0
  52. package/utils/JsViewVueWidget/JsvLine/LineManager.js +62 -0
  53. package/utils/JsViewVueWidget/JsvLine/index.js +3 -0
  54. package/utils/JsViewVueWidget/JsvMarquee.vue +316 -139
  55. package/utils/JsViewVueWidget/JsvMindMap/CommonType.ts +1 -0
  56. package/utils/JsViewVueWidget/JsvMindMap/Constant.ts +20 -0
  57. package/utils/JsViewVueWidget/JsvMindMap/DataTree.ts +394 -0
  58. package/utils/JsViewVueWidget/JsvMindMap/Geometry.ts +277 -0
  59. package/utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue +653 -0
  60. package/utils/JsViewVueWidget/JsvMindMap/index.js +1 -0
  61. package/utils/JsViewVueWidget/JsvMindMap/rtree.js +628 -0
  62. package/utils/JsViewVueWidget/JsvNinePatch.vue +2 -2
  63. package/utils/JsViewVueWidget/JsvPieChart.vue +124 -0
  64. package/utils/JsViewVueWidget/JsvPosterImage.vue +32 -9
  65. package/utils/JsViewVueWidget/JsvPreload/BrowserPreload.vue +135 -133
  66. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +273 -270
  67. package/utils/JsViewVueWidget/JsvSector.vue +107 -0
  68. package/utils/JsViewVueWidget/JsvTextBox.vue +14 -1
  69. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +28 -2
  70. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +122 -93
  71. package/utils/JsViewVueWidget/index.js +15 -7
  72. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.js +0 -112
  73. package/utils/JsViewVueWidget/JsvFreeMoveActor/CommonTools.js +0 -18
  74. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.js +0 -216
  75. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.js +0 -66
  76. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.js +0 -38
  77. package/utils/JsViewVueWidget/JsvFreeMoveActor/TypeDefine.js +0 -12
  78. package/utils/JsViewVueWidget/JsvTouchContainer.vue +0 -183
  79. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +0 -87
  80. /package/utils/{JsViewVueWidget → JsViewPlugin/JsvAudio/BrowserAudio}/JsvSystemAudio.vue +0 -0
@@ -0,0 +1,32 @@
1
+ import { TextureBase } from "./Texture";
2
+
3
+ class JsvTextureStore {
4
+ private textureMap: Map<String, TextureBase> = new Map();
5
+
6
+ constructor() {
7
+
8
+ }
9
+
10
+ public addToStore(storeName: String, textureRef: TextureBase) {
11
+ this.textureMap.set(storeName, textureRef);
12
+ }
13
+
14
+ public getFromStore(storeName: String): TextureBase | undefined {
15
+ return this.textureMap.get(storeName);
16
+ }
17
+
18
+ public removeFromStore(storeName: String): TextureBase | undefined {
19
+ if (this.textureMap.has(storeName)) {
20
+ let textureBaseRef = this.textureMap.get(storeName);
21
+ this.textureMap.delete(storeName);
22
+ return textureBaseRef;
23
+ } else {
24
+ console.error(`Error: name=${storeName} not in map`);
25
+ return undefined;
26
+ }
27
+ }
28
+ }
29
+
30
+ let sStore: JsvTextureStore = new JsvTextureStore();
31
+
32
+ export default sStore;
@@ -0,0 +1,38 @@
1
+ import sStore from "./Store";
2
+
3
+ export class TextureBase {
4
+ private baseName: String = 'T';
5
+ protected textureRef: any = null; // Forge.ImageTexture
6
+ public storeName: String = '';
7
+
8
+ constructor(baseName: String | null) {
9
+ if (baseName) {
10
+ this.baseName = baseName;
11
+ }
12
+ }
13
+
14
+ protected addToStore() {
15
+ this.storeName = `${this.baseName}-${this.textureRef?.GetTextureId()}`;
16
+ sStore.addToStore(this.storeName, this);
17
+ }
18
+
19
+ /**
20
+ * commit
21
+ * 完成绘制设置,出发制作目标texture
22
+ *
23
+ * @return {String} BaseName-textureId 格式的名字,用于 jsvtexturestore:// 的访问链接
24
+ */
25
+ public commit(): String {
26
+ // Should override by extends to create Forge.ImageTexture -> textureRef
27
+ return this.storeName;
28
+ }
29
+
30
+ public recycle() {
31
+ // 释放native端的texture实体
32
+ let textureRef = sStore.removeFromStore(this.storeName);
33
+ if (textureRef) {
34
+ // 释放native端的texture实体
35
+ this.textureRef?.RequestToUnload();
36
+ }
37
+ }
38
+ }
@@ -12,6 +12,7 @@ export * from "./NinePatchHelper";
12
12
  export * from "./TypeCheckAndSet";
13
13
  export * from "./JsvRefTaker.js";
14
14
  export * from "./JsvStyleClass.js";
15
+ export * from "./JsvStyleSheetsDeclarer.js";
15
16
  export * from "./DebugContentShellJBridge.js";
16
17
  export * from "./DebugTool.js";
17
18
  export * from "./JsvImpactTracer.js";
@@ -19,3 +20,5 @@ export * from "./JsvTextTools.js";
19
20
  export * from "./JsvPreDownloader.ts"
20
21
  export { default as DefaultKeyCodeMap } from "./DefaultKeyMap.js";
21
22
  export * from "./JsvDemoTester.js"
23
+ export * from "./JsvPerformance.ts"
24
+ export * from "./JsvTextureStore/JsvTextureStore.ts"
@@ -0,0 +1,17 @@
1
+ <script setup>
2
+ import { RENDER_ITEM_BREAK_KEY } from "../JsViewEngineWidget/WidgetCommon";
3
+ import { shallowRef } from "vue";
4
+
5
+ const itemMounted = shallowRef(false);
6
+ const itemRef = (value) => {
7
+ itemMounted.value = !!value;
8
+ };
9
+ </script>
10
+ <template>
11
+ <div :key="RENDER_ITEM_BREAK_KEY" :ref="itemRef">
12
+ <slot name="renderItem" :key="RENDER_ITEM_BREAK_KEY"></slot>
13
+ </div>
14
+ <div v-if="!itemMounted">
15
+ <slot name="placeHolder"></slot>
16
+ </div>
17
+ </template>
@@ -0,0 +1,6 @@
1
+
2
+
3
+ export default class ActionRefObject {
4
+ public token: number;
5
+ public used: boolean = false;
6
+ }
@@ -0,0 +1,144 @@
1
+ /*
2
+ * @Author: donglin.lu@qcast.cn
3
+ * @Date: 2023-07-05 15:41:00
4
+ * @LastEditors: donglin.lu@qcast.cn
5
+ * @Description: file content
6
+ */
7
+ import ConditionPackBuilder from "./SetCondition";
8
+ import ActionPackBuilder from "./SetAction"
9
+ import StatePackBuilder from "./SetState";
10
+ import CallbackManager from "./CallbackManager";
11
+ import ActionRefObject from "./ActionRefObject";
12
+ import { RunFreeMoveCmdPacks, FreeMoveAnimClass } from "./ForgeTypeDefine"
13
+
14
+
15
+ class ActorControl {
16
+ private _BindView: any;
17
+ private _BindAnim: any;
18
+ private _Callbacks: CallbackManager;
19
+
20
+ private _ConditionPackBuilder: ConditionPackBuilder;
21
+ private _ActionPackBuilder: ActionPackBuilder;
22
+ private _StatePackBuilder: StatePackBuilder;
23
+
24
+ constructor() {
25
+ this._BindView = null;
26
+ this._BindAnim = null;
27
+ this._Callbacks = new CallbackManager();
28
+ this._ConditionPackBuilder = new ConditionPackBuilder(this._Callbacks);
29
+ this._ActionPackBuilder = new ActionPackBuilder(this._Callbacks);
30
+ this._StatePackBuilder = new StatePackBuilder();
31
+ }
32
+
33
+ bindForgeView(bindView: any, instantActive: boolean) {
34
+ this._BindView = bindView;
35
+
36
+ if (instantActive) {
37
+ this._EnsureAnim();
38
+ }
39
+ }
40
+
41
+ /**
42
+ * run 执行编排好的intent集合
43
+ *
44
+ * @param {Array} cmdPackList 内容来自 Condition(), State(), Action() 这些工厂类创建的Command pack
45
+ */
46
+ run(cmdPackList: Array<Object>) {
47
+ if ((window as any).JsView) {
48
+ this._WrappedRun(cmdPackList);
49
+ } else {
50
+ // Browser场景DomProxy需要onReady调用
51
+ let that = this;
52
+ this._BindView.RegisterOnProxyReady(() => {
53
+ that._WrappedRun(cmdPackList);
54
+ })
55
+ }
56
+ }
57
+
58
+ _WrappedRun(cmdPackList: Array<Object>) {
59
+ this._EnsureAnim();
60
+
61
+ if (!(cmdPackList instanceof Array)) {
62
+ console.error("params error");
63
+ return;
64
+ }
65
+
66
+ RunFreeMoveCmdPacks(this._BindView, cmdPackList);
67
+ }
68
+
69
+ /**
70
+ * Condition
71
+ * 获取创建 ConditionPack 的工厂对象
72
+ * ConditionPack对应支持 .then(cmdPackList), 可传入同 Run 的处理队列
73
+ * 可用方法见 ./SetCondition.js
74
+ * @param {int} group 可选参数,默认为0, 有效值为0~3, 对应默认组, 1组, 2组, 3组, 便于remove时,按组进行清理
75
+ * @param {boolean} multiTimes 可选参数,默认为false, 是否要多次执行, 若为单次,则执行后condition作废
76
+ * @param {string} specName 可选参数,默认null, 命名condition, 用于指定名字进行active/deactive动作的场景
77
+ * @return {ConditionPackBuilder} ConditionPack 的工厂对象
78
+ */
79
+ condition(
80
+ group: number = 0,
81
+ multiTimes: boolean = false,
82
+ specName: string | null = null
83
+ ): ConditionPackBuilder {
84
+ // 注意: 不支持获取condition后,多次复制
85
+ this._ConditionPackBuilder.updateCommandInfo(group, multiTimes, specName);
86
+ return this._ConditionPackBuilder;
87
+ }
88
+
89
+ /**
90
+ * Action
91
+ * 获取创建 ActionPack 的工厂对象
92
+ * 注意: ActionPack 是指会改变 speed 或 accelerate 并自动生成子condition的指令,
93
+ * 每个新的Action会覆盖掉前一次的Action设置,包括其关联的condition,
94
+ * 以及上一个action中的回调,以及上一个action中规划中的ActionEvent
95
+ * 可用方法见 ./SetAction.js
96
+ *
97
+ * @param {int} xySpeedKeeps xy轴上的速度是否保持(与新Action不冲突的才会被保留),
98
+ * x轴保持为1, y轴保持为2,可"与或"让两个轴都保持
99
+ * @param {int} xyAccKeeps xy轴上的加速度是否保持(与新Action不冲突的才会被保留),
100
+ * x轴保持为1, y轴保持为2,可"与或"让两个轴都保持
101
+ * @param {Object} actRef 一个Object, 传入后会填入对此action的ref,用于后续制作
102
+ * @return {ActionPackBuilder} ActionPack 的工厂对象
103
+ */
104
+ action(
105
+ xySpeedKeeps: number = 0,
106
+ xyAccKeeps: number = 0,
107
+ actRef: ActionRefObject | null = null
108
+ ): ActionPackBuilder {
109
+ this._ActionPackBuilder.updateCommonInfo(xySpeedKeeps, xyAccKeeps, actRef);
110
+ return this._ActionPackBuilder;
111
+ }
112
+
113
+ /**
114
+ * State
115
+ * 获取创建 StatePack 的工厂对象
116
+ * 在下一帧运行前的设置值,例如清理condition, 或者在下一帧运动的前调整启动运动的位置
117
+ * 可用方法见 ./SetState.js
118
+ * @return {StatePackBuilder} StatePack 的工厂对象
119
+ */
120
+ state(): StatePackBuilder {
121
+ return this._StatePackBuilder;
122
+ }
123
+
124
+ _OnEchoEvent(retJson: string) {
125
+ // 遇到layout后仍然会因为新broadcast有动作时,一帧中可能会有多次回调
126
+ let retJsonObject: Object = JSON.parse(retJson);
127
+ let actorState = retJsonObject;
128
+ let echoTokens = retJsonObject["eTkns"];
129
+ if (echoTokens) {
130
+ for (let etoken of echoTokens) {
131
+ this._Callbacks.invokeCallback(etoken, actorState);
132
+ }
133
+ }
134
+ }
135
+
136
+ _EnsureAnim() {
137
+ if (!this._BindAnim) {
138
+ this._BindAnim = new FreeMoveAnimClass(this._OnEchoEvent.bind(this));
139
+ this._BindView.StartAnimation(this._BindAnim);
140
+ }
141
+ }
142
+ }
143
+
144
+ export default ActorControl;
@@ -0,0 +1,6 @@
1
+ export default class ActorState {
2
+ public xPos: number;
3
+ public yPos: number;
4
+ public xSpd: number;
5
+ public ySpd: number;
6
+ }
@@ -5,29 +5,38 @@
5
5
  * @Description: file content
6
6
  */
7
7
 
8
- import { StateCmdBuilder } from "./CommonTools.js"
8
+ import { StateCmdBuilder } from "./ForgeTypeDefine"
9
+
10
+ class CallbackInfo {
11
+ public funcRef: Function; // 回调函数
12
+ public times: number; // 回调的次数
13
+ public once: boolean; // 是否单次回调就销毁
14
+ }
9
15
 
10
16
  class CallbackManager {
17
+ private _CallbackMap: Map<string, CallbackInfo>;
18
+ private _IdGen: number;
19
+
11
20
  constructor() {
12
21
  this._CallbackMap = new Map();
13
22
  this._IdGen = 1;
14
23
  }
15
24
 
16
- addCallback(func, callMulti) {
25
+ private addCallback(func: Function, callMulti: boolean): string {
17
26
  let id = "" + this._IdGen++;
18
27
  this._CallbackMap.set(id, {
19
- f: func, // 回调函数
28
+ funcRef: func, // 回调函数
20
29
  times: 0, // 回调的次数
21
30
  once: !callMulti, // 是否单次回调就销毁
22
31
  })
23
32
  return id;
24
33
  }
25
34
 
26
- clearCallback() {
35
+ public clearCallback() {
27
36
  this._CallbackMap = new Map();
28
37
  }
29
38
 
30
- expiredIds(ids) {
39
+ public expiredIds(ids: Array<string>) {
31
40
  // 删除已经无效的ids
32
41
  if (ids) {
33
42
  for (let key of this._CallbackMap.keys()) {
@@ -40,16 +49,16 @@ class CallbackManager {
40
49
  }
41
50
  }
42
51
 
43
- invokeCallback(id, actorState) {
44
- if (this._CallbackMap.has(id)) {
45
- let callbackObj = this._CallbackMap.get(id);
52
+ public invokeCallback(id: string, actorState: Object) {
53
+ let callbackObj = this._CallbackMap.get(id);
54
+ if (callbackObj) {
46
55
  if (callbackObj.once) {
47
56
  this._CallbackMap.delete(id);
48
57
  } else {
49
58
  callbackObj.times++;
50
59
  }
51
60
  try {
52
- callbackObj.f?.(actorState);
61
+ callbackObj.funcRef?.(actorState);
53
62
  } catch (e) {
54
63
  // 规避 callback 执行出错导致流程执行不下去
55
64
  console.error("Error: callback error", e);
@@ -57,7 +66,7 @@ class CallbackManager {
57
66
  }
58
67
  }
59
68
 
60
- buildCallbackCmd(func) {
69
+ public buildCallbackCmd(func: Function): Object {
61
70
  let funcIdStr = this.addCallback(func, true);
62
71
  return StateCmdBuilder.FireEcho(funcIdStr); // 以funcIdStr 作为echoToken
63
72
  }
@@ -0,0 +1,45 @@
1
+ /*
2
+ * @Author: donglin.lu@qcast.cn
3
+ * @Date: 2023-07-18 11:14:00
4
+ * @LastEditors: donglin.lu@qcast.cn
5
+ * @Description: file content
6
+ */
7
+
8
+ import { Forge } from "@shijiu/jsview/dom/jsv-forge-define.mjs";
9
+
10
+ // 此文件声明来自engine-js的api和类型声明
11
+
12
+ // ActEvent
13
+ const forgeEvtTypeRef = Forge.FreeMoveActEvtType;
14
+ const ActEventDefine = {
15
+ ActFinish: forgeEvtTypeRef.ActEvent_ActFinish,
16
+ SpeedRevertX: forgeEvtTypeRef.ActEvent_Speed_X_Revert,
17
+ SpeedRevertY: forgeEvtTypeRef.ActEvent_Speed_Y_Revert,
18
+ ActReject: forgeEvtTypeRef.ActEvent_ActReject, // 当动作不可能完成,会回调此事件
19
+ }
20
+
21
+ // GroupType
22
+ const GroupType_ActionAssoc: number = Forge.FreeMoveExternType?.GroupType_ActionAssoc;
23
+
24
+ // Builders
25
+ const ConditionSetBuilder: any = Forge.FreeMoveConditionSet;
26
+ const StateCmdBuilder: any = Forge.FreeMoveStateBuilder;
27
+ const ActionCmdBuilder: any = Forge.FreeMoveActionBuilder;
28
+ const CmdPackBuilder: any = Forge.FreeMoveCmdPackBuilder;
29
+
30
+ // FreeMoveAnimation class
31
+ const FreeMoveAnimClass: any = Forge.FreeMoveAnimation;
32
+
33
+ // Run function
34
+ const RunFreeMoveCmdPacks: Function = Forge.AnimFireCommand.RunFreeMoveCmdPacks;
35
+
36
+ export {
37
+ GroupType_ActionAssoc,
38
+ ActEventDefine,
39
+ ConditionSetBuilder,
40
+ ActionCmdBuilder,
41
+ StateCmdBuilder,
42
+ CmdPackBuilder,
43
+ FreeMoveAnimClass,
44
+ RunFreeMoveCmdPacks
45
+ }
@@ -13,7 +13,7 @@
13
13
  *
14
14
  -->
15
15
  <script setup>
16
- import ActControl from "./ActorControl.js";
16
+ import ActControl from "./ActorControl.ts";
17
17
  import { shallowRef, onMounted } from "vue";
18
18
 
19
19
  const props = defineProps({
@@ -0,0 +1,124 @@
1
+ <!--
2
+ * 【模块 export 内容】
3
+ * JsvEnvBlocker: 触发FreeMoveAnimation的 blockerCondition 的全屏碰撞体
4
+ * props说明:
5
+ * top, left, width, height(Number): 关联的div的定位信息
6
+ * topGID(Number): 上边缘响应监听的组id(用于blockerCondition的组参数), 0或者undefined代表不激活这条边的测试
7
+ * bottomGID(Number): 下边缘响应监听的组id
8
+ * leftGID(Number): 左边缘响应监听的组id
9
+ * rightGID(Number): 右边缘响应监听的组id
10
+ *
11
+ -->
12
+
13
+ <template>
14
+ <div
15
+ ref="viewRef"
16
+ :style="{
17
+ top: props.top,
18
+ left: props.left,
19
+ width: props.width,
20
+ height: props.height,
21
+ }"
22
+ >
23
+ <slot />
24
+ </div>
25
+ </template>
26
+
27
+ <script setup>
28
+ import {
29
+ shallowRef,
30
+ toRaw,
31
+ watchEffect,
32
+ onMounted,
33
+ onActivated,
34
+ onDeactivated,
35
+ } from "vue";
36
+ import { Forge } from "@shijiu/jsview/dom/jsv-forge-define";
37
+
38
+ const props = defineProps({
39
+ // (支持reactive)位置信息
40
+ left: {
41
+ type: Number,
42
+ default: 0,
43
+ },
44
+ top: {
45
+ type: Number,
46
+ default: 0,
47
+ },
48
+ width: {
49
+ type: Number,
50
+ require: true,
51
+ },
52
+ height: {
53
+ type: Number,
54
+ require: true,
55
+ },
56
+
57
+ // 四边关联的Group id, 和 blockerCondition的参数对应,若不设置或者为0则此边不触发condition
58
+ topGID: {
59
+ type: Number,
60
+ },
61
+ bottomGID: {
62
+ type: Number,
63
+ },
64
+ leftGID: {
65
+ type: Number,
66
+ },
67
+ rightGID: {
68
+ type: Number,
69
+ },
70
+
71
+ // (支持reactive)是否激活,仍然在渲染树时,非必须可以通过enable关闭以节省CPU开销
72
+ enable: {
73
+ type: Boolean,
74
+ default: true,
75
+ },
76
+ });
77
+
78
+ // 内部状态变量
79
+ const viewRef = shallowRef(null);
80
+ const viewMounted = reactive({ status: false });
81
+ let sensorRef = null;
82
+
83
+ // 变更四边检测开关和关联id
84
+ watchEffect(() => {
85
+ if (viewMounted.status) {
86
+ if (!isNan(props.TopGID)) {
87
+ sensorRef.ResetTopGID(props.TopGID);
88
+ }
89
+ if (!isNan(props.bottomGID)) {
90
+ sensorRef.ResetBottomGID(props.bottomGID);
91
+ }
92
+ if (!isNan(props.leftGID)) {
93
+ sensorRef.ResetLeftGID(props.leftGID);
94
+ }
95
+ if (!isNan(props.rightGID)) {
96
+ sensorRef.ResetRightGID(props.rightGID);
97
+ }
98
+ }
99
+ });
100
+
101
+ // 变更enable状态
102
+ watchEffect(() => {
103
+ if (viewMounted.status) {
104
+ sensorRef.Enable(props.enable);
105
+ }
106
+ });
107
+
108
+ onMounted(() => {
109
+ console.log("JsvEnvBlocker: on mounted");
110
+
111
+ sensorRef = new Forge.EnvBlockerSensor(
112
+ toRaw(viewRef.value).jsvGetProxyView()
113
+ );
114
+ viewMounted.status = true;
115
+ });
116
+
117
+ onActivated(() => {
118
+ sensorRef.Enable(props.enable);
119
+ });
120
+
121
+ onDeactivated(() => {
122
+ sensorRef.Enable(false);
123
+ });
124
+ </script>
@@ -0,0 +1,6 @@
1
+ export default {
2
+ None: 0,
3
+ X: 1,
4
+ Y: 2,
5
+ XY: 3 /* 1 & 2 位运算 */
6
+ }