@shijiu/jsview-vue 2.2.128 → 2.2.201

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 (91) hide show
  1. package/bin/browser/BrowserApic.vue.mjs +2 -2
  2. package/bin/browser/BrowserApic2.vue.mjs +2 -2
  3. package/bin/browser/BrowserApicLib.mjs +8 -2
  4. package/bin/browser/BrowserJsvFragShaderView.vue.mjs +63 -0
  5. package/bin/jsview-vue.mjs +1604 -423
  6. package/bin/types/JsViewEngineWidget/JsvFocus/JsvFocusManager.d.ts +8 -6
  7. package/bin/types/JsViewEngineWidget/MetroWidget/Dispatcher.d.ts +10 -12
  8. package/bin/types/JsViewEngineWidget/MetroWidget/ListWidget.vue.d.ts +3 -3
  9. package/bin/types/JsViewEngineWidget/MetroWidget/MetroWidget.vue.d.ts +3 -3
  10. package/bin/types/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.d.ts +2 -2
  11. package/bin/types/JsViewEngineWidget/MetroWidget/RenderItem.d.ts +3 -0
  12. package/bin/types/JsViewEngineWidget/TemplateParser/ListMetroTemplate.d.ts +1 -0
  13. package/bin/types/JsViewEngineWidget/TemplateParser/TemplateItemAdder.d.ts +1 -1
  14. package/bin/types/JsViewEngineWidget/index.d.ts +10 -1
  15. package/bin/types/JsViewVueTools/ConstSymbol.d.ts +2 -2
  16. package/bin/types/JsViewVueTools/JsvFederationTools.d.ts +16 -0
  17. package/bin/types/JsViewVueTools/JsvPerformance.d.ts +5 -0
  18. package/bin/types/JsViewVueTools/JsvPreDownloader.d.ts +33 -0
  19. package/bin/types/JsViewVueTools/JsvTextureStore/JsvTextureStore.d.ts +45 -1
  20. package/bin/types/JsViewVueTools/index.d.ts +19 -11
  21. package/bin/types/JsViewVueWidget/JsvApic/JsvApic/BrowserApic.vue.d.ts +1 -1
  22. package/bin/types/JsViewVueWidget/JsvApic/JsvApic/JsvApic.vue.d.ts +1 -1
  23. package/bin/types/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue.d.ts +1 -1
  24. package/bin/types/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue.d.ts +1 -1
  25. package/bin/types/JsViewVueWidget/JsvApic/JsvBrowserApicLib/Viewer.d.ts +2 -1
  26. package/bin/types/JsViewVueWidget/JsvClipDiv/JsvClipDiv.vue.d.ts +70 -0
  27. package/bin/types/JsViewVueWidget/JsvClipDiv/index.d.ts +1 -0
  28. package/bin/types/JsViewVueWidget/JsvDriftScope/JsvDriftScope.vue.d.ts +104 -0
  29. package/bin/types/JsViewVueWidget/JsvDriftScope/index.d.ts +1 -0
  30. package/bin/types/JsViewVueWidget/JsvFragShaderView/BrowserJsvFragShaderView.vue.d.ts +13 -0
  31. package/bin/types/JsViewVueWidget/JsvFragShaderView/JsvFragShaderView.vue.d.ts +13 -0
  32. package/bin/types/JsViewVueWidget/JsvFragShaderView/index.d.ts +2 -0
  33. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ActorControl.d.ts +43 -17
  34. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetAction.d.ts +5 -5
  35. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetCondition.d.ts +4 -2
  36. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetState.d.ts +7 -7
  37. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SyncLinkManager.d.ts +18 -0
  38. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/index.d.ts +2 -0
  39. package/bin/types/JsViewVueWidget/JsvNinePatch.vue.d.ts +1 -0
  40. package/bin/types/JsViewVueWidget/JsvScrollBox/JsvScrollBox.vue.d.ts +61 -1
  41. package/bin/types/JsViewVueWidget/JsvScrollBox/JsvScrollFollow.vue.d.ts +153 -0
  42. package/bin/types/JsViewVueWidget/JsvScrollBox/ScrollInnerSymbol.d.ts +4 -0
  43. package/bin/types/JsViewVueWidget/JsvScrollBox/ScrollSymbol.d.ts +9 -4
  44. package/bin/types/JsViewVueWidget/JsvScrollBox/index.d.ts +2 -0
  45. package/bin/types/JsViewVueWidget/index.d.ts +3 -0
  46. package/package.json +1 -1
  47. package/tools/config/rollup.config.mjs +1 -0
  48. package/utils/JsViewEngineWidget/JsvFocus/{JsvFocusManager.js → JsvFocusManager.ts} +12 -12
  49. package/utils/JsViewEngineWidget/MetroWidget/Dispatcher.ts +20 -0
  50. package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +27 -10
  51. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +42 -10
  52. package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +320 -203
  53. package/utils/JsViewEngineWidget/MetroWidget/RenderItem.ts +11 -0
  54. package/utils/JsViewEngineWidget/MetroWidget/TaskManager.ts +8 -0
  55. package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +20 -10
  56. package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +18 -0
  57. package/utils/JsViewEngineWidget/TemplateParser/TemplateItemAdder.ts +7 -0
  58. package/utils/JsViewEngineWidget/{index.js → index.ts} +1 -1
  59. package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +21 -2
  60. package/utils/JsViewVueTools/ConstSymbol.ts +2 -2
  61. package/utils/JsViewVueTools/JsvPreDownloader.ts +3 -3
  62. package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +1 -1
  63. package/utils/JsViewVueTools/index.js +19 -19
  64. package/utils/JsViewVueWidget/JsvApic/JsvApic/BrowserApic.vue +2 -2
  65. package/utils/JsViewVueWidget/JsvApic/JsvApic/JsvApic.vue +3 -3
  66. package/utils/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue +2 -2
  67. package/utils/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue +3 -3
  68. package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/Viewer.js +8 -3
  69. package/utils/JsViewVueWidget/JsvClipDiv/JsvClipDiv.vue +42 -0
  70. package/utils/JsViewVueWidget/JsvClipDiv/index.ts +1 -0
  71. package/utils/JsViewVueWidget/JsvConnectLine/JsvConnectLine.vue +5 -1
  72. package/utils/JsViewVueWidget/JsvDriftScope/JsvDriftScope.vue +82 -0
  73. package/utils/JsViewVueWidget/JsvDriftScope/index.ts +1 -0
  74. package/utils/JsViewVueWidget/JsvFragShaderView/BrowserJsvFragShaderView.vue +48 -0
  75. package/utils/JsViewVueWidget/JsvFragShaderView/JsvFragShaderView.vue +145 -0
  76. package/utils/JsViewVueWidget/JsvFragShaderView/index.js +18 -0
  77. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +142 -63
  78. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +15 -6
  79. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +19 -7
  80. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +15 -11
  81. package/utils/JsViewVueWidget/JsvFreeMoveActor/SyncLinkManager.ts +120 -0
  82. package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +5 -1
  83. package/utils/JsViewVueWidget/JsvNinePatch.vue +13 -1
  84. package/utils/JsViewVueWidget/JsvScrollBox/JsvScrollBox.vue +257 -48
  85. package/utils/JsViewVueWidget/JsvScrollBox/JsvScrollFollow.vue +468 -0
  86. package/utils/JsViewVueWidget/JsvScrollBox/ScrollInnerSymbol.ts +9 -0
  87. package/utils/JsViewVueWidget/JsvScrollBox/ScrollSymbol.ts +13 -4
  88. package/utils/JsViewVueWidget/JsvScrollBox/index.ts +3 -0
  89. package/utils/JsViewVueWidget/index.js +3 -0
  90. package/utils/JsViewEngineWidget/MetroWidget/Dispatcher.js +0 -19
  91. package/utils/JsViewVueWidget/JsvScrollBox/index.js +0 -2
@@ -0,0 +1,468 @@
1
+ <!--
2
+ * 【模块 export 内容】
3
+ * JsvScrollFollow:Vue高阶组件,响应并同步JsvScrollBox的移动的div/ninePatch特殊类型的进度展示组件
4
+ * props说明:
5
+ * proxyType {ScorllBoxStyle.*} (必填,非响应式!!) 下面的几个类型中选一种:
6
+ SizeDiv: 一个普通的div, 进度信息影响div的width/height, proxyProps里面主要设置backgroundColor
7
+ SizeClip: 对子内容进行剪切的div, 此类型不支持proxyProps的设置, 只有varWidth和varHeight能为变量
8
+ (本组件会额外赋予overflow:hidden, 以及剪切区域自由移动的data-jsv-vw-mask-separate)
9
+ JsvNinePatch: JsvNinePatch组件类型
10
+ * proxyProps {Object} (选填,响应式) 传给代理类型的props,例如JsvNinePatch时,JsvNinePatch的props设置
11
+ * varLeft/varTop/varWidth/varHeight(number|Object):
12
+ (选填, 但至少有一个值, 响应式) 当为number时为固定值,
13
+ TODO: 响应式改动后立即同步进度处理还没完成
14
+ 为Object时必须是{start:number, end:number}格式
15
+ 其中start对应 JsvScrollBox 进度起始值时的位置,end对应 JsvScrollBox 进度终点值的位置
16
+ 特别注意: left/Top, width/height分别是两种变换,不能这两组不能同时都为变值
17
+ * syncWith {String} (必填,响应式) 进度联动组件来源,内容为联动来源的linkName
18
+ * syncType {ScrollBoxStyle.*}
19
+ * (选填,响应式) 决定syncWith的联动模式,当syncWith设置后才能生效, 默认为 SyncForward
20
+ * SyncForward(默认值): 同进同退, mySelf = sourcePercent
21
+ * SyncReverse: 进退反向, mySelf = (1 - sourcePercent)
22
+ *
23
+ * template说明:
24
+ 当proxyType为clipDiv可以放置<template>子节点,所有子节点不做改变直接作为本节点的子,以slot形式
25
+ * expose函数说明:
26
+ * setSensor(sensitivity:number, callback:Function<percent:number, x:number, y:number>) 设置运动后触发的回调
27
+ * sensitivity为回调敏感度, 每移动多少像素进行回调,适当放大(推荐10以上)可以极大减小对js回调过多引起的性能降低
28
+ *
29
+ -->
30
+
31
+ <template>
32
+ <div v-if="cProxyType == ScrollBoxStyle.SizeClip" v-bind="rSizeClipOutProps">
33
+ <div ref="rSliderViewRef" v-bind="rSizeClipInnerProps">
34
+ <div data-jsv-vw-mask-dock="true">
35
+ <slot />
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <div
40
+ v-else-if="cProxyType == ScrollBoxStyle.SizeDiv"
41
+ ref="rSliderViewRef"
42
+ v-bind="rSizeDivProps"
43
+ />
44
+ <JsvNinePatch
45
+ :onDivRef="onNinePatchRef"
46
+ v-else-if="cProxyType == ScrollBoxStyle.JsvNinePatch"
47
+ v-bind="rNinePatchMergedProps"
48
+ />
49
+ </template>
50
+
51
+ <script setup lang="ts">
52
+ import {
53
+ shallowRef,
54
+ watchEffect,
55
+ onMounted,
56
+ onUnmounted,
57
+ defineExpose,
58
+ withDefaults,
59
+ defineProps,
60
+ } from "vue";
61
+ import ActControl from "../JsvFreeMoveActor/ActorControl";
62
+ import { ScrollBoxStyle } from "./ScrollSymbol";
63
+ import { GetSyncLinkManager } from "../JsvFreeMoveActor/SyncLinkManager";
64
+ import { NexusNode } from "../JsvFreeMoveActor/NexusNode";
65
+ import { ScrollInnerStyle } from "./ScrollInnerSymbol";
66
+ import JsvNinePatch from "../JsvNinePatch.vue";
67
+
68
+ const rProps = withDefaults(
69
+ defineProps<{
70
+ // 所代理节点的类型
71
+ // 取值范围: ScrollBoxStyle.SizeClip, ScrollBoxStyle.JsvNinePatch, ScrollBoxStyle.SizeDiv
72
+ proxyType: symbol;
73
+
74
+ // 传给所代理节点的props
75
+ proxyProps?: Object;
76
+
77
+ // left的值或者跟随scroll进度信息的变化范围
78
+ varLeft?: number | object;
79
+
80
+ // top的值或者跟随scroll进度信息的变化范围
81
+ varTop?: number | object;
82
+
83
+ // width的值或者跟随scroll进度信息的变化范围
84
+ varWidth?: number | object;
85
+
86
+ // height的值或者跟随scroll进度信息的变化范围
87
+ varHeight?: number | object;
88
+
89
+ // 进度同步源的linkName
90
+ syncWith: string;
91
+
92
+ // 进度同步的模式(同向还是反向)
93
+ // 取值范围: ScrollBoxStyle.SyncForward, ScrollBoxStyle.SyncReverse
94
+ syncType?: symbol;
95
+ }>(),
96
+ {
97
+ varMode: ScrollBoxStyle.Position,
98
+ varLeft: 0,
99
+ varTop: 0,
100
+ varWidth: 0,
101
+ varHeight: 0,
102
+ syncType: ScrollBoxStyle.SyncForward,
103
+ }
104
+ );
105
+
106
+ /** 本地类型定义 **/
107
+ interface PosSizeType {
108
+ start: number;
109
+ end: number;
110
+ }
111
+
112
+ /** 本地常量 **/
113
+ const cProxyType = rProps.proxyType;
114
+
115
+ // SizeClip和JsvNinePatch都是size调整模式
116
+ // TODO: 其他模式可能会有Position模式,后续再补充
117
+ const cVarMode = ScrollBoxStyle.Size;
118
+
119
+ const cSyncLinkManager = GetSyncLinkManager();
120
+ const cSliderActor = new ActControl();
121
+
122
+ // Actor condition group id(1~9可任意用)
123
+ const cSensorConditionGroup = 1;
124
+ const cLinkConditionGroup = 2;
125
+
126
+ /** 本地非响应式变量 **/
127
+ let vSyncWithNameCache: String | null = null; // 当前关联的SyncLinkSource的名称
128
+ let vSyncTypeCache: Symbol = ScrollBoxStyle.SyncForward;
129
+ let vWaitMasterLinkSourceReady: Promise<void> | null = null;
130
+ let vSyncLinkNexusNode: NexusNode | null = null;
131
+ let vTargetViewReady = false;
132
+ let vCurrentPercent: number = 0;
133
+
134
+ // 设置同步区域
135
+ let vMainDivTop: PosSizeType = {
136
+ start: NaN,
137
+ end: NaN,
138
+ };
139
+ let vMainDivLeft: PosSizeType = {
140
+ start: NaN,
141
+ end: NaN,
142
+ };
143
+ let vMainDivWidth: PosSizeType = {
144
+ start: NaN,
145
+ end: NaN,
146
+ };
147
+ let vMainDivHeight: PosSizeType = {
148
+ start: NaN,
149
+ end: NaN,
150
+ };
151
+
152
+ /** 本地响应式变量 **/
153
+ let rSliderViewRef = shallowRef(null);
154
+ let rSizeClipOutProps: any = shallowRef(null);
155
+ let rSizeClipInnerProps: any = shallowRef(null);
156
+ let rNinePatchMergedProps: any = shallowRef(null);
157
+ let rSizeDivProps: any = shallowRef(null);
158
+
159
+ function resetPosSizeInfo(
160
+ source: number | Object,
161
+ varRef: PosSizeType,
162
+ allowVar: boolean
163
+ ): boolean {
164
+ let tmpVal = { start: 0, end: 0 };
165
+
166
+ if (typeof source == "number") {
167
+ tmpVal.start = source;
168
+ tmpVal.end = source;
169
+ } else {
170
+ tmpVal.start = (source as any).start ? (source as any).start : 0;
171
+ tmpVal.end = (source as any).end ? (source as any).end : 0;
172
+ }
173
+
174
+ if (tmpVal.start != varRef.start || tmpVal.end != varRef.start) {
175
+ varRef.start = tmpVal.start;
176
+ varRef.end = tmpVal.end;
177
+ if (varRef.start != varRef.end && allowVar) {
178
+ if (!allowVar) {
179
+ return false;
180
+ }
181
+ }
182
+ return true;
183
+ } else {
184
+ return false;
185
+ }
186
+ }
187
+
188
+ // rProps变化的watchEffect
189
+ watchEffect(() => {
190
+ // 其余属性变化
191
+ let reactChangedMerged: boolean = false;
192
+ {
193
+ let changed: boolean = false;
194
+ changed = resetPosSizeInfo(
195
+ rProps.varTop,
196
+ vMainDivTop,
197
+ cVarMode == ScrollBoxStyle.Position
198
+ );
199
+ reactChangedMerged ||= changed;
200
+ changed = resetPosSizeInfo(
201
+ rProps.varLeft,
202
+ vMainDivLeft,
203
+ cVarMode == ScrollBoxStyle.Position
204
+ );
205
+ reactChangedMerged ||= changed;
206
+ changed = resetPosSizeInfo(
207
+ rProps.varWidth,
208
+ vMainDivWidth,
209
+ cVarMode == ScrollBoxStyle.Size
210
+ );
211
+ reactChangedMerged ||= changed;
212
+ changed = resetPosSizeInfo(
213
+ rProps.varHeight,
214
+ vMainDivHeight,
215
+ cVarMode == ScrollBoxStyle.Size
216
+ );
217
+ reactChangedMerged ||= changed;
218
+ }
219
+
220
+ if (reactChangedMerged) {
221
+ rebuildAckSync();
222
+ }
223
+
224
+ // 在 rebuildAckSync 之后,确认syncWith是否变化,变化则重建参照的SyncLinkSource
225
+ if (
226
+ vSyncWithNameCache != rProps.syncWith ||
227
+ vSyncTypeCache != rProps.syncType
228
+ ) {
229
+ vSyncWithNameCache = rProps.syncWith;
230
+ vSyncTypeCache = rProps.syncType;
231
+ changeSyncLink(vSyncWithNameCache);
232
+ }
233
+
234
+ // slider div属性变化(放在最后,因为style里面的top/left要参考varTop/varLeft/varWidth/varHeight)
235
+ {
236
+ let divStyle = {
237
+ // 对应模式的动态变量设置为0(width/height设置为100为了进行测试),否则使用其start作为固定值
238
+ top: cVarMode == ScrollBoxStyle.Position ? 0 : vMainDivTop.start,
239
+ left: cVarMode == ScrollBoxStyle.Position ? 0 : vMainDivLeft.start,
240
+ width: cVarMode == ScrollBoxStyle.Size ? 0 : vMainDivWidth.start,
241
+ height: cVarMode == ScrollBoxStyle.Size ? 0 : vMainDivHeight.start,
242
+ };
243
+ switch (cProxyType) {
244
+ // SizeClip
245
+ case ScrollBoxStyle.SizeClip:
246
+ {
247
+ if (rProps.proxyProps) {
248
+ console.warn("clipDiv not support proxyProps");
249
+ }
250
+ rSizeClipOutProps.value = {
251
+ style: {
252
+ top: divStyle.top,
253
+ left: divStyle.left,
254
+ },
255
+ };
256
+ rSizeClipInnerProps.value = {
257
+ style: {
258
+ width: divStyle.width,
259
+ height: divStyle.height,
260
+ overflow: "hidden",
261
+ },
262
+ "data-jsv-vw-mmask-drift": "true", // 将clip视窗做成drift模式
263
+ };
264
+ }
265
+ break;
266
+
267
+ // JsvNinePatch
268
+ case ScrollBoxStyle.JsvNinePatch:
269
+ {
270
+ rNinePatchMergedProps.value = {
271
+ ...rProps.proxyProps,
272
+ style: {
273
+ ...divStyle,
274
+ },
275
+ };
276
+ }
277
+ break;
278
+
279
+ // SizeDiv
280
+ case ScrollBoxStyle.SizeDiv:
281
+ {
282
+ let proxyStyle: any = null;
283
+ if ((rProps.proxyProps as any)?.style) {
284
+ proxyStyle = (rProps.proxyProps as any)?.style;
285
+ }
286
+ rProps.proxyProps;
287
+ rSizeDivProps.value = {
288
+ style: {
289
+ ...proxyStyle,
290
+ ...divStyle,
291
+ },
292
+ };
293
+ }
294
+ break;
295
+
296
+ default:
297
+ // Unknown types
298
+ console.error("unknown proxy type=" + cProxyType?.toString());
299
+ return;
300
+ }
301
+ }
302
+ });
303
+
304
+ function changeSyncLink(newSyncSourceName: String) {
305
+ // 清理原Link nexusNode
306
+ vSyncLinkNexusNode = null;
307
+ rebuildAckSync();
308
+
309
+ if (newSyncSourceName != null) {
310
+ // 创建新Source的Ready promise, 在确认目标节点存在后再获取NexusNode来创建condition
311
+ // 注意此Promise要在unMounted时通过UnListen进行反注册,才能规避内存泄漏
312
+ vWaitMasterLinkSourceReady = cSyncLinkManager
313
+ .WaitSourceMounted(newSyncSourceName)
314
+ .then(() => {
315
+ // 获取Link nexusNode。此引用不用专门释放,没有内存泄漏问题
316
+ vSyncLinkNexusNode =
317
+ cSyncLinkManager.GetSourceNexusNode(newSyncSourceName);
318
+ rebuildAckSync();
319
+ });
320
+ }
321
+ }
322
+
323
+ function rebuildAckSync() {
324
+ if (!vTargetViewReady) return;
325
+
326
+ // 清理老设定
327
+ cSliderActor.run((cmds) => [
328
+ cmds.state().removeConditionByGroup(cLinkConditionGroup),
329
+ ]);
330
+
331
+ if (vSyncLinkNexusNode != null) {
332
+ // 创建运动跟随的condition
333
+ let vertSet: PosSizeType, horiSet: PosSizeType;
334
+ if (cVarMode == ScrollBoxStyle.Position) {
335
+ vertSet = vMainDivTop;
336
+ horiSet = vMainDivLeft;
337
+ } else {
338
+ vertSet = vMainDivHeight;
339
+ horiSet = vMainDivWidth;
340
+ }
341
+
342
+ cSliderActor.run((cmds) => [
343
+ cmds
344
+ .condition(cLinkConditionGroup, true)
345
+ .movementSync(vSyncLinkNexusNode!)
346
+ .then([
347
+ cmds
348
+ .action()
349
+ .ackMovementSync(
350
+ horiSet.start,
351
+ horiSet.end,
352
+ vertSet.start,
353
+ vertSet.end,
354
+ 0b11,
355
+ vSyncTypeCache == ScrollBoxStyle.SyncForward ? 1 : 2
356
+ ),
357
+ ]),
358
+ cmds
359
+ .condition(cLinkConditionGroup, true)
360
+ .onNexusEvent(
361
+ vSyncLinkNexusNode!,
362
+ ScrollInnerStyle.UpdatePercentNexusCode
363
+ )
364
+ .then([
365
+ (pointInfo: any) => {
366
+ vCurrentPercent = positionToPercent(pointInfo);
367
+ },
368
+ ]),
369
+ ]);
370
+ }
371
+ }
372
+
373
+ // setSensor 函数声明
374
+ function setSensor(callback: Function, sensitivity: number) {
375
+ cSliderActor.run((cmds) => [
376
+ cmds.state().removeConditionByGroup(cSensorConditionGroup),
377
+ ]);
378
+ if (callback != null) {
379
+ cSliderActor.run((cmds) => [
380
+ cmds
381
+ .condition(cSensorConditionGroup, true)
382
+ .onMovement(sensitivity) // 设置x或y移动超过12时才触发回调,以此减少回调的频次,规避js的性能影响
383
+ .then([
384
+ (pointInfo: any) => {
385
+ let percent: number = positionToPercent(pointInfo);
386
+ vCurrentPercent = percent;
387
+ callback(percent, pointInfo.xPos, pointInfo.yPos);
388
+ },
389
+ ]),
390
+ ]);
391
+ }
392
+ }
393
+
394
+ function positionToPercent(pointInfo: any): number {
395
+ let percent = 0;
396
+ if (cVarMode == ScrollBoxStyle.Position) {
397
+ if (vMainDivTop.start != vMainDivTop.end) {
398
+ percent = pointInfo.yPos / (vMainDivTop.end - vMainDivTop.start);
399
+ } else if (vMainDivLeft.start != vMainDivLeft.end) {
400
+ percent = pointInfo.xPos / (vMainDivLeft.end - vMainDivLeft.start);
401
+ }
402
+ } else {
403
+ if (vMainDivHeight.start != vMainDivHeight.end) {
404
+ percent = pointInfo.yPos / (vMainDivHeight.end - vMainDivHeight.start);
405
+ } else if (vMainDivWidth.start != vMainDivWidth.end) {
406
+ percent = pointInfo.xPos / (vMainDivWidth.end - vMainDivWidth.start);
407
+ }
408
+ }
409
+ return percent;
410
+ }
411
+
412
+ function onNinePatchRef(divRef: any) {
413
+ // 理论上此回调会在本组件onMounted前调用
414
+ // 这样在onMounted中就可以正常使用
415
+ rSliderViewRef.value = divRef;
416
+
417
+ initViewControl();
418
+ }
419
+
420
+ function initViewControl() {
421
+ if (rSliderViewRef.value == null) {
422
+ return;
423
+ }
424
+
425
+ if (vTargetViewReady) {
426
+ // already inited, not allow init twice
427
+ return;
428
+ }
429
+
430
+ vTargetViewReady = true;
431
+
432
+ // 构建slider的FreeMove控制对象
433
+ let sliderView = (rSliderViewRef.value as any).jsvGetProxyView(
434
+ cProxyType != ScrollBoxStyle.SizeDiv
435
+ );
436
+ if (cVarMode == ScrollBoxStyle.Size) {
437
+ cSliderActor.asSizeMode();
438
+ }
439
+ cSliderActor.bindForgeView(sliderView, true);
440
+
441
+ // 设置关联区域
442
+ rebuildAckSync();
443
+ }
444
+
445
+ function currentPercent(): number {
446
+ return vCurrentPercent;
447
+ }
448
+
449
+ onMounted(() => {
450
+ initViewControl();
451
+ });
452
+
453
+ onUnmounted(() => {
454
+ /** 关于LinkSource的释放 **/
455
+ // 释放作为linkSource slave时的句柄
456
+ if (vWaitMasterLinkSourceReady != null) {
457
+ cSyncLinkManager.UnListen(vWaitMasterLinkSourceReady);
458
+ vWaitMasterLinkSourceReady = null;
459
+ }
460
+ });
461
+
462
+ defineExpose({
463
+ setSensor,
464
+ currentPercent,
465
+ });
466
+ </script>
467
+
468
+ <style lang="scss" scoped></style>
@@ -0,0 +1,9 @@
1
+
2
+
3
+ const ScrollInnerStyle = {
4
+ UpdatePercentNexusCode: 10001,
5
+ }
6
+
7
+ export {
8
+ ScrollInnerStyle
9
+ }
@@ -1,15 +1,24 @@
1
1
 
2
2
 
3
- const ScrollStyle = {
3
+ const ScrollBoxStyle = {
4
4
  // 运动模式
5
5
  DrawerMode: Symbol("DrawerMode"),
6
6
  PinMode: Symbol("PinMode"),
7
7
 
8
8
  // 同步模式
9
- SyncParallel: Symbol("AckParallel"), // 百分比完全对齐的同步模式
10
- SyncRevert: Symbol("SyncRevert"), // (1-百分比)的同步模式
9
+ SyncForward: Symbol("SyncForward"), // 百分比完全对齐的同步模式
10
+ SyncReverse: Symbol("SyncReverse"), // (1-百分比)的同步模式
11
+
12
+ // Follow的同步模式
13
+ Position: Symbol("Position"),
14
+ Size: Symbol("Size"),
15
+
16
+ // Follow的类型定义
17
+ SizeDiv: Symbol("SizeDiv"),
18
+ SizeClip: Symbol("SizeClip"),
19
+ JsvNinePatch: Symbol("JsvNinePatch"),
11
20
  }
12
21
 
13
22
  export {
14
- ScrollStyle
23
+ ScrollBoxStyle
15
24
  }
@@ -0,0 +1,3 @@
1
+ export { default as JsvScrollBox } from "./JsvScrollBox.vue"
2
+ export { default as JsvScrollFollow } from "./JsvScrollFollow.vue"
3
+ export * from "./ScrollSymbol"
@@ -58,3 +58,6 @@ export {
58
58
  export { default as JsvEnableRenderBreak } from "./JsvEnableRenderBreak.vue";
59
59
  export { JsvMindMap } from "./JsvMindMap"
60
60
  export * from "./JsvScrollBox"
61
+ export { default as JsvFragShaderView } from "./JsvFragShaderView"
62
+ export * from "./JsvClipDiv"
63
+ export * from "./JsvDriftScope"
@@ -1,19 +0,0 @@
1
- /*
2
- * @Author: ChenChanghua
3
- * @Date: 2021-09-22 16:50:09
4
- * @LastEditors: ChenChanghua
5
- * @LastEditTime: 2022-01-26 10:17:47
6
- * @Description: file content
7
- */
8
- import { BaseDispatcher } from "../WidgetCommon";
9
-
10
- class Dispatcher extends BaseDispatcher {}
11
- Dispatcher.Type = {
12
- setFocusId: Symbol("setFocusId"),
13
- updateItem: Symbol("updateItem"),
14
- slideToItem: Symbol("slideTo"),
15
- setEnterFocusId: Symbol("setEnterFocusId"),
16
- setEnterFocusRect: Symbol("setEnterFocusRect"),
17
- };
18
- export { Dispatcher as SWidgetDispatcher };
19
- export default Dispatcher;
@@ -1,2 +0,0 @@
1
- export { default as JsvScrollBox } from "./JsvScrollBox.vue"
2
- export * from "./ScrollSymbol.ts"