@shijiu/jsview-vue 2.1.448-test.0 → 2.1.482-test.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/bin/browser/BrowserApic.vue.mjs +4 -4
- package/bin/browser/BrowserApic2.vue.mjs +4 -4
- package/bin/browser/BrowserApicLib.mjs +24 -24
- package/bin/browser/BrowserAudio.vue.mjs +8 -8
- package/bin/browser/BrowserJsvLatex.vue.mjs +27 -15
- package/bin/browser/BrowserPreload.vue.mjs +4 -4
- package/bin/browser/BrowserQrcode.vue.mjs +4 -4
- package/bin/browser/BrowserSpray.vue.mjs +4 -4
- package/bin/browser/BrowserTextureAnim.vue.mjs +4 -4
- package/bin/export-sfc.mjs +3 -3
- package/bin/jsview-vue-common.mjs +3 -3
- package/bin/jsview-vue.mjs +12138 -13910
- package/bin/types/browser/BrowserApic.vue.d.mts +33 -0
- package/bin/types/browser/BrowserApic2.vue.d.mts +16 -0
- package/bin/types/browser/BrowserApicLib.d.mts +56 -0
- package/bin/types/browser/BrowserAudio.vue.d.mts +2 -0
- package/bin/types/browser/BrowserJsvLatex.vue.d.mts +55 -0
- package/bin/types/browser/BrowserPreload.vue.d.mts +14 -0
- package/bin/types/browser/BrowserQrcode.vue.d.mts +29 -0
- package/bin/types/browser/BrowserSpray.vue.d.mts +2 -0
- package/bin/types/browser/BrowserTextureAnim.vue.d.mts +2 -0
- package/bin/types/export-sfc.d.mts +2 -0
- package/bin/types/jsview-vue-common.d.mts +23 -0
- package/bin/types/jsview-vue.d.mts +2511 -0
- package/index.d.ts +3 -4
- package/package.json +1 -1
- package/tools/config/tsconfig.json +7 -10
- package/tools/jsview-vue-build.mjs +25 -4
- package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +2 -1
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +2 -1
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +94 -38
- package/utils/JsViewEngineWidget/MetroWidget/RenderItem.ts +1 -1
- package/utils/JsViewEngineWidget/MetroWidget/SlotComponent.vue +0 -1
- package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +11 -3
- package/utils/JsViewPlugin/JsvAudio/JsvAudio.vue +6 -3
- package/utils/JsViewPlugin/JsvAudio/JsvAudioProxy.vue +20 -0
- package/utils/JsViewPlugin/JsvAudio/PluginLoader.js +13 -3
- package/utils/JsViewPlugin/JsvAudio/index.js +11 -16
- package/utils/JsViewPlugin/JsvLatex/BrowserJsvLatex.vue +22 -5
- package/utils/JsViewPlugin/JsvLatex/JsvLatex.vue +3 -1
- package/utils/JsViewPlugin/JsvLatex/JsvLatexProxy.vue +20 -0
- package/utils/JsViewPlugin/JsvLatex/PluginLoader.js +13 -3
- package/utils/JsViewPlugin/JsvLatex/index.js +11 -16
- package/utils/JsViewPlugin/index.js +1 -1
- package/utils/JsViewVueTools/ForgeHandles.ts +14 -0
- package/utils/JsViewVueTools/{JsvDynamicKeyFrames.js → JsvDynamicKeyFrames.ts} +2 -2
- package/utils/JsViewVueTools/JsvFederationTools.ts +35 -0
- package/utils/JsViewVueTools/JsvPreDownloader.ts +36 -37
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +1 -1
- package/utils/JsViewVueTools/index.js +2 -1
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +7 -3
- package/utils/JsViewVueWidget/JsvFreeMoveActor/CallbackManager.ts +4 -2
- package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +4 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +18 -0
- package/utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue +1 -1
- package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +2 -1
- package/utils/JsViewVueWidget/JsvSpriteAnim/FrameBuidler.ts +11 -7
- package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +135 -61
- package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteTools.ts +26 -0
- package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +8 -1
- package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +6 -0
- package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +1 -1
- package/bin/browser/BrowserJsvPlayer.vue.mjs +0 -573
- package/utils/JsViewEngineWidget/index.d.ts +0 -28
- package/utils/JsViewPlugin/JsvLatex/mathjax-tex-svg.txt +0 -1
- package/utils/JsViewPlugin/index.d.ts +0 -1
- package/utils/JsViewVueTools/ForgeHandles.js +0 -13
- package/utils/JsViewVueTools/index.d.ts +0 -13
- /package/utils/JsViewVueWidget/JsvSpriteAnim/{sAnimationToken.js → sAnimationToken.ts} +0 -0
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
* 【模块 export 内容】
|
|
3
3
|
* JsvSpriteAnim: 描画动态的精灵图(雪碧图)
|
|
4
|
+
* 注意: PC模拟环境中,动画执行完成如果在onAnimEnd立刻进行不显示的话,可能闪一帧残留图像,在盒子不会有这个问题
|
|
4
5
|
* prop说明:
|
|
5
6
|
* spriteInfo {object} (必需)精灵图配置信息
|
|
6
7
|
* { frames: [
|
|
7
8
|
* {
|
|
8
|
-
* source:{x, y, w, h},
|
|
9
|
-
* target:{x, y, w, h},
|
|
9
|
+
* source:{x, y, w, h}, // 切片的绘制位置,来源于美术工具导出
|
|
10
|
+
* target:{x, y, w, h}, // 切片在精灵图中的位置,来源于美术工具导出
|
|
10
11
|
* },
|
|
11
12
|
* ...
|
|
12
13
|
* ],
|
|
13
|
-
* meta:{w,h}
|
|
14
|
+
* meta:{w,h} // 整张精灵图的尺寸,来源于美术工具导出
|
|
14
15
|
* }
|
|
15
|
-
* viewSize {object} (可选){w:
|
|
16
|
+
* viewSize {object} (可选){w:xxx, h:xxx},显示尺寸定制, 不设置则从SpriteInfo中提炼的最大子图内容显示尺寸
|
|
17
|
+
* 可以只只设定width或者height,另一边则自适应
|
|
18
|
+
* 因为精灵图的尺寸都是精灵图内容单图偏移+内容尺寸,所以定制区域后,此区域的显示内容是右下对齐的效果
|
|
19
|
+
* spriteFrameSize {object} (可选){w:xxxx, h:xxxx},精灵图美术编译前居中显示的图尺寸,用来纠正viewSize设定后的右下对齐成居中
|
|
20
|
+
* 一般可以通过JsvSpriteTools.guessOriginSize()来推测值,最好还是来源于美术提供资料
|
|
16
21
|
* imageUrl {string} (必需)图片地址,另外,为了减小无效的解析处理,规定只有image的URL变更时才重新解析spriteInfo
|
|
17
22
|
* duration {float} (动图必需)动图的时间
|
|
18
23
|
* onAnimEnd {function} 动图结束回调
|
|
@@ -45,6 +50,7 @@ import * as FBuilder from "./FrameBuidler";
|
|
|
45
50
|
const props = defineProps({
|
|
46
51
|
spriteInfo: Object,
|
|
47
52
|
viewSize: Object,
|
|
53
|
+
spriteFrameSize: Object,
|
|
48
54
|
imageUrl: String,
|
|
49
55
|
duration: { type: Number, default: 1 },
|
|
50
56
|
onAnimEnd: Function,
|
|
@@ -59,6 +65,8 @@ let innerId = shallowRef(0);
|
|
|
59
65
|
let spriteDuration = shallowRef(props.duration);
|
|
60
66
|
let apiStartEndCallback = null;
|
|
61
67
|
let canvasSize = { width: 0, height: 0 };
|
|
68
|
+
let viewSizeSetStyle = shallowRef({ width: 0, height: 0 });
|
|
69
|
+
|
|
62
70
|
// 直接影响div的做step动画的style
|
|
63
71
|
let transformStyle = {
|
|
64
72
|
clipStyle: shallowRef({}),
|
|
@@ -91,15 +99,25 @@ const _BuildStaticFrame = (targetIndex) => {
|
|
|
91
99
|
// 初始化静态图缓存
|
|
92
100
|
staticFrameCachedInfo = {
|
|
93
101
|
props: {
|
|
94
|
-
|
|
102
|
+
source: {
|
|
103
|
+
x: 0,
|
|
104
|
+
y: 0,
|
|
105
|
+
w: 0,
|
|
106
|
+
h: 0,
|
|
107
|
+
},
|
|
95
108
|
},
|
|
96
109
|
result: null,
|
|
97
110
|
};
|
|
98
111
|
}
|
|
99
112
|
|
|
113
|
+
let originCheckSource = staticFrameCachedInfo?.props.source;
|
|
114
|
+
let checkSource = props.spriteInfo.frames[targetIndex].source;
|
|
100
115
|
if (
|
|
101
116
|
staticFrameCachedInfo.result == null ||
|
|
102
|
-
|
|
117
|
+
originCheckSource.x != checkSource.x ||
|
|
118
|
+
originCheckSource.y != checkSource.y ||
|
|
119
|
+
originCheckSource.w != checkSource.w ||
|
|
120
|
+
originCheckSource.h != checkSource.h
|
|
103
121
|
) {
|
|
104
122
|
// 缓存需要变化时,重算单图信息
|
|
105
123
|
let framesLength = props.spriteInfo.frames.length;
|
|
@@ -121,7 +139,10 @@ const _BuildStaticFrame = (targetIndex) => {
|
|
|
121
139
|
props.spriteInfo.meta.size.h
|
|
122
140
|
);
|
|
123
141
|
|
|
124
|
-
|
|
142
|
+
originCheckSource.x = checkSource.x;
|
|
143
|
+
originCheckSource.y = checkSource.y;
|
|
144
|
+
originCheckSource.w = checkSource.w;
|
|
145
|
+
originCheckSource.h = checkSource.h;
|
|
125
146
|
staticFrameCachedInfo.result = spriteInfo;
|
|
126
147
|
}
|
|
127
148
|
|
|
@@ -129,11 +150,6 @@ const _BuildStaticFrame = (targetIndex) => {
|
|
|
129
150
|
};
|
|
130
151
|
// 创建动图
|
|
131
152
|
const _BuildAnimateFrame = (indexArray) => {
|
|
132
|
-
if (props.spriteInfo.frames == 1) {
|
|
133
|
-
// 单帧内容,始终使用静态图
|
|
134
|
-
return _BuildStaticFrame(0);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
153
|
if (!animFrameCachedInfo) {
|
|
138
154
|
// 初始化动态图缓存
|
|
139
155
|
animFrameCachedInfo = {
|
|
@@ -169,6 +185,12 @@ const _BuildAnimateFrame = (indexArray) => {
|
|
|
169
185
|
}
|
|
170
186
|
|
|
171
187
|
if (!arrayMatch) {
|
|
188
|
+
if (animFrameCachedInfo.result != null) {
|
|
189
|
+
// 清理残留的内容
|
|
190
|
+
FBuilder.expireAnimates(animFrameCachedInfo.result);
|
|
191
|
+
animFrameCachedInfo.result = null;
|
|
192
|
+
}
|
|
193
|
+
|
|
172
194
|
// 解析图片信息
|
|
173
195
|
let newFramesArray;
|
|
174
196
|
if (indexArray == "all") {
|
|
@@ -188,23 +210,23 @@ const _BuildAnimateFrame = (indexArray) => {
|
|
|
188
210
|
}
|
|
189
211
|
}
|
|
190
212
|
|
|
191
|
-
if (
|
|
192
|
-
//
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
);
|
|
213
|
+
if (props.spriteInfo.frames == 1) {
|
|
214
|
+
// 单帧内容,始终使用静态图
|
|
215
|
+
return _BuildStaticFrame(0);
|
|
216
|
+
} else {
|
|
217
|
+
// 处理动图
|
|
218
|
+
let spriteInfo = FBuilder.newAnimateFrames(
|
|
219
|
+
props.imageUrl,
|
|
220
|
+
newFramesArray,
|
|
221
|
+
canvasSize.width,
|
|
222
|
+
canvasSize.height,
|
|
223
|
+
props.spriteInfo.meta.size.w,
|
|
224
|
+
props.spriteInfo.meta.size.h
|
|
225
|
+
);
|
|
205
226
|
|
|
206
|
-
|
|
207
|
-
|
|
227
|
+
animFrameCachedInfo.props.indexArray = indexArray;
|
|
228
|
+
animFrameCachedInfo.result = spriteInfo;
|
|
229
|
+
}
|
|
208
230
|
}
|
|
209
231
|
|
|
210
232
|
return animFrameCachedInfo.result;
|
|
@@ -224,8 +246,10 @@ const _OnReset = () => {
|
|
|
224
246
|
// 启动动画
|
|
225
247
|
spriteInfo = _BuildAnimateFrame("all");
|
|
226
248
|
// 注入animation属性
|
|
227
|
-
|
|
228
|
-
|
|
249
|
+
if (spriteInfo.keyFrameRefName != null) {
|
|
250
|
+
spriteInfo.clipStyle.animation = `${spriteInfo.clipKeyFrameName} ${spriteDuration.value}s steps(1,end) ${props.loop}`;
|
|
251
|
+
spriteInfo.transStyle.animation = `${spriteInfo.transKeyFrameName} ${spriteDuration.value}s steps(1,end) ${props.loop}`;
|
|
252
|
+
}
|
|
229
253
|
} else {
|
|
230
254
|
// 展示静图
|
|
231
255
|
spriteInfo = _BuildStaticFrame(0);
|
|
@@ -237,27 +261,68 @@ const _OnReset = () => {
|
|
|
237
261
|
};
|
|
238
262
|
|
|
239
263
|
// ******** 初始化处理 ********
|
|
264
|
+
// 获取canvasSize
|
|
265
|
+
|
|
240
266
|
// 获取viewSize
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
267
|
+
// 从frame中提取canvasSize
|
|
268
|
+
let max_width = 0;
|
|
269
|
+
let max_height = 0;
|
|
270
|
+
for (let i = 0; i < props.spriteInfo.frames.length; i++) {
|
|
271
|
+
const target = props.spriteInfo.frames[i].target;
|
|
272
|
+
const sprite_with = target.x + target.w;
|
|
273
|
+
const sprite_height = target.y + target.h;
|
|
274
|
+
if (sprite_with > max_width) {
|
|
275
|
+
max_width = sprite_with;
|
|
276
|
+
}
|
|
277
|
+
if (sprite_height > max_height) {
|
|
278
|
+
max_height = sprite_height;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
canvasSize.width = max_width;
|
|
282
|
+
canvasSize.height = max_height;
|
|
283
|
+
|
|
284
|
+
// 确定精灵图原图的尺寸
|
|
285
|
+
let spriteFrameSize = {
|
|
286
|
+
width: canvasSize.width,
|
|
287
|
+
height: canvasSize.height,
|
|
288
|
+
};
|
|
289
|
+
if (props.spriteFrameSize) {
|
|
290
|
+
spriteFrameSize.width = props.spriteFrameSize.w;
|
|
291
|
+
spriteFrameSize.height = props.spriteFrameSize.h;
|
|
292
|
+
}
|
|
293
|
+
viewSizeSetStyle.value.width = spriteFrameSize.width;
|
|
294
|
+
viewSizeSetStyle.value.height = spriteFrameSize.height;
|
|
295
|
+
|
|
296
|
+
// 设置view尺寸缩放
|
|
297
|
+
if (props.viewSize && (props.viewSize.w || props.viewSize.h)) {
|
|
298
|
+
let viewDispSize = { widthScale: 1, heightScale: 1 };
|
|
299
|
+
let viewSize = { width: props.viewSize.w, height: props.viewSize.h };
|
|
300
|
+
if (!viewSize.width) {
|
|
301
|
+
// width 无值,由height推断
|
|
302
|
+
viewSize.width = Math.floor(
|
|
303
|
+
(viewSize.height * spriteFrameSize.width) / spriteFrameSize.height
|
|
304
|
+
);
|
|
305
|
+
} else if (!viewSize.height) {
|
|
306
|
+
// height 无值,由width推断
|
|
307
|
+
viewSize.height = Math.floor(
|
|
308
|
+
(viewSize.width * spriteFrameSize.height) / spriteFrameSize.width
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
viewDispSize.widthScale = viewSize.width / spriteFrameSize.width;
|
|
313
|
+
viewDispSize.heightScale = viewSize.height / spriteFrameSize.height;
|
|
314
|
+
// 忽略较小变化
|
|
315
|
+
if (viewDispSize.widthScale > 0.99 && viewDispSize.widthScale < 1.01) {
|
|
316
|
+
viewDispSize.widthScale = 1;
|
|
317
|
+
}
|
|
318
|
+
if (viewDispSize.heightScale > 0.99 && viewDispSize.heightScale < 1.01) {
|
|
319
|
+
viewDispSize.heightScale = 1;
|
|
320
|
+
}
|
|
321
|
+
// 有变化才进行scale调整
|
|
322
|
+
if (viewDispSize.widthScale != 1 || viewDispSize.heightScale != 1) {
|
|
323
|
+
viewSizeSetStyle.value.transform = `scale3d(${viewDispSize.widthScale}, ${viewDispSize.heightScale}, 1)`;
|
|
324
|
+
viewSizeSetStyle.value.transformOrigin = "left top";
|
|
258
325
|
}
|
|
259
|
-
canvasSize.width = max_width;
|
|
260
|
-
canvasSize.height = max_height;
|
|
261
326
|
}
|
|
262
327
|
|
|
263
328
|
// 注册prop变化的内容重置
|
|
@@ -286,6 +351,11 @@ onUnmounted(() => {
|
|
|
286
351
|
const onAnimEndDelegate = () => {
|
|
287
352
|
// 在onAnimEnd之前进行Stop,以防onAnimEnd内部继续发生别的操作
|
|
288
353
|
if (props.onAnimEnd) {
|
|
354
|
+
if (!window.JsView) {
|
|
355
|
+
console.log(
|
|
356
|
+
"JsvSpriteAnim 结束回调时进行隐藏在PC环境会有一帧残留,盒子环境是正常,可忽略这个问题"
|
|
357
|
+
);
|
|
358
|
+
}
|
|
289
359
|
props.onAnimEnd();
|
|
290
360
|
}
|
|
291
361
|
|
|
@@ -350,8 +420,10 @@ const op = {
|
|
|
350
420
|
|
|
351
421
|
let spriteInfo = _BuildAnimateFrame(indexArray);
|
|
352
422
|
// 注入animation属性
|
|
353
|
-
|
|
354
|
-
|
|
423
|
+
if (spriteInfo.keyFrameRefName != null) {
|
|
424
|
+
spriteInfo.clipStyle.animation = `${spriteInfo.clipKeyFrameName} ${duration}s steps(1,end) ${loopSet}`;
|
|
425
|
+
spriteInfo.transStyle.animation = `${spriteInfo.transKeyFrameName} ${duration}s steps(1,end) ${loopSet}`;
|
|
426
|
+
}
|
|
355
427
|
|
|
356
428
|
// 设置界面
|
|
357
429
|
_ApplySpriteInfo(spriteInfo);
|
|
@@ -436,17 +508,19 @@ defineExpose(op);
|
|
|
436
508
|
</script>
|
|
437
509
|
|
|
438
510
|
<template>
|
|
439
|
-
<div
|
|
440
|
-
<div
|
|
441
|
-
id="trans"
|
|
442
|
-
:style="transformStyle.transStyle.value"
|
|
443
|
-
@animationend="onAnimEndDelegate"
|
|
444
|
-
>
|
|
511
|
+
<div :style="{ ...viewSizeSetStyle }">
|
|
512
|
+
<div id="clip" :style="transformStyle.clipStyle.value" :key="innerId">
|
|
445
513
|
<div
|
|
446
|
-
id="
|
|
447
|
-
:style="
|
|
448
|
-
@animationend="
|
|
449
|
-
|
|
514
|
+
id="trans"
|
|
515
|
+
:style="transformStyle.transStyle.value"
|
|
516
|
+
@animationend="onAnimEndDelegate"
|
|
517
|
+
>
|
|
518
|
+
<div
|
|
519
|
+
id="image"
|
|
520
|
+
:style="{ ...transformStyle.imageStyle.value, animation: blinkAnim }"
|
|
521
|
+
@animationend="onBlinkAnimEnd"
|
|
522
|
+
></div>
|
|
523
|
+
</div>
|
|
450
524
|
</div>
|
|
451
525
|
</div>
|
|
452
526
|
</template>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
let JsvSpriteTools = {
|
|
2
|
+
/**
|
|
3
|
+
* guessOriginSize
|
|
4
|
+
* 从spriteInfo中挑出最大的一张,认为其是居中显示来估算精灵图原画布的尺寸,以此可填写imageOriginSize信息
|
|
5
|
+
*
|
|
6
|
+
* @param {object} spriteInfo 此Canvas画布的宽度
|
|
7
|
+
* @return {object} 结构体{w:xxx, h:xxx}, 估算出的宽和高
|
|
8
|
+
*/
|
|
9
|
+
guessOriginSize(spriteInfo: any): object {
|
|
10
|
+
let maxSize = 0;
|
|
11
|
+
let guessResult = { w: 0, h: 0 };
|
|
12
|
+
for (let i = 0; i < spriteInfo.frames.length; i++) {
|
|
13
|
+
const target = spriteInfo.frames[i].target;
|
|
14
|
+
const spriteSize = target.w * target.h;
|
|
15
|
+
if (spriteSize > maxSize) {
|
|
16
|
+
// 找到最大面积内容,以此为居中推测
|
|
17
|
+
maxSize = spriteSize;
|
|
18
|
+
guessResult.w = target.x * 2 + target.w;
|
|
19
|
+
guessResult.h = target.y * 2 + target.h;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return guessResult;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default JsvSpriteTools;
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import JsvSpriteAnim from "./JsvSpriteAnim.vue";
|
|
2
2
|
import JsvSpriteLoader from "./JsvSpriteLoader.vue";
|
|
3
3
|
import { SpriteController } from "./SpriteController.js";
|
|
4
|
+
import JsvSpriteTools from "./JsvSpriteTools";
|
|
4
5
|
|
|
5
|
-
export {
|
|
6
|
+
export {
|
|
7
|
+
JsvSpriteAnim as JsvSpriteStatic, // 静图复用Animate,当info内容为单个时则为静图
|
|
8
|
+
JsvSpriteAnim,
|
|
9
|
+
JsvSpriteLoader,
|
|
10
|
+
SpriteController,
|
|
11
|
+
JsvSpriteTools,
|
|
12
|
+
};
|
|
@@ -272,6 +272,7 @@ export default {
|
|
|
272
272
|
controllerList[i] = new JsvActorMoveControl();
|
|
273
273
|
}
|
|
274
274
|
}
|
|
275
|
+
let focusBlock = ref();
|
|
275
276
|
let preOffset = -1;
|
|
276
277
|
let offset = ref(0);
|
|
277
278
|
let focused = ref(false);
|
|
@@ -283,6 +284,7 @@ export default {
|
|
|
283
284
|
timeoutHandler,
|
|
284
285
|
controllerList,
|
|
285
286
|
autoplay: false,
|
|
287
|
+
focusBlock,
|
|
286
288
|
};
|
|
287
289
|
},
|
|
288
290
|
watch: {
|
|
@@ -291,6 +293,9 @@ export default {
|
|
|
291
293
|
},
|
|
292
294
|
},
|
|
293
295
|
methods: {
|
|
296
|
+
getFocusBlockRef() {
|
|
297
|
+
return this.focusBlock;
|
|
298
|
+
},
|
|
294
299
|
stopAutoplay() {
|
|
295
300
|
this.autoplay = false;
|
|
296
301
|
clearInterval(this.timeoutHandler);
|
|
@@ -497,6 +502,7 @@ export default {
|
|
|
497
502
|
:callback="onBeVisible"
|
|
498
503
|
></jsv-visible-sensor>
|
|
499
504
|
<jsv-focus-block
|
|
505
|
+
ref="focusBlock"
|
|
500
506
|
:name="name"
|
|
501
507
|
:style="{
|
|
502
508
|
left: layoutInfo.left,
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
|
|
59
59
|
<script setup>
|
|
60
60
|
import { shallowReactive, shallowRef, onBeforeUnmount,reactive } from "vue";
|
|
61
|
-
import { getKeyFramesGroup } from "../../JsViewVueTools/JsvDynamicKeyFrames
|
|
61
|
+
import { getKeyFramesGroup } from "../../JsViewVueTools/JsvDynamicKeyFrames";
|
|
62
62
|
|
|
63
63
|
const props = defineProps({
|
|
64
64
|
dispNumber: { type: Number, require: true },
|