@shijiu/jsview-vue 2.1.25 → 2.1.200-next-vue.0
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/package.json +1 -1
- package/utils/JsViewEngineWidget/JsvFocusBlock.vue +1 -1
- package/utils/JsViewEngineWidget/JsvFocusHub.ts +123 -0
- package/utils/JsViewEngineWidget/JsvFocusManager.js +4 -3
- package/utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts +145 -51
- package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +51 -64
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +62 -71
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +308 -613
- package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +127 -247
- package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +1 -0
- package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +36 -2
- package/utils/JsViewEngineWidget/WidgetCommon.ts +25 -6
- package/utils/JsViewPlugin/JsvAudio/{JsvAudioBrowser.vue → BrowserAudio/BrowserAudio.vue} +1 -1
- package/utils/JsViewPlugin/JsvAudio/index.js +1 -1
- package/utils/JsViewPlugin/JsvLatex/BrowserDomBuilder.js +37 -0
- package/utils/JsViewPlugin/JsvLatex/Color.ts +43 -0
- package/utils/JsViewPlugin/JsvLatex/JsvLatex.vue +159 -0
- package/utils/JsViewPlugin/JsvLatex/JsvLatexBridgeProxy.js +16 -0
- package/utils/JsViewPlugin/JsvLatex/JsvLatexBrowser.vue +59 -0
- package/utils/JsViewPlugin/JsvLatex/PluginLoader.js +171 -0
- package/utils/JsViewPlugin/JsvLatex/index.js +28 -0
- package/utils/JsViewPlugin/JsvLatex/mathjax-tex-svg.txt +1 -0
- package/utils/JsViewPlugin/JsvLatex/version.js +24 -0
- package/utils/JsViewPlugin/JsvLatex/version.mjs +24 -0
- package/utils/JsViewPlugin/index.js +2 -1
- package/utils/JsViewVueTools/JsvDynamicCssStyle.js +2 -52
- package/utils/JsViewVueTools/JsvPerformance.ts +11 -0
- package/utils/JsViewVueTools/JsvPreDownloader.ts +55 -11
- package/utils/JsViewVueTools/JsvStyleSheetsDeclarer.js +40 -0
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +143 -0
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts +24 -0
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/Path.ts +198 -0
- package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +31 -0
- package/utils/JsViewVueTools/JsvTextureStore/Store.ts +32 -0
- package/utils/JsViewVueTools/JsvTextureStore/Texture.ts +38 -0
- package/utils/JsViewVueTools/index.js +3 -0
- package/utils/JsViewVueWidget/JsvEnableRenderBreak.vue +17 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.ts +6 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +144 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorState.ts +6 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/{CallbackManager.js → CallbackManager.ts} +19 -10
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +45 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +1 -1
- package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +124 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/KeepFlags.ts +6 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +553 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +138 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +53 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +11 -1
- package/utils/JsViewVueWidget/JsvHole.js +1 -1
- package/utils/JsViewVueWidget/JsvLine/JsvLine.vue +101 -0
- package/utils/JsViewVueWidget/JsvLine/LineManager.js +62 -0
- package/utils/JsViewVueWidget/JsvLine/index.js +3 -0
- package/utils/JsViewVueWidget/JsvMarquee.vue +316 -139
- package/utils/JsViewVueWidget/JsvMindMap/CommonType.ts +1 -0
- package/utils/JsViewVueWidget/JsvMindMap/Constant.ts +20 -0
- package/utils/JsViewVueWidget/JsvMindMap/DataTree.ts +394 -0
- package/utils/JsViewVueWidget/JsvMindMap/Geometry.ts +277 -0
- package/utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue +653 -0
- package/utils/JsViewVueWidget/JsvMindMap/index.js +1 -0
- package/utils/JsViewVueWidget/JsvMindMap/rtree.js +628 -0
- package/utils/JsViewVueWidget/JsvNinePatch.vue +2 -2
- package/utils/JsViewVueWidget/JsvPieChart.vue +124 -0
- package/utils/JsViewVueWidget/JsvPosterImage.vue +32 -9
- package/utils/JsViewVueWidget/JsvPreload/BrowserPreload.vue +135 -133
- package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +273 -270
- package/utils/JsViewVueWidget/JsvSector.vue +107 -0
- package/utils/JsViewVueWidget/JsvTextBox.vue +14 -1
- package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +28 -2
- package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +122 -93
- package/utils/JsViewVueWidget/index.js +15 -7
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.js +0 -112
- package/utils/JsViewVueWidget/JsvFreeMoveActor/CommonTools.js +0 -18
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.js +0 -216
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.js +0 -66
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.js +0 -38
- package/utils/JsViewVueWidget/JsvFreeMoveActor/TypeDefine.js +0 -12
- package/utils/JsViewVueWidget/JsvTouchContainer.vue +0 -183
- package/utils/JsViewVueWidget/JsvTransparentDiv.vue +0 -87
- /package/utils/{JsViewVueWidget → JsViewPlugin/JsvAudio/BrowserAudio}/JsvSystemAudio.vue +0 -0
package/package.json
CHANGED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
class FocusHubApi {
|
|
4
|
+
private _FocusHub: any; // JsvFocusableNode中的class Hub
|
|
5
|
+
|
|
6
|
+
constructor(focusableHubRef: any) {
|
|
7
|
+
this._FocusHub = focusableHubRef;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// 内部接口
|
|
11
|
+
public getOrigin(): Object {
|
|
12
|
+
return this._FocusHub;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* setFocus
|
|
17
|
+
*
|
|
18
|
+
* 设置焦点,在焦点对应的 JsvFocusBlock 完成mounted之前设置的话,
|
|
19
|
+
* 会在JsvFocusBlock完成mounted后立即设上焦点
|
|
20
|
+
*
|
|
21
|
+
* @param {string} focusName
|
|
22
|
+
* 当前命名空间的名字/全局命名空间的名字。
|
|
23
|
+
* 当前命名空间的名字: 是指和当前节点相同命名空间的名字(首字符不为".")。
|
|
24
|
+
* 对于二级命名空间,可以使用 "{namespace}.{name}"的方式。
|
|
25
|
+
* 全局命名空间的名字: 是指通过getName()函数获取后再附加下级节点的名字。
|
|
26
|
+
* *请注意: 请避免手写的全局命名空间名字,防止在二次集成时可能会出现名字找不到的问题。
|
|
27
|
+
* @param {boolean} passToChild 保持/恢复子焦点的聚焦状态(若此焦点的子焦点为聚焦状态,
|
|
28
|
+
* 当本焦点从失焦状态恢复为聚焦状态时,子焦点也自动回复为聚焦状态),默认为不保持/恢复。
|
|
29
|
+
*/
|
|
30
|
+
public setFocus(focusName: string, passToChild: boolean = false) {
|
|
31
|
+
this._FocusHub.setFocus(focusName, passToChild);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* returnFocusToParent
|
|
36
|
+
*
|
|
37
|
+
* 将焦点从当前节点还给其父JsvFocusBlock节点
|
|
38
|
+
*/
|
|
39
|
+
public returnFocusToParent() {
|
|
40
|
+
this._FocusHub.returnFocusToParent();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* getCurrentFocus
|
|
45
|
+
*
|
|
46
|
+
* 获取当前焦点的的 focusName 信息,用于后续的进行的 setFocus 操作
|
|
47
|
+
* (注意, 不带NameSpace)
|
|
48
|
+
*
|
|
49
|
+
* @return {string} 当前焦点的focusName
|
|
50
|
+
*/
|
|
51
|
+
public getCurrentFocus(): string {
|
|
52
|
+
return this._FocusHub.getCurrentFocus();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* getLastFocus
|
|
57
|
+
*
|
|
58
|
+
* 获得切到到当前焦点前的上一个焦点的name(注意, 不带NameSpace),
|
|
59
|
+
* 注意:如果上一次的焦点已经不在dom树时, 返回null
|
|
60
|
+
*
|
|
61
|
+
* @return {string} 焦点的focusName
|
|
62
|
+
*/
|
|
63
|
+
public getLastFocus(): string {
|
|
64
|
+
return this._FocusHub.getLastFocus();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* getDeactivedPageFocus
|
|
69
|
+
*
|
|
70
|
+
* 在对一个keep-alive的界面进行deactive后,为了未来将其active时恢复离开时的焦点时使用。
|
|
71
|
+
* 在 onDeactive 回调中调用
|
|
72
|
+
* 注意: 只有当一个有焦点的keep-alive倍deactive时才能获得
|
|
73
|
+
*
|
|
74
|
+
* @return {string} 焦点的focusName
|
|
75
|
+
*/
|
|
76
|
+
public getDeactivedPageFocus(): string {
|
|
77
|
+
return this._FocusHub.getDeactivedPageFocus();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* getNameSpace
|
|
82
|
+
*
|
|
83
|
+
* 获取当前FocusHub的nameSpace
|
|
84
|
+
*
|
|
85
|
+
* @return {string} 当前FocusHub的nameSpace
|
|
86
|
+
*/
|
|
87
|
+
public getNameSpace(): string {
|
|
88
|
+
return this._FocusHub.getNameSpace();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* enableFocusTrace
|
|
93
|
+
*
|
|
94
|
+
* 调试API: 启用焦点变化时的回调日志,通过console.log打出,其中含产生此行为的调用堆栈
|
|
95
|
+
*
|
|
96
|
+
* @param {boolean} needCallStack 是否打印焦点变化时产生变化的api调用的堆栈,例如setFocus, unmount之类
|
|
97
|
+
*/
|
|
98
|
+
public enableFocusTrace(needCallStack: boolean = true) {
|
|
99
|
+
this._FocusHub.enableFocusTrace(needCallStack);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* printAllFocusable
|
|
104
|
+
*
|
|
105
|
+
* 调试API: console.log当前 Hub 中所有的节点引用,只打印当前NameSpace的内容
|
|
106
|
+
*/
|
|
107
|
+
public printAllFocusable() {
|
|
108
|
+
this._FocusHub.printAllFocusable();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* getCurrentFocusStack
|
|
113
|
+
*
|
|
114
|
+
* 调试API: console.log当前焦点的焦点链条(从root到此节点的链条)
|
|
115
|
+
*
|
|
116
|
+
* @return {Array} 当前焦点的链条队列
|
|
117
|
+
*/
|
|
118
|
+
public getCurrentFocusStack(): Array<Object> {
|
|
119
|
+
return this._FocusHub.getCurrentFocusStack();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export default FocusHubApi;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable no-prototype-builtins */
|
|
2
2
|
|
|
3
3
|
import JsvFocusBlock from "./JsvFocusBlock.vue";
|
|
4
|
+
import JsvFocusHubApi from "./JsvFocusHub.ts";
|
|
4
5
|
import { inject } from "vue";
|
|
5
6
|
|
|
6
7
|
const ROOT_HUB_PROVIDE_NAME = "__jsvFocusRootHub__";
|
|
@@ -11,7 +12,7 @@ const useFocusHub = (withNameSpace) => {
|
|
|
11
12
|
let nameSpace = inject(HUB_NS_PROVIDE_NAME); // nameSpace变更由JsvFocusBlock设置namespace时变更
|
|
12
13
|
if (nameSpace && nameSpace.length > 0) {
|
|
13
14
|
// 使用带有namespace的hub
|
|
14
|
-
return (inject(ROOT_HUB_PROVIDE_NAME)).wrapWithNameSpace(nameSpace);
|
|
15
|
+
return new JsvFocusHubApi((inject(ROOT_HUB_PROVIDE_NAME)).getOrigin().wrapWithNameSpace(nameSpace));
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
|
|
@@ -20,7 +21,7 @@ const useFocusHub = (withNameSpace) => {
|
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
export class JsvFocusManager {
|
|
23
|
-
constructor() {}
|
|
24
|
+
constructor() { }
|
|
24
25
|
|
|
25
26
|
install(app, ...options) {
|
|
26
27
|
console.log("JsvFocusManager install");
|
|
@@ -41,7 +42,7 @@ export class JsvFocusManager {
|
|
|
41
42
|
app.config.globalProperties.$jsvFocusManager = this;
|
|
42
43
|
|
|
43
44
|
app.provide(HUB_NS_PROVIDE_NAME, null);
|
|
44
|
-
app.provide(ROOT_HUB_PROVIDE_NAME, this.$_topFDiv.getHub());
|
|
45
|
+
app.provide(ROOT_HUB_PROVIDE_NAME, new JsvFocusHubApi(this.$_topFDiv.getHub()));
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
getCurrentFocusStack() {
|
|
@@ -1,72 +1,166 @@
|
|
|
1
1
|
import { Forge } from "@shijiu/jsview/dom/jsv-forge-define";
|
|
2
|
+
import { ShallowRef, watch, ref, Ref } from "vue";
|
|
2
3
|
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
export enum TaskType {
|
|
5
|
+
RESIZE_ITEM,
|
|
6
|
+
SLIDE
|
|
7
|
+
}
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
interface Task {
|
|
10
|
+
frameCount: number,
|
|
11
|
+
type: TaskType,
|
|
12
|
+
params: any,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type TaskCallback = (tasks: Array<Task>) => void;
|
|
16
|
+
|
|
17
|
+
export class MacroEndTaskManager {
|
|
18
|
+
private taskList: Array<Task> = [];
|
|
19
|
+
private frameCount: number;
|
|
20
|
+
private customerOnFlushTakEnd: TaskCallback;
|
|
21
|
+
private customerOnBreak: TaskCallback;
|
|
22
|
+
private mTaskToken: Ref<number> = ref(0);
|
|
23
|
+
private mToken: number = 0;
|
|
24
|
+
|
|
25
|
+
constructor(onFlushTask: TaskCallback, onBreak: TaskCallback) {
|
|
26
|
+
this.customerOnBreak = onBreak;
|
|
27
|
+
this.customerOnFlushTakEnd = onFlushTask;
|
|
28
|
+
watch(
|
|
29
|
+
() => this.mTaskToken.value,
|
|
30
|
+
() => {
|
|
31
|
+
this.onFlushTask();
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
flush: 'post'
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
private getToken(): number {
|
|
39
|
+
if (this.mToken < Number.MAX_SAFE_INTEGER) {
|
|
40
|
+
++this.mToken;
|
|
19
41
|
} else {
|
|
20
|
-
|
|
42
|
+
this.mToken = 1;
|
|
21
43
|
}
|
|
44
|
+
return this.mToken;
|
|
22
45
|
}
|
|
23
|
-
}
|
|
24
46
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
47
|
+
public addTask(type: TaskType, params: any) {
|
|
48
|
+
this.taskList.push({
|
|
49
|
+
type,
|
|
50
|
+
params,
|
|
51
|
+
frameCount: Forge.sFrameCount.count,
|
|
52
|
+
});
|
|
53
|
+
if (this.frameCount !== Forge.sFrameCount.count) {
|
|
54
|
+
this.frameCount = Forge.sFrameCount.count;
|
|
55
|
+
const breakList: Array<Task> = [];
|
|
56
|
+
for (let i = this.taskList.length - 1; i >= 0; --i) {
|
|
57
|
+
if (this.taskList[i].frameCount != this.frameCount) {
|
|
58
|
+
let t = this.taskList.splice(i, 1);
|
|
59
|
+
breakList.push(t[0]);
|
|
60
|
+
}
|
|
37
61
|
}
|
|
62
|
+
this.onBreak(breakList);
|
|
63
|
+
this.mTaskToken.value = this.getToken();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
38
66
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
toY,
|
|
44
|
-
duration,
|
|
45
|
-
animInfo.easing
|
|
46
|
-
);
|
|
47
|
-
slideAnimation.SetAnimationListener(
|
|
48
|
-
new Forge.AnimationListener(animInfo.onStart, animInfo.onEnd, null)
|
|
49
|
-
);
|
|
50
|
-
return new AnimationNode(div, slideAnimation);
|
|
51
|
-
} else {
|
|
52
|
-
throw new Error("animInfo is null.")
|
|
67
|
+
private onFlushTask() {
|
|
68
|
+
if (this.taskList.length > 0) {
|
|
69
|
+
this.customerOnFlushTakEnd(this.taskList);
|
|
70
|
+
this.taskList = [];
|
|
53
71
|
}
|
|
54
72
|
}
|
|
73
|
+
|
|
74
|
+
private onBreak(taskList: Array<Task>) {
|
|
75
|
+
this.customerOnBreak(taskList);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
interface AnimSetting {
|
|
80
|
+
easing?: string | null;
|
|
81
|
+
onStart?: () => void;
|
|
82
|
+
onEnd?: (done: boolean) => void;
|
|
83
|
+
duration?: number,
|
|
84
|
+
speed?: number,
|
|
55
85
|
}
|
|
56
86
|
|
|
57
|
-
class
|
|
58
|
-
private
|
|
59
|
-
private
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
87
|
+
class AnimObject {
|
|
88
|
+
private frameCount: number;
|
|
89
|
+
private forgeAnim: any;
|
|
90
|
+
private element: any;
|
|
91
|
+
private animSetting: AnimSetting;
|
|
92
|
+
|
|
93
|
+
constructor(frameCount: number,
|
|
94
|
+
element: any,
|
|
95
|
+
from: [number, number],
|
|
96
|
+
to: [number, number],
|
|
97
|
+
setting: AnimSetting) {
|
|
98
|
+
this.frameCount = frameCount;
|
|
99
|
+
this.animSetting = setting;
|
|
100
|
+
this.element = element;
|
|
101
|
+
|
|
102
|
+
let duration = 0;
|
|
103
|
+
if (typeof setting.duration == "number") {
|
|
104
|
+
duration = setting.duration;
|
|
105
|
+
} else if (typeof setting.speed == "number") {
|
|
106
|
+
duration = Math.round(Math.max(Math.abs(to[0] - from[0]), Math.abs(to[1] - from[1])) / setting.speed);
|
|
107
|
+
}
|
|
108
|
+
this.forgeAnim = new Forge.TranslateAnimation(
|
|
109
|
+
from[0],
|
|
110
|
+
to[0],
|
|
111
|
+
from[1],
|
|
112
|
+
to[1],
|
|
113
|
+
duration,
|
|
114
|
+
setting.easing
|
|
115
|
+
);
|
|
116
|
+
this.forgeAnim.SetAnimationListener(
|
|
117
|
+
new Forge.AnimationListener(this.onStart.bind(this), this.onEnd.bind(this), null)
|
|
118
|
+
);
|
|
63
119
|
}
|
|
64
120
|
|
|
65
121
|
public start() {
|
|
66
|
-
this.
|
|
122
|
+
this.element?.jsvGetProxyView(true).StartAnimation(this.forgeAnim);
|
|
67
123
|
}
|
|
68
124
|
|
|
69
125
|
public stop() {
|
|
70
|
-
this.
|
|
126
|
+
this.element?.jsvGetProxyView(true).StopAnimation();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public getFrameCount() {
|
|
130
|
+
return this.frameCount;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private onStart() {
|
|
134
|
+
this.animSetting?.onStart?.();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private onEnd(done: boolean) {
|
|
138
|
+
this.animSetting?.onEnd?.(done);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export class AnimationManager {
|
|
143
|
+
private animList: Array<AnimObject> = [];
|
|
144
|
+
private frameCount: number = 0;
|
|
145
|
+
|
|
146
|
+
public startSlideAnim(element: any, from: [number, number], to: [number, number], setting: AnimSetting) {
|
|
147
|
+
let curFrameCount = Forge.sFrameCount.count;
|
|
148
|
+
if (curFrameCount != this.frameCount) {
|
|
149
|
+
this.tryCleanOldAnim();
|
|
150
|
+
this.frameCount = curFrameCount;
|
|
151
|
+
}
|
|
152
|
+
const obj = new AnimObject(curFrameCount, element, from, to, setting);
|
|
153
|
+
this.animList.push(obj);
|
|
154
|
+
obj.start();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private tryCleanOldAnim() {
|
|
158
|
+
for (let i = this.animList.length - 1; i >= 0; --i) {
|
|
159
|
+
const anim = this.animList[i];
|
|
160
|
+
if (anim.getFrameCount() != this.frameCount) {
|
|
161
|
+
this.animList.splice(i, 1);
|
|
162
|
+
anim.stop();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
71
165
|
}
|
|
72
166
|
}
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
-->
|
|
4
4
|
<script setup>
|
|
5
5
|
import { ref, shallowRef, computed } from "vue";
|
|
6
|
-
import { setup
|
|
6
|
+
import { setup } from "./MetroWidgetSetup";
|
|
7
7
|
import {
|
|
8
8
|
VERTICAL,
|
|
9
9
|
HORIZONTAL,
|
|
10
10
|
SlideSetting,
|
|
11
11
|
SeamlessSlide,
|
|
12
|
+
RENDER_ITEM_BREAK_KEY,
|
|
12
13
|
} from "../WidgetCommon";
|
|
13
14
|
|
|
14
15
|
const props = defineProps({
|
|
@@ -55,10 +56,6 @@ const props = defineProps({
|
|
|
55
56
|
type: Boolean,
|
|
56
57
|
default: false,
|
|
57
58
|
},
|
|
58
|
-
enableTouch: {
|
|
59
|
-
type: Boolean,
|
|
60
|
-
default: false,
|
|
61
|
-
},
|
|
62
59
|
flingPageWidth: {
|
|
63
60
|
type: Number,
|
|
64
61
|
default: -1,
|
|
@@ -67,9 +64,6 @@ const props = defineProps({
|
|
|
67
64
|
type: Number,
|
|
68
65
|
default: 1 / 4,
|
|
69
66
|
},
|
|
70
|
-
dispatcher: {
|
|
71
|
-
type: Object,
|
|
72
|
-
},
|
|
73
67
|
measures: {
|
|
74
68
|
type: Function,
|
|
75
69
|
required: true,
|
|
@@ -149,20 +143,26 @@ const props = defineProps({
|
|
|
149
143
|
});
|
|
150
144
|
|
|
151
145
|
const renderBreakKey = props.enableItemRenderBreak ? RENDER_ITEM_BREAK_KEY : "";
|
|
152
|
-
const touchContainerW = ref(0);
|
|
153
|
-
const touchContainerH = ref(0);
|
|
154
146
|
const itemRender = ref(!props.enableItemRenderBreak);
|
|
155
147
|
const locateDiv = shallowRef(null);
|
|
156
148
|
const renderData = shallowRef([]);
|
|
157
149
|
const slideDiv = shallowRef(null);
|
|
158
150
|
const slideDivLeft = ref(0);
|
|
159
151
|
const slideDivTop = ref(0);
|
|
160
|
-
const itemResizeSlideDiv = shallowRef(null);
|
|
161
|
-
const itemResizeSlideLeft = ref(0);
|
|
162
|
-
const itemResizeSlideTop = ref(0);
|
|
163
152
|
const focusNode = shallowRef(null);
|
|
164
153
|
const pageUpdateToken = ref(0);
|
|
165
154
|
|
|
155
|
+
const normalizedPlaceHolder = computed(() => {
|
|
156
|
+
return {
|
|
157
|
+
gap: props.placeHolderSetting.gap ?? 0,
|
|
158
|
+
borderRadius: props.placeHolderSetting.borderRadius ?? 0,
|
|
159
|
+
backgroundColor: props.placeHolderSetting.backgroundColor,
|
|
160
|
+
focusBackgroundColor:
|
|
161
|
+
props.placeHolderSetting.focusBackgroundColor ??
|
|
162
|
+
props.placeHolderSetting.backgroundColor,
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
|
|
166
166
|
const {
|
|
167
167
|
widgetRectInfo,
|
|
168
168
|
focusBlockOnFocus,
|
|
@@ -173,17 +173,12 @@ const {
|
|
|
173
173
|
exportObject,
|
|
174
174
|
} = setup(
|
|
175
175
|
props,
|
|
176
|
-
touchContainerW,
|
|
177
|
-
touchContainerH,
|
|
178
176
|
itemRender,
|
|
179
177
|
locateDiv,
|
|
180
178
|
renderData,
|
|
181
179
|
slideDiv,
|
|
182
180
|
slideDivLeft,
|
|
183
181
|
slideDivTop,
|
|
184
|
-
itemResizeSlideDiv,
|
|
185
|
-
itemResizeSlideLeft,
|
|
186
|
-
itemResizeSlideTop,
|
|
187
182
|
focusNode,
|
|
188
183
|
pageUpdateToken,
|
|
189
184
|
"list"
|
|
@@ -210,13 +205,11 @@ defineExpose(exportObject);
|
|
|
210
205
|
>
|
|
211
206
|
<div
|
|
212
207
|
id="slideDiv"
|
|
213
|
-
key="
|
|
208
|
+
key="slideDiv"
|
|
214
209
|
ref="slideDiv"
|
|
215
210
|
:style="{
|
|
216
211
|
left: slideDivLeft,
|
|
217
212
|
top: slideDivTop,
|
|
218
|
-
width: touchContainerW,
|
|
219
|
-
height: touchContainerH,
|
|
220
213
|
}"
|
|
221
214
|
>
|
|
222
215
|
<div>
|
|
@@ -234,55 +227,49 @@ defineExpose(exportObject);
|
|
|
234
227
|
}"
|
|
235
228
|
>
|
|
236
229
|
<div
|
|
237
|
-
|
|
238
|
-
key="
|
|
239
|
-
ref="
|
|
230
|
+
v-for="item in renderData"
|
|
231
|
+
:key="pageUpdateToken + '_' + item.index"
|
|
232
|
+
:ref="item.divRef"
|
|
240
233
|
:style="{
|
|
241
|
-
left:
|
|
242
|
-
top:
|
|
234
|
+
left: item.templateInfo.left,
|
|
235
|
+
top: item.templateInfo.top,
|
|
236
|
+
width: item.templateInfo.width,
|
|
237
|
+
height: item.templateInfo.height,
|
|
238
|
+
zIndex: item.renderStyle.zIndex,
|
|
243
239
|
}"
|
|
244
240
|
>
|
|
245
241
|
<div
|
|
246
|
-
v-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
:
|
|
250
|
-
|
|
251
|
-
}"
|
|
242
|
+
v-if="
|
|
243
|
+
!enableItemRenderBreak || item.mounted.value || itemRender
|
|
244
|
+
"
|
|
245
|
+
:key="renderBreakKey"
|
|
246
|
+
:ref="item.slotRef"
|
|
252
247
|
>
|
|
253
|
-
<
|
|
254
|
-
|
|
255
|
-
:
|
|
256
|
-
:
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
:data="item.customerData"
|
|
262
|
-
:onEdge="_onFocusableItemEdge"
|
|
263
|
-
:onAction="item.registerObj"
|
|
264
|
-
:query="item.query"
|
|
265
|
-
:onItemEdge="_onFocusableItemEdge"
|
|
266
|
-
></slot>
|
|
267
|
-
</div>
|
|
268
|
-
<div
|
|
269
|
-
v-if="
|
|
270
|
-
enableItemRenderBreak &&
|
|
271
|
-
placeHolderSetting &&
|
|
272
|
-
!item.mounted.value
|
|
273
|
-
"
|
|
274
|
-
:style="{
|
|
275
|
-
width:
|
|
276
|
-
item.renderStyle.width -
|
|
277
|
-
(placeHolderSetting.gap ? placeHolderSetting.gap : 0),
|
|
278
|
-
height:
|
|
279
|
-
item.renderStyle.height -
|
|
280
|
-
(placeHolderSetting.gap ? placeHolderSetting.gap : 0),
|
|
281
|
-
backgroundColor: placeHolderSetting.backgroundColor,
|
|
282
|
-
borderRadius: placeHolderSetting.borderRadius,
|
|
283
|
-
}"
|
|
284
|
-
></div>
|
|
248
|
+
<slot
|
|
249
|
+
name="renderItem"
|
|
250
|
+
:data="item.customerData"
|
|
251
|
+
:onEdge="_onFocusableItemEdge"
|
|
252
|
+
:onAction="item.registerObj"
|
|
253
|
+
:query="item.query"
|
|
254
|
+
:onItemEdge="_onFocusableItemEdge"
|
|
255
|
+
></slot>
|
|
285
256
|
</div>
|
|
257
|
+
<div
|
|
258
|
+
v-if="
|
|
259
|
+
enableItemRenderBreak &&
|
|
260
|
+
placeHolderSetting &&
|
|
261
|
+
!item.mounted.value
|
|
262
|
+
"
|
|
263
|
+
:style="{
|
|
264
|
+
width: item.renderStyle.width - normalizedPlaceHolder.gap,
|
|
265
|
+
height: item.renderStyle.height - normalizedPlaceHolder.gap,
|
|
266
|
+
backgroundColor:
|
|
267
|
+
exportObject.getCurrentFocusIndex() == item.index
|
|
268
|
+
? normalizedPlaceHolder.focusBackgroundColor
|
|
269
|
+
: normalizedPlaceHolder.backgroundColor,
|
|
270
|
+
borderRadius: normalizedPlaceHolder.borderRadius,
|
|
271
|
+
}"
|
|
272
|
+
></div>
|
|
286
273
|
</div>
|
|
287
274
|
</jsv-focus-block>
|
|
288
275
|
</div>
|