@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.
Files changed (69) hide show
  1. package/bin/browser/BrowserApic.vue.mjs +4 -4
  2. package/bin/browser/BrowserApic2.vue.mjs +4 -4
  3. package/bin/browser/BrowserApicLib.mjs +24 -24
  4. package/bin/browser/BrowserAudio.vue.mjs +8 -8
  5. package/bin/browser/BrowserJsvLatex.vue.mjs +27 -15
  6. package/bin/browser/BrowserPreload.vue.mjs +4 -4
  7. package/bin/browser/BrowserQrcode.vue.mjs +4 -4
  8. package/bin/browser/BrowserSpray.vue.mjs +4 -4
  9. package/bin/browser/BrowserTextureAnim.vue.mjs +4 -4
  10. package/bin/export-sfc.mjs +3 -3
  11. package/bin/jsview-vue-common.mjs +3 -3
  12. package/bin/jsview-vue.mjs +12138 -13910
  13. package/bin/types/browser/BrowserApic.vue.d.mts +33 -0
  14. package/bin/types/browser/BrowserApic2.vue.d.mts +16 -0
  15. package/bin/types/browser/BrowserApicLib.d.mts +56 -0
  16. package/bin/types/browser/BrowserAudio.vue.d.mts +2 -0
  17. package/bin/types/browser/BrowserJsvLatex.vue.d.mts +55 -0
  18. package/bin/types/browser/BrowserPreload.vue.d.mts +14 -0
  19. package/bin/types/browser/BrowserQrcode.vue.d.mts +29 -0
  20. package/bin/types/browser/BrowserSpray.vue.d.mts +2 -0
  21. package/bin/types/browser/BrowserTextureAnim.vue.d.mts +2 -0
  22. package/bin/types/export-sfc.d.mts +2 -0
  23. package/bin/types/jsview-vue-common.d.mts +23 -0
  24. package/bin/types/jsview-vue.d.mts +2511 -0
  25. package/index.d.ts +3 -4
  26. package/package.json +1 -1
  27. package/tools/config/tsconfig.json +7 -10
  28. package/tools/jsview-vue-build.mjs +25 -4
  29. package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +2 -1
  30. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +2 -1
  31. package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +94 -38
  32. package/utils/JsViewEngineWidget/MetroWidget/RenderItem.ts +1 -1
  33. package/utils/JsViewEngineWidget/MetroWidget/SlotComponent.vue +0 -1
  34. package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +11 -3
  35. package/utils/JsViewPlugin/JsvAudio/JsvAudio.vue +6 -3
  36. package/utils/JsViewPlugin/JsvAudio/JsvAudioProxy.vue +20 -0
  37. package/utils/JsViewPlugin/JsvAudio/PluginLoader.js +13 -3
  38. package/utils/JsViewPlugin/JsvAudio/index.js +11 -16
  39. package/utils/JsViewPlugin/JsvLatex/BrowserJsvLatex.vue +22 -5
  40. package/utils/JsViewPlugin/JsvLatex/JsvLatex.vue +3 -1
  41. package/utils/JsViewPlugin/JsvLatex/JsvLatexProxy.vue +20 -0
  42. package/utils/JsViewPlugin/JsvLatex/PluginLoader.js +13 -3
  43. package/utils/JsViewPlugin/JsvLatex/index.js +11 -16
  44. package/utils/JsViewPlugin/index.js +1 -1
  45. package/utils/JsViewVueTools/ForgeHandles.ts +14 -0
  46. package/utils/JsViewVueTools/{JsvDynamicKeyFrames.js → JsvDynamicKeyFrames.ts} +2 -2
  47. package/utils/JsViewVueTools/JsvFederationTools.ts +35 -0
  48. package/utils/JsViewVueTools/JsvPreDownloader.ts +36 -37
  49. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +1 -1
  50. package/utils/JsViewVueTools/index.js +2 -1
  51. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +7 -3
  52. package/utils/JsViewVueWidget/JsvFreeMoveActor/CallbackManager.ts +4 -2
  53. package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +4 -0
  54. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +18 -0
  55. package/utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue +1 -1
  56. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +2 -1
  57. package/utils/JsViewVueWidget/JsvSpriteAnim/FrameBuidler.ts +11 -7
  58. package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +135 -61
  59. package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteTools.ts +26 -0
  60. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +8 -1
  61. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +6 -0
  62. package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +1 -1
  63. package/bin/browser/BrowserJsvPlayer.vue.mjs +0 -573
  64. package/utils/JsViewEngineWidget/index.d.ts +0 -28
  65. package/utils/JsViewPlugin/JsvLatex/mathjax-tex-svg.txt +0 -1
  66. package/utils/JsViewPlugin/index.d.ts +0 -1
  67. package/utils/JsViewVueTools/ForgeHandles.js +0 -13
  68. package/utils/JsViewVueTools/index.d.ts +0 -13
  69. /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:0, h:0}, SpriteInfo中提炼的最大子图内容显示尺寸
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
- frameIndex: undefined,
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
- staticFrameCachedInfo.props.frameIndex != targetIndex
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
- staticFrameCachedInfo.props.frameIndex = targetIndex;
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 (animFrameCachedInfo.result != null) {
192
- // 清理残留的内容
193
- FBuilder.expireAnimates(animFrameCachedInfo.result);
194
- animFrameCachedInfo.result = null;
195
- }
196
-
197
- let spriteInfo = FBuilder.newAnimateFrames(
198
- props.imageUrl,
199
- newFramesArray,
200
- canvasSize.width,
201
- canvasSize.height,
202
- props.spriteInfo.meta.size.w,
203
- props.spriteInfo.meta.size.h
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
- animFrameCachedInfo.props.indexArray = indexArray;
207
- animFrameCachedInfo.result = spriteInfo;
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
- spriteInfo.clipStyle.animation = `${spriteInfo.clipKeyFrameName} ${spriteDuration.value}s steps(1,end) ${props.loop}`;
228
- spriteInfo.transStyle.animation = `${spriteInfo.transKeyFrameName} ${spriteDuration.value}s steps(1,end) ${props.loop}`;
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
- if (props.viewSize) {
242
- canvasSize.width = props.viewSize.w;
243
- canvasSize.height = props.viewSize.h;
244
- } else {
245
- // 从frame中提取canvasSize
246
- let max_width = 0;
247
- let max_height = 0;
248
- for (let i = 0; i < props.spriteInfo.frames.length; i++) {
249
- const target = props.spriteInfo.frames[i].target;
250
- const sprite_with = target.x + target.w;
251
- const sprite_height = target.y + target.h;
252
- if (sprite_with > max_width) {
253
- max_width = sprite_with;
254
- }
255
- if (sprite_height > max_height) {
256
- max_height = sprite_height;
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
- spriteInfo.clipStyle.animation = `${spriteInfo.clipKeyFrameName} ${duration}s steps(1,end) ${loopSet}`;
354
- spriteInfo.transStyle.animation = `${spriteInfo.transKeyFrameName} ${duration}s steps(1,end) ${loopSet}`;
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 id="clip" :style="transformStyle.clipStyle.value" :key="innerId">
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="image"
447
- :style="{ ...transformStyle.imageStyle.value, animation: blinkAnim }"
448
- @animationend="onBlinkAnimEnd"
449
- ></div>
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 { JsvSpriteAnim, JsvSpriteLoader, SpriteController };
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.js";
61
+ import { getKeyFramesGroup } from "../../JsViewVueTools/JsvDynamicKeyFrames";
62
62
 
63
63
  const props = defineProps({
64
64
  dispNumber: { type: Number, require: true },