@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.
- package/bin/browser/BrowserApic.vue.mjs +2 -2
- package/bin/browser/BrowserApic2.vue.mjs +2 -2
- package/bin/browser/BrowserApicLib.mjs +8 -2
- package/bin/browser/BrowserJsvFragShaderView.vue.mjs +63 -0
- package/bin/jsview-vue.mjs +1604 -423
- package/bin/types/JsViewEngineWidget/JsvFocus/JsvFocusManager.d.ts +8 -6
- package/bin/types/JsViewEngineWidget/MetroWidget/Dispatcher.d.ts +10 -12
- package/bin/types/JsViewEngineWidget/MetroWidget/ListWidget.vue.d.ts +3 -3
- package/bin/types/JsViewEngineWidget/MetroWidget/MetroWidget.vue.d.ts +3 -3
- package/bin/types/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.d.ts +2 -2
- package/bin/types/JsViewEngineWidget/MetroWidget/RenderItem.d.ts +3 -0
- package/bin/types/JsViewEngineWidget/TemplateParser/ListMetroTemplate.d.ts +1 -0
- package/bin/types/JsViewEngineWidget/TemplateParser/TemplateItemAdder.d.ts +1 -1
- package/bin/types/JsViewEngineWidget/index.d.ts +10 -1
- package/bin/types/JsViewVueTools/ConstSymbol.d.ts +2 -2
- package/bin/types/JsViewVueTools/JsvFederationTools.d.ts +16 -0
- package/bin/types/JsViewVueTools/JsvPerformance.d.ts +5 -0
- package/bin/types/JsViewVueTools/JsvPreDownloader.d.ts +33 -0
- package/bin/types/JsViewVueTools/JsvTextureStore/JsvTextureStore.d.ts +45 -1
- package/bin/types/JsViewVueTools/index.d.ts +19 -11
- package/bin/types/JsViewVueWidget/JsvApic/JsvApic/BrowserApic.vue.d.ts +1 -1
- package/bin/types/JsViewVueWidget/JsvApic/JsvApic/JsvApic.vue.d.ts +1 -1
- package/bin/types/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue.d.ts +1 -1
- package/bin/types/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue.d.ts +1 -1
- package/bin/types/JsViewVueWidget/JsvApic/JsvBrowserApicLib/Viewer.d.ts +2 -1
- package/bin/types/JsViewVueWidget/JsvClipDiv/JsvClipDiv.vue.d.ts +70 -0
- package/bin/types/JsViewVueWidget/JsvClipDiv/index.d.ts +1 -0
- package/bin/types/JsViewVueWidget/JsvDriftScope/JsvDriftScope.vue.d.ts +104 -0
- package/bin/types/JsViewVueWidget/JsvDriftScope/index.d.ts +1 -0
- package/bin/types/JsViewVueWidget/JsvFragShaderView/BrowserJsvFragShaderView.vue.d.ts +13 -0
- package/bin/types/JsViewVueWidget/JsvFragShaderView/JsvFragShaderView.vue.d.ts +13 -0
- package/bin/types/JsViewVueWidget/JsvFragShaderView/index.d.ts +2 -0
- package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ActorControl.d.ts +43 -17
- package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetAction.d.ts +5 -5
- package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetCondition.d.ts +4 -2
- package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetState.d.ts +7 -7
- package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SyncLinkManager.d.ts +18 -0
- package/bin/types/JsViewVueWidget/JsvFreeMoveActor/index.d.ts +2 -0
- package/bin/types/JsViewVueWidget/JsvNinePatch.vue.d.ts +1 -0
- package/bin/types/JsViewVueWidget/JsvScrollBox/JsvScrollBox.vue.d.ts +61 -1
- package/bin/types/JsViewVueWidget/JsvScrollBox/JsvScrollFollow.vue.d.ts +153 -0
- package/bin/types/JsViewVueWidget/JsvScrollBox/ScrollInnerSymbol.d.ts +4 -0
- package/bin/types/JsViewVueWidget/JsvScrollBox/ScrollSymbol.d.ts +9 -4
- package/bin/types/JsViewVueWidget/JsvScrollBox/index.d.ts +2 -0
- package/bin/types/JsViewVueWidget/index.d.ts +3 -0
- package/package.json +1 -1
- package/tools/config/rollup.config.mjs +1 -0
- package/utils/JsViewEngineWidget/JsvFocus/{JsvFocusManager.js → JsvFocusManager.ts} +12 -12
- package/utils/JsViewEngineWidget/MetroWidget/Dispatcher.ts +20 -0
- package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +27 -10
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +42 -10
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +320 -203
- package/utils/JsViewEngineWidget/MetroWidget/RenderItem.ts +11 -0
- package/utils/JsViewEngineWidget/MetroWidget/TaskManager.ts +8 -0
- package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +20 -10
- package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +18 -0
- package/utils/JsViewEngineWidget/TemplateParser/TemplateItemAdder.ts +7 -0
- package/utils/JsViewEngineWidget/{index.js → index.ts} +1 -1
- package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +21 -2
- package/utils/JsViewVueTools/ConstSymbol.ts +2 -2
- package/utils/JsViewVueTools/JsvPreDownloader.ts +3 -3
- package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +1 -1
- package/utils/JsViewVueTools/index.js +19 -19
- package/utils/JsViewVueWidget/JsvApic/JsvApic/BrowserApic.vue +2 -2
- package/utils/JsViewVueWidget/JsvApic/JsvApic/JsvApic.vue +3 -3
- package/utils/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue +2 -2
- package/utils/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue +3 -3
- package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/Viewer.js +8 -3
- package/utils/JsViewVueWidget/JsvClipDiv/JsvClipDiv.vue +42 -0
- package/utils/JsViewVueWidget/JsvClipDiv/index.ts +1 -0
- package/utils/JsViewVueWidget/JsvConnectLine/JsvConnectLine.vue +5 -1
- package/utils/JsViewVueWidget/JsvDriftScope/JsvDriftScope.vue +82 -0
- package/utils/JsViewVueWidget/JsvDriftScope/index.ts +1 -0
- package/utils/JsViewVueWidget/JsvFragShaderView/BrowserJsvFragShaderView.vue +48 -0
- package/utils/JsViewVueWidget/JsvFragShaderView/JsvFragShaderView.vue +145 -0
- package/utils/JsViewVueWidget/JsvFragShaderView/index.js +18 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +142 -63
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +15 -6
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +19 -7
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +15 -11
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SyncLinkManager.ts +120 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +5 -1
- package/utils/JsViewVueWidget/JsvNinePatch.vue +13 -1
- package/utils/JsViewVueWidget/JsvScrollBox/JsvScrollBox.vue +257 -48
- package/utils/JsViewVueWidget/JsvScrollBox/JsvScrollFollow.vue +468 -0
- package/utils/JsViewVueWidget/JsvScrollBox/ScrollInnerSymbol.ts +9 -0
- package/utils/JsViewVueWidget/JsvScrollBox/ScrollSymbol.ts +13 -4
- package/utils/JsViewVueWidget/JsvScrollBox/index.ts +3 -0
- package/utils/JsViewVueWidget/index.js +3 -0
- package/utils/JsViewEngineWidget/MetroWidget/Dispatcher.js +0 -19
- 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>
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const ScrollBoxStyle = {
|
|
4
4
|
// 运动模式
|
|
5
5
|
DrawerMode: Symbol("DrawerMode"),
|
|
6
6
|
PinMode: Symbol("PinMode"),
|
|
7
7
|
|
|
8
8
|
// 同步模式
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
23
|
+
ScrollBoxStyle
|
|
15
24
|
}
|
|
@@ -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;
|