@shijiu/jsview-vue-samples 2.3.151-test.0 → 3.0.0-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 (228) hide show
  1. package/ABImageAlt/App.vue +114 -0
  2. package/ABImageAlt/Item.vue +133 -0
  3. package/{MetroWidgetDemos/SkeletonDiagram/assets/imageList.json → ABImageAlt/assets/imageList.js} +9 -1
  4. package/ABImageAlt/data.js +17 -0
  5. package/AI_Check_Rules.txt +5 -0
  6. package/AnimPicture/App.vue +20 -10
  7. package/ApicSwitch/App.vue +90 -0
  8. package/ApicSwitch/TabItem.vue +65 -0
  9. package/ApicSwitch/WebpShow.vue +24 -0
  10. package/ApicSwitch/data.js +50 -0
  11. package/Basic/AI_skills_update.md +1 -0
  12. package/Basic/components/div/ColorFormatTest.vue +93 -0
  13. package/Basic/components/div/DivRadius.vue +97 -15
  14. package/Basic/components/div/DivTag3Group.vue +30 -0
  15. package/Basic/components/img/ImageType.vue +65 -0
  16. package/Basic/components/panel/Panel2.vue +13 -1
  17. package/Basic/components/text/TextAlign.vue +7 -1
  18. package/BlobLoadTest/App.vue +201 -0
  19. package/BreakLinesApi/App.vue +82 -0
  20. package/CanvasDrawChart/App.vue +11 -0
  21. package/CanvasDrawChart/Graph1.vue +104 -0
  22. package/CanvasDrawChart/Graph2.vue +115 -0
  23. package/CssPreprocessor/Scss/PanelData.js +1 -1
  24. package/CssPreprocessor/Scss/components/scss-group4/ScssMaps.vue +4 -3
  25. package/CssPreprocessor/Scss/components/scss-group5/ScssImporting.vue +2 -2
  26. package/DemoForOperator/Bounce/FreeMoveBuilder.js +1 -1
  27. package/DemoForOperator/Firework1/App.vue +12 -1
  28. package/DemoForOperator/Firework1/Fireworks.vue +18 -0
  29. package/DemoForOperator/FlipPage/FlipPage/FlipPage.vue +1 -0
  30. package/DemoForOperator/Focus/Alpha/Item.vue +1 -0
  31. package/DemoForOperator/Focus/Light/Item.vue +1 -0
  32. package/DemoForOperator/Focus/Normal/Item.vue +1 -0
  33. package/DemoForOperator/FrameShadow/FrameShadow.vue +1 -1
  34. package/DemoForOperator/Genie/App.vue +20 -6
  35. package/DemoForOperator/Genie/App2.vue +61 -0
  36. package/DemoForOperator/Genie/geniePakcer/GenieImage.vue +298 -0
  37. package/DemoForOperator/Genie/geniePakcer/GenieSlot.vue +292 -0
  38. package/DemoForOperator/Genie/geniePakcer/GenieTools.ts +463 -0
  39. package/DemoForOperator/Jigsaw/JigsawFull.vue +12 -7
  40. package/DemoForOperator/Jigsaw/JigsawSingle.vue +13 -7
  41. package/DemoForOperator/LongChatBox/App.vue +13 -13
  42. package/DemoForOperator/LongChatBox/Bubble.vue +78 -66
  43. package/DemoForOperator/LongChatBox/LongChat.vue +68 -36
  44. package/DemoForOperator/LongChatBox/testData.js +7 -44
  45. package/DemoForOperator/Sound/Bounce/FreeMoveBuilder.js +1 -1
  46. package/DemoForOperator/routeList.js +8 -2
  47. package/DemoHomepage/App.vue +74 -1
  48. package/DemoHomepage/components/BodyFrame.vue +1 -0
  49. package/DemoHomepage/components/TabFrame.vue +1 -1
  50. package/DemoHomepage/router.js +723 -160
  51. package/DemoHomepage/views/Homepage.vue +60 -2
  52. package/DemoHomepage/watchTest.vue +50 -0
  53. package/FilterDemo/AnimatePic.vue +63 -17
  54. package/FilterDemo/App.vue +3 -3
  55. package/FlexCellDemo/AI_skills_update.md +4 -0
  56. package/FlexCellDemo/TestFrame1.vue +12 -2
  57. package/FlexCellDemo/TestFrame2.vue +10 -1
  58. package/FlexCellDemo/TestFrame3.vue +114 -59
  59. package/FpsLimit/App.vue +102 -0
  60. package/FreeMoveChildAttract/App.vue +18 -8
  61. package/FreeMoveLink/App.vue +49 -20
  62. package/Hover/App.vue +144 -0
  63. package/HttpRequestSSE/SSEReader.js +200 -0
  64. package/ImpactStop/App.vue +2 -2
  65. package/Input/FullKeyboard.vue +3 -3
  66. package/Input/InputPanel.vue +63 -3
  67. package/JsvLine/App.vue +53 -38
  68. package/LatexDemo/App.vue +3 -1
  69. package/LatexFormula/App.vue +196 -0
  70. package/LongImage/App.vue +1 -1
  71. package/LongImage/LongImageScroll.vue +100 -47
  72. package/LongImage/Scroll.vue +28 -9
  73. package/LongText/LongTextScroll.vue +1 -0
  74. package/Markdown/App.vue +36 -0
  75. package/Markdown/Bubble.vue +109 -0
  76. package/Markdown/LongChat.vue +206 -0
  77. package/Markdown/Markdown/Markdown.vue +156 -0
  78. package/Markdown/Markdown/index.ts +1 -0
  79. package/Markdown/Markdown/marked/LICENSE.md +45 -0
  80. package/Markdown/Markdown/marked/index.ts +2 -0
  81. package/Markdown/Markdown/marked/marked.d.ts +756 -0
  82. package/Markdown/Markdown/marked/marked.js +71 -0
  83. package/Markdown/Markdown/parser.ts +1365 -0
  84. package/Markdown/data.js +581 -0
  85. package/MetroWidgetDemos/AI_skills_update.md +2 -0
  86. package/MetroWidgetDemos/ListExpand/ChildItem.vue +130 -0
  87. package/MetroWidgetDemos/ListExpand/ExpandItem.vue +375 -0
  88. package/MetroWidgetDemos/ListExpand/ExpandItem1.vue +403 -0
  89. package/MetroWidgetDemos/ListExpand/assets/arrow-down.png +0 -0
  90. package/MetroWidgetDemos/ListExpand/assets/up-arrow.png +0 -0
  91. package/MetroWidgetDemos/ListExpand/components/WidgetListHandler.vue +150 -0
  92. package/MetroWidgetDemos/ListExpand/index.vue +88 -0
  93. package/MetroWidgetDemos/ListExpand/list.js +2421 -0
  94. package/MetroWidgetDemos/RefreshDemo/App.vue +14 -1
  95. package/MetroWidgetDemos/RenderAccelerate/App.vue +142 -0
  96. package/MetroWidgetDemos/RenderAccelerate/AppPage.vue +78 -0
  97. package/MetroWidgetDemos/RenderAccelerate/AppTab.vue +62 -0
  98. package/MetroWidgetDemos/RenderAccelerate/ContentItem.vue +409 -0
  99. package/MetroWidgetDemos/RenderAccelerate/Item.vue +67 -0
  100. package/MetroWidgetDemos/RenderAccelerate/TabItem.vue +100 -0
  101. package/MetroWidgetDemos/RenderAccelerate/ViewSwiper.vue +215 -0
  102. package/MetroWidgetDemos/RenderAccelerate/WidgetItem.vue +107 -0
  103. package/MetroWidgetDemos/SkeletonDiagram/App.vue +35 -8
  104. package/MetroWidgetDemos/SkeletonDiagram/Item.vue +11 -2
  105. package/MetroWidgetDemos/SkeletonDiagram/assets/imageList.js +245 -0
  106. package/MetroWidgetDemos/SkeletonDiagram/data.js +3 -3
  107. package/MetroWidgetDemos/SpatialNav/App.vue +177 -0
  108. package/MetroWidgetDemos/SpatialNav/Buttons.vue +83 -0
  109. package/MetroWidgetDemos/SpatialNav/CustomFocus.vue +57 -0
  110. package/MetroWidgetDemos/{TripleWidget → SpatialNav}/Item.vue +1 -8
  111. package/MetroWidgetDemos/{TripleWidget/WidgetItem.vue → SpatialNav/SimpleFloor.vue} +14 -45
  112. package/MetroWidgetDemos/SpatialNav/StepMw.vue +113 -0
  113. package/MetroWidgetDemos/SpatialNav/TabContent/TabContent.vue +185 -0
  114. package/MetroWidgetDemos/SpatialNav/TripleSection/TripleSection.vue +69 -0
  115. package/MetroWidgetDemos/SpatialNav/TripleSection/WidgetItem.vue +100 -0
  116. package/MetroWidgetDemos/SpatialNav/TvSection/List.vue +75 -0
  117. package/MetroWidgetDemos/SpatialNav/TvSection/TvSection.vue +91 -0
  118. package/MetroWidgetDemos/basic2/App.vue +407 -0
  119. package/MetroWidgetDemos/basic2/Item.vue +68 -0
  120. package/MetroWidgetDemos/direction/App.vue +22 -0
  121. package/MetroWidgetDemos/gazeFocusDiff/App.vue +126 -0
  122. package/MetroWidgetDemos/gazeFocusDiff/Item.vue +87 -0
  123. package/MetroWidgetDemos/minimalUsage/App.vue +66 -0
  124. package/MetroWidgetDemos/minimalUsage/Item.vue +54 -0
  125. package/MetroWidgetDemos/ninePatchFocusPage/App.vue +22 -7
  126. package/MetroWidgetDemos/ninePatchFocusPage/Item.vue +7 -5
  127. package/MetroWidgetDemos/ninePatchFocusPage/focusConstants.js +2 -0
  128. package/MetroWidgetDemos/routeList.js +203 -12
  129. package/MetroWidgetDemos/slideSetting/App.vue +288 -99
  130. package/MetroWidgetDemos/zIndex/App.vue +117 -0
  131. package/MetroWidgetDemos/zIndex/Item.vue +61 -0
  132. package/NinePatchTester/App.vue +24 -31
  133. package/PreDecode/App.vue +140 -0
  134. package/ReactiveTest/App.vue +115 -0
  135. package/ReactiveTest/Item.vue +92 -0
  136. package/ReactiveTest/assets/imageList.js +245 -0
  137. package/ReactiveTest/component/TestSmartDiv.vue +50 -0
  138. package/ReactiveTest/component/TestSmartDivSrcList.vue +74 -0
  139. package/ReactiveTest/component/TestSmartImage.vue +46 -0
  140. package/ReactiveTest/component/TestSmartImageSrcList.vue +90 -0
  141. package/ReactiveTest/component/TestSmartImageStyle.vue +41 -0
  142. package/ReactiveTest/data.js +49 -0
  143. package/ScreenToBlob/App.vue +250 -0
  144. package/SecTorTest/App.vue +9 -3
  145. package/SpringFestival/SpringFestivalScene/FreeMoveBuilder.js +3 -3
  146. package/SyncDecode/App.vue +137 -0
  147. package/TextSizeLimit/App.vue +211 -0
  148. package/TransitPage/App.vue +2 -0
  149. package/assets/logo.png +0 -0
  150. package/package.json +5 -5
  151. package/DemoForOperator/Genie/geniePakcer/Genie.vue +0 -741
  152. package/DemoForOperator/LongChatBox/TextManager.ts +0 -147
  153. package/DemoForOperator/LongChatBox/VirtualList.vue +0 -298
  154. package/DemoForOperator/LongChatBox/utile.js +0 -331
  155. package/DivMetroPerformance/App.vue +0 -157
  156. package/DivMetroPerformance/Item.vue +0 -58
  157. package/DivMetroPerformance/assets/bg.jpg +0 -0
  158. package/DivMetroPerformance/assets/coupon_content.png +0 -0
  159. package/DivMetroPerformance/assets/coupon_left.png +0 -0
  160. package/DivMetroPerformance/assets/coupon_mid.png +0 -0
  161. package/DivMetroPerformance/assets/coupon_right.png +0 -0
  162. package/DivMetroPerformance/assets/focus_border.png +0 -0
  163. package/DivMetroPerformance/assets/holder_logo.png +0 -0
  164. package/DivMetroPerformance/assets/jrbm.png +0 -0
  165. package/DivMetroPerformance/assets/line_left.png +0 -0
  166. package/DivMetroPerformance/assets/line_mid.png +0 -0
  167. package/DivMetroPerformance/assets/line_right.png +0 -0
  168. package/DivMetroPerformance/assets/loading.png +0 -0
  169. package/DivMetroPerformance/assets/logo.png +0 -0
  170. package/DivMetroPerformance/assets/mcjx.png +0 -0
  171. package/DivMetroPerformance/assets/tao.png +0 -0
  172. package/DivMetroPerformance/assets/tmall.png +0 -0
  173. package/DivMetroPerformance/border.png +0 -0
  174. package/DivMetroPerformance/components/ContentItem.vue +0 -384
  175. package/DivMetroPerformance/components/MyTab.vue +0 -129
  176. package/DivMetroPerformance/data.js +0 -124
  177. package/DivMetroPerformance/utils/GridItem.vue +0 -28
  178. package/DivMetroPerformance/utils/GridPlate.vue +0 -85
  179. package/MediaDemo/App.vue +0 -127
  180. package/MediaDemo/assets/audio-poster.png +0 -0
  181. package/MediaDemo/components/Button.vue +0 -69
  182. package/MediaDemo/components/Controllor.vue +0 -286
  183. package/MediaDemo/components/StatusBar.vue +0 -100
  184. package/MediaDemo/components/frames/AudioFrame.vue +0 -39
  185. package/MediaDemo/components/frames/AudioPoster.vue +0 -48
  186. package/MediaDemo/components/frames/MediaFrame.vue +0 -153
  187. package/MediaDemo/components/frames/VideoFrame.vue +0 -39
  188. package/MetroWidgetDemos/TripleWidget/App.vue +0 -87
  189. package/MetroWidgetDemos/TripleWidget/SWidgetItem.vue +0 -99
  190. package/Parkour/App.vue +0 -13
  191. package/Parkour/Common/Context.js +0 -21
  192. package/Parkour/Common/MatchmanInfo.js +0 -62
  193. package/Parkour/Common/Random.js +0 -61
  194. package/Parkour/Common/Sound.js +0 -50
  195. package/Parkour/appConfig/HOW_TO_CONFIG.md +0 -20
  196. package/Parkour/appConfig/app.config.mjs +0 -5
  197. package/Parkour/appConfig/app_sign_private_key_sample.crt +0 -28
  198. package/Parkour/appConfig/app_sign_public_key_sample.pem +0 -9
  199. package/Parkour/appConfig/jsview.config.mjs +0 -39
  200. package/Parkour/assets/Bgimages/bg1.png +0 -0
  201. package/Parkour/assets/Bgimages/bg2.png +0 -0
  202. package/Parkour/assets/Bgimages/bg3.png +0 -0
  203. package/Parkour/assets/Bgimages/bg4.png +0 -0
  204. package/Parkour/assets/Bgimages/bg5.png +0 -0
  205. package/Parkour/assets/audio/jump.mp3 +0 -0
  206. package/Parkour/assets/audio/lose.mp3 +0 -0
  207. package/Parkour/assets/role_skin1/fail.json +0 -44
  208. package/Parkour/assets/role_skin1/fail.png +0 -0
  209. package/Parkour/assets/role_skin1/jump_down.json +0 -20
  210. package/Parkour/assets/role_skin1/jump_down.png +0 -0
  211. package/Parkour/assets/role_skin1/jump_up.json +0 -44
  212. package/Parkour/assets/role_skin1/jump_up.png +0 -0
  213. package/Parkour/assets/role_skin1/roll.json +0 -44
  214. package/Parkour/assets/role_skin1/roll.png +0 -0
  215. package/Parkour/assets/role_skin1/run.json +0 -52
  216. package/Parkour/assets/role_skin1/run.png +0 -0
  217. package/Parkour/components/Backdrop.vue +0 -61
  218. package/Parkour/components/GameSence.vue +0 -602
  219. package/Parkour/components/Matchman.vue +0 -85
  220. package/ThrowMoveDemo/AccelerateDemo.vue +0 -85
  221. package/ThrowMoveDemo/App.vue +0 -104
  222. package/ThrowMoveDemo/LRParabolicDemo.vue +0 -101
  223. package/ThrowMoveDemo/TargetDemo.vue +0 -87
  224. package/ThrowMoveDemo/UDParabolicDemo.vue +0 -92
  225. /package/{AnimPicture/assets → assets}/animated_webp.webp +0 -0
  226. /package/{AnimPicture/assets → assets}/ball_3.webp +0 -0
  227. /package/{AnimPicture/assets → assets}/girl_run.gif +0 -0
  228. /package/{AnimPicture/assets → assets}/quan.webp +0 -0
@@ -0,0 +1,250 @@
1
+ <script setup>
2
+ import { shallowRef, ref, onBeforeUnmount } from "vue";
3
+ import { JsvTextureStoreApi, JsvPreload, buildPreloadInfo, BlobApi } from "jsview";
4
+
5
+ // 与 DominantColor 示例保持一致的两张图片
6
+ const Image1 =
7
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/panda.jpeg";
8
+ const Image2 =
9
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/owl.jpeg";
10
+
11
+ // 需要截屏的区域
12
+ const vToCapture = shallowRef(null);
13
+
14
+ // 左侧资源统一收拢到一个非响应式对象中,便于集中管理回收逻辑
15
+ const cLeftResource = {
16
+ // Blob 显示用的 URL
17
+ blobUrl: ref(null),
18
+ // 当前 object URL,用于释放
19
+ currentObjectUrl: null,
20
+ // 全局 BitPalette 句柄,用于在 unmount 时统一回收
21
+ activeBitPalette: null,
22
+ };
23
+
24
+ // 截屏 cancel 句柄
25
+ let captureTextureHandle = null;
26
+
27
+ function handleLoadDone() {
28
+ console.log("图片预加载完成");
29
+ doCaptureAndToBlob();
30
+ }
31
+
32
+ async function doCaptureAndToBlob() {
33
+ try {
34
+ console.log("ScreenToBlob: doCaptureAndToBlob");
35
+
36
+ if (!vToCapture.value) {
37
+ console.warn("ScreenToBlob: vToCapture 为空");
38
+ return;
39
+ }
40
+
41
+ // 截屏生成 texture
42
+ captureTextureHandle = JsvTextureStoreApi.capture2Texture(
43
+ vToCapture.value,
44
+ async (textureName, autoRecycle, w, h) => {
45
+ console.log("ScreenToBlob capture2Texture", textureName, autoRecycle, w, h);
46
+ if (!textureName || textureName.length === 0) {
47
+ console.warn("ScreenToBlob: capture2Texture 返回空 textureName");
48
+ return;
49
+ }
50
+
51
+ const src = `jsvtexturestore://${textureName}`;
52
+ let bitPalette = null;
53
+ try {
54
+ // 若已有未完成的 BitPalette,先回收
55
+ cLeftResource.activeBitPalette?.recycle();
56
+
57
+ // 使用 getBitPalette 获取 BitPalette,并保存为全局句柄
58
+ bitPalette = JsvTextureStoreApi.getBitPalette(src);
59
+ cLeftResource.activeBitPalette = bitPalette;
60
+
61
+ await bitPalette.Ready;
62
+
63
+ // 通过 BitPaletteCtrl.toBlob 获得 Blob
64
+ const blob = await bitPalette.Ctrl?.toBlob();
65
+ if (!blob) {
66
+ console.warn("ScreenToBlob: toBlob 返回空 Blob");
67
+ return;
68
+ }
69
+
70
+ // 释放旧的 object URL
71
+ if (cLeftResource.currentObjectUrl) {
72
+ BlobApi.revokeObjectURL(cLeftResource.currentObjectUrl);
73
+ cLeftResource.currentObjectUrl = null;
74
+ }
75
+
76
+ // 创建新的 object URL,并用于展示
77
+ cLeftResource.currentObjectUrl = await BlobApi.createObjectURL(blob);
78
+ cLeftResource.blobUrl.value = cLeftResource.currentObjectUrl;
79
+ } catch (error) {
80
+ console.error("ScreenToBlob: BitPalette 处理失败", error);
81
+ } finally {
82
+ // 释放 BitPalette 资源,并清理全局句柄
83
+ if (cLeftResource.activeBitPalette === bitPalette) {
84
+ bitPalette?.recycle();
85
+ cLeftResource.activeBitPalette = null;
86
+ }
87
+ // 手动删除截图纹理,防止泄漏
88
+ JsvTextureStoreApi.deleteTexture(textureName);
89
+ }
90
+ },
91
+ false // 手动deleteTexture进行回收而非自动回收, JsvTextureStoreApi.getBitPalette 的需求
92
+ );
93
+ } catch (error) {
94
+ console.error("ScreenToBlob: capture2Texture 调用失败", error);
95
+ }
96
+ }
97
+
98
+ // 处理右边区域的Blob展示, 右边区域使用图片src直接展示
99
+ const cRightResource = {
100
+ // Blob 显示用的 URL
101
+ blobUrl: ref(null),
102
+ // 当前 object URL,用于释放
103
+ currentObjectUrl: null,
104
+ // 全局 BitPalette 句柄,用于在 unmount 时统一回收
105
+ activeBitPalette: null,
106
+ };
107
+ async function handleRightBlob(src) {
108
+ // 使用 getBitPalette 获取 BitPalette,并保存为全局句柄
109
+ const bitPalette = JsvTextureStoreApi.getBitPalette(src);
110
+ cRightResource.activeBitPalette = bitPalette;
111
+
112
+ await bitPalette.Ready;
113
+
114
+ // 通过 BitPaletteCtrl.toBlob 获得 Blob
115
+ const blob = await bitPalette.Ctrl?.toBlob();
116
+ if (!blob) {
117
+ console.warn("ScreenToBlob: toBlob 返回空 Blob");
118
+ return;
119
+ }
120
+
121
+ // 释放旧的 object URL
122
+ if (cRightResource.currentObjectUrl) {
123
+ BlobApi.revokeObjectURL(cRightResource.currentObjectUrl);
124
+ cRightResource.currentObjectUrl = null;
125
+ }
126
+
127
+ // 创建新的 object URL,并用于展示
128
+ cRightResource.currentObjectUrl = await BlobApi.createObjectURL(blob);
129
+ cRightResource.blobUrl.value = cRightResource.currentObjectUrl;
130
+ }
131
+ handleRightBlob(Image2);
132
+
133
+ onBeforeUnmount(() => {
134
+
135
+ // ------- 先处理左边资源的回收 -------
136
+
137
+ // 取消截屏, 回收resource
138
+ captureTextureHandle?.recycle();
139
+
140
+ // 回收仍在进行中的 BitPalette - 左侧
141
+ cLeftResource.activeBitPalette?.recycle();
142
+ cLeftResource.activeBitPalette = null;
143
+
144
+ // 释放 object URL - 左侧
145
+ if (cLeftResource.currentObjectUrl) {
146
+ BlobApi.revokeObjectURL(cLeftResource.currentObjectUrl);
147
+ cLeftResource.currentObjectUrl = null;
148
+ console.log("ScreenToBlob: 已释放 object URL (左侧)");
149
+ }
150
+
151
+ // ------- 再处理右边资源的回收 -------
152
+ // 回收仍在进行中的 BitPalette - 右侧
153
+ cRightResource.activeBitPalette?.recycle();
154
+ cRightResource.activeBitPalette = null;
155
+
156
+ // 释放 object URL - 右侧
157
+ if (cRightResource.currentObjectUrl) {
158
+ BlobApi.revokeObjectURL(cRightResource.currentObjectUrl);
159
+ cRightResource.currentObjectUrl = null;
160
+ console.log("ScreenToBlob: 已释放 object URL (右侧)");
161
+ }
162
+ });
163
+ </script>
164
+
165
+ <template>
166
+ <!-- 背景,与 DominantColor 保持一致 -->
167
+ <div
168
+ :style="{
169
+ left: 0,
170
+ top: 0,
171
+ width: 1280,
172
+ height: 720,
173
+ backgroundColor: '#FFFFFF',
174
+ }"
175
+ ></div>
176
+
177
+ <div
178
+ :style="{
179
+ textAlign: 'center',
180
+ fontSize: 30,
181
+ lineHeight: 50,
182
+ color: '#ffffff',
183
+ left: 140,
184
+ top: 20,
185
+ width: 1000,
186
+ height: 50,
187
+ backgroundColor: 'rgba(27,38,151,0.8)',
188
+ }"
189
+ >
190
+ 下方为blob显示,1为截图blob, 2为给定url的blob
191
+ </div>
192
+
193
+ <!-- 截屏区域, 等图片加载完成后进行截屏动作 -->
194
+ <div
195
+ ref="vToCapture"
196
+ :style="{
197
+ left: 0,
198
+ top: 80,
199
+ width: 640,
200
+ height: 360,
201
+ }"
202
+ >
203
+ <img
204
+ :style="{
205
+ width: 640,
206
+ height: 360,
207
+ }"
208
+ :onLoad="handleLoadDone"
209
+ :src="Image1"
210
+ />
211
+ <div
212
+ :style="{
213
+ width: 300,
214
+ height: 300,
215
+ backgroundColor: '#007788',
216
+ }"
217
+ ></div>
218
+ </div>
219
+
220
+
221
+ <!-- Blob 结果展示区域,仿照 BlobLoadTest,在绘制内容下方展示 -->
222
+ <div
223
+ v-if="cLeftResource.blobUrl.value"
224
+ :style="{
225
+ top: 450,
226
+ left: 0,
227
+ }"
228
+ >
229
+ <img
230
+ :src="cLeftResource.blobUrl.value"
231
+ :style="{
232
+ width: 640,
233
+ height: 250,
234
+ objectFit: 'contain',
235
+ }"
236
+ />
237
+ </div>
238
+
239
+ <!-- 右侧图片展示 -->
240
+ <div
241
+ :style="{
242
+ left: 640,
243
+ top: 450,
244
+ width: 320,
245
+ height: 180,
246
+ backgroundImage: `url(${cRightResource.blobUrl.value})`,
247
+ }"
248
+ />
249
+ </template>
250
+
@@ -4,13 +4,14 @@
4
4
  <JsvPieChart
5
5
  :centerPosition="center"
6
6
  :radius="360"
7
+ :subRadius="300"
7
8
  :data="data"
8
- :animationTime="0.5"
9
+ :animationTime="0.8"
9
10
  ></JsvPieChart>
10
11
  <!-- 文字说明 -->
11
12
  <div class="text">
12
13
  {{
13
- "图为圆心在(400,400)位置,半径为360的饼图。此样例限制最多六个扇形。"
14
+ "图为圆心在(400,400)位置,半径为360-300的环形图(300为0时则为扇形饼图)。此样例限制最多六个扇形。"
14
15
  }}
15
16
  </div>
16
17
  <!-- 操作说明 -->
@@ -34,22 +35,27 @@ const center = {
34
35
  let data = shallowRef([
35
36
  {
36
37
  percent: 23.33,
38
+ // color: "#0000FF7F",
37
39
  color: "#0000FF",
38
40
  },
39
41
  {
40
42
  percent: 24.67,
43
+ // color: "#FFFF007F",
41
44
  color: "#FFFF00",
42
45
  },
43
46
  {
44
47
  percent: 15,
48
+ // color: "#FF12FF7F",
45
49
  color: "#FF12FF",
46
50
  },
47
51
  {
48
52
  percent: 13,
53
+ // color: "#FF12137F",
49
54
  color: "#FF1213",
50
55
  },
51
56
  {
52
57
  percent: 24,
58
+ // color: "#6EFFE17F",
53
59
  color: "#6EFFE1",
54
60
  },
55
61
  ]);
@@ -209,7 +215,7 @@ let actionDefines = {
209
215
  }
210
216
  .text {
211
217
  width: 500;
212
- height: 60;
218
+ height: 90;
213
219
  left: 700;
214
220
  top: 300;
215
221
  background-color: rgba(255, 255, 255, 0.5);
@@ -59,8 +59,8 @@ const sWallConditionName = "wallCond";
59
59
  export function buildBounce(
60
60
  cmds,// FreeMove的cmds句柄
61
61
  condGroupId,
62
- startX, // 起始位置和目标位置的偏差, 单位px
63
- startY, // 起始位置和目标位置的偏差, 单位px
62
+ startX, // 起始位置和目标位置的偏差, 单位px, 目标位置固定为0
63
+ startY, // 起始位置和目标位置的偏差, 单位px, 目标位置固定为0
64
64
  times, // 整数,落点数(弹起次数-1)
65
65
  gravity, // y轴的加速度, 建议设置成0.8
66
66
  onEnd,
@@ -119,7 +119,7 @@ export function buildBounce(
119
119
  cmds.state().removeConditionByGroup(condGroupId),
120
120
 
121
121
  // wallPosition用于规避运动路程计算超出(times越大超出越多)时,解决动画结尾的回弹问题
122
- cmds.condition(condGroupId, true, sWallConditionName).wallPosition(wallname, 0, undefined).then([
122
+ cmds.condition(condGroupId, true, sWallConditionName).wallPosition(wallname, 0).then([
123
123
  cmds.action().teleportTo(0, undefined),
124
124
  cmds.action().setSpdAndAccel(0, undefined, undefined, undefined),
125
125
  ]),
@@ -0,0 +1,137 @@
1
+ <template>
2
+ <jsv-focus-block
3
+ :onAction="{ onKeyDown }"
4
+ autoFocus
5
+ :style="{
6
+ width: 1280,
7
+ height: 720,
8
+ backgroundColor: '#007788',
9
+ }"
10
+ >
11
+ <JsvPreload :downloadList="downloadInfo" :onDownloadDone="onDownloadDone" />
12
+ <div
13
+ :style="{
14
+ left: rootLeft,
15
+ transition: 'left 0.5s ease-in-out',
16
+ }"
17
+ @transitionend="onTransitionEnd"
18
+ >
19
+ <JsvPosterImage
20
+ v-if="showImg == 0"
21
+ :style="{
22
+ left: 0,
23
+ width: 1280,
24
+ height: 720,
25
+ }"
26
+ :syncDraw="true"
27
+ :src="ImageLongmao"
28
+ >
29
+ </JsvPosterImage>
30
+ <JsvPosterImage
31
+ v-if="showImg == 1"
32
+ :style="{
33
+ left: 1280,
34
+ width: 1280,
35
+ height: 720,
36
+ }"
37
+ :syncDraw="true"
38
+ :src="ImageOwl"
39
+ >
40
+ </JsvPosterImage>
41
+ <JsvPosterImage
42
+ v-if="showImg == 2"
43
+ :style="{
44
+ left: 2560,
45
+ width: 1280,
46
+ height: 720,
47
+ }"
48
+ :syncDraw="true"
49
+ :src="ImagePanda"
50
+ >
51
+ </JsvPosterImage>
52
+ </div>
53
+
54
+ <div
55
+ :style="{
56
+ width: 1280,
57
+ height: 40,
58
+ backgroundColor: '#00000088',
59
+ top: 100,
60
+ color: '#ffffff',
61
+ fontSize: 30,
62
+ textAlign: 'center',
63
+ }"
64
+ >
65
+ 按左右键, 看图片解码时间的延迟
66
+ </div>
67
+
68
+ <div
69
+ :style="{
70
+ left: 100,
71
+ top: 100,
72
+ width: 100,
73
+ height: 100,
74
+ backgroundColor: '#ff0000',
75
+ animation: 'rotate 5s linear infinite',
76
+ }"
77
+ ></div>
78
+ </jsv-focus-block>
79
+ </template>
80
+
81
+ <script setup>
82
+ import { ref, onMounted } from "vue";
83
+ import { JsvPosterImage, JsvPreload, buildDownloadInfo } from "jsview";
84
+
85
+ const rootLeft = ref(0);
86
+ const showImg = ref(0);
87
+ const ImageLongmao =
88
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/DemoHomepage/App/BackgroundLongmao.jpg";
89
+ const ImagePanda =
90
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/panda.jpeg";
91
+ const ImageOwl =
92
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/owl.jpeg";
93
+
94
+ const downloadInfo = [
95
+ buildDownloadInfo(ImageLongmao),
96
+ buildDownloadInfo(ImagePanda),
97
+ buildDownloadInfo(ImageOwl),
98
+ ];
99
+
100
+ const onKeyDown = (ev) => {
101
+ switch (ev.keyCode) {
102
+ case 37:
103
+ if (showImg.value > 0) {
104
+ showImg.value = showImg.value - 1;
105
+ rootLeft.value = rootLeft.value + 1280;
106
+ }
107
+ break;
108
+ case 39:
109
+ if (showImg.value < 2) {
110
+ showImg.value = showImg.value + 1;
111
+ rootLeft.value = rootLeft.value - 1280;
112
+ }
113
+ break;
114
+ }
115
+ };
116
+
117
+ const onDownloadDone = (info) => {
118
+ console.log("onDownloadDone", info);
119
+ };
120
+
121
+ const onTransitionEnd = () => {
122
+ console.log("onAnimationEnd clear resource");
123
+ window.JsvCoreApi?.triggerTextureRecycle?.();
124
+ };
125
+
126
+ </script>
127
+
128
+ <style>
129
+ @keyframes rotate {
130
+ from {
131
+ transform: rotate3d(0, 0, 1, 0deg);
132
+ }
133
+ to {
134
+ transform: rotate3d(0, 0, 1, 360deg);
135
+ }
136
+ }
137
+ </style>
@@ -0,0 +1,211 @@
1
+ <script setup>
2
+ import { JsvTextBox, JsvFlexDiv } from "jsview";
3
+ </script>
4
+
5
+ <template>
6
+ <div :style="{
7
+ width: 1280,
8
+ height: 720,
9
+ backgroundColor: '#007788',
10
+ }"></div>
11
+ <jsv-flex-div
12
+ :style="{
13
+ left: 20,
14
+ top: 20,
15
+ width: 700,
16
+ height: 60,
17
+ backgroundColor: '#030303',
18
+ }"
19
+ >
20
+ <jsv-text-box
21
+ syncDraw="sync"
22
+ :enableLatex="true"
23
+ :style="{
24
+ backgroundColor: '#999999',
25
+ fontSize: 20,
26
+ color: '#00ff00',
27
+ textOverflow: 'clip',
28
+ height: 26,
29
+ lineHeight: 26,
30
+ }"
31
+ :minWidth="400"
32
+ >
33
+ {{ "\\textcolor{#FF0000}{最小宽度400},顶住后方的flex div" }}
34
+ </jsv-text-box>
35
+ <div
36
+ :style="{
37
+ width: 100,
38
+ height: 26,
39
+ fontSize: 20,
40
+ color: '#000000',
41
+ backgroundColor: '#009999',
42
+ }"
43
+ >{{ "后续文字" }}</div>
44
+ </jsv-flex-div>
45
+
46
+ <jsv-flex-div
47
+ :style="{
48
+ left: 20,
49
+ top: 90,
50
+ width: 700,
51
+ height: 60,
52
+ backgroundColor: '#030303',
53
+ }">
54
+ <jsv-text-box
55
+ syncDraw="sync"
56
+ :enableLatex="true"
57
+ :style="{
58
+ backgroundColor: '#999999',
59
+ fontSize: 20,
60
+ color: '#00ff00',
61
+ textOverflow: 'clip',
62
+ lineHeight: 26,
63
+ }"
64
+ :maxWidth="500"
65
+ >
66
+ {{ "\\textcolor{#FF0000}{最大宽度500},文字不足500时,以实际为主" }}
67
+ </jsv-text-box>
68
+ <div
69
+ :style="{
70
+ width: 100,
71
+ height: 26,
72
+ fontSize: 20,
73
+ color: '#000000',
74
+ backgroundColor: '#009999',
75
+ }"
76
+ >{{ "后续文字" }}</div>
77
+ </jsv-flex-div>
78
+
79
+ <jsv-flex-div
80
+ :style="{
81
+ left: 20,
82
+ top: 160,
83
+ width: 700,
84
+ height: 60,
85
+ backgroundColor: '#030303',
86
+ }">
87
+ <jsv-text-box
88
+ syncDraw="sync"
89
+ :enableLatex="true"
90
+ :style="{
91
+ backgroundColor: '#999999',
92
+ fontSize: 20,
93
+ color: '#00ff00',
94
+ textOverflow: 'clip',
95
+ lineHeight: 26,
96
+ }"
97
+ :maxWidth="500"
98
+ >
99
+ {{ "\\textcolor{#FF0000}{最大宽度500},文字超过500时,自动换行显示,补充文字1,补充文字2,补充文字3" }}
100
+ </jsv-text-box>
101
+ </jsv-flex-div>
102
+
103
+ <jsv-flex-div
104
+ :style="{
105
+ left: 20,
106
+ top: 230,
107
+ width: 200,
108
+ height: 300,
109
+ backgroundColor: '#030303',
110
+ flexDirection: 'column',
111
+ alignItems: 'flex-start',
112
+ }">
113
+ <jsv-text-box
114
+ syncDraw="sync"
115
+ :enableLatex="true"
116
+ :style="{
117
+ backgroundColor: '#999999',
118
+ width: 200,
119
+ fontSize: 20,
120
+ color: '#00ff00',
121
+ textOverflow: 'clip',
122
+ lineHeight: 26,
123
+ }"
124
+ :minHeight="200"
125
+ >
126
+ {{ "宽度固定200,\\textcolor{#FF0000}{最小高度200},文字不足以撑起高度时,自动补足高度,顶住下面的flex div" }}
127
+ </jsv-text-box>
128
+ <div
129
+ :style="{
130
+ width: 100,
131
+ height: 26,
132
+ fontSize: 20,
133
+ color: '#000000',
134
+ backgroundColor: '#009999',
135
+ }"
136
+ >{{ "后续文字" }}</div>
137
+ </jsv-flex-div>
138
+
139
+ <jsv-flex-div
140
+ :style="{
141
+ left: 300,
142
+ top: 230,
143
+ width: 200,
144
+ height: 300,
145
+ backgroundColor: '#030303',
146
+ flexDirection: 'column',
147
+ alignItems: 'flex-start',
148
+ }">
149
+ <jsv-text-box
150
+ syncDraw="sync"
151
+ :enableLatex="true"
152
+ :style="{
153
+ backgroundColor: '#999999',
154
+ width: 200,
155
+ fontSize: 20,
156
+ color: '#00ff00',
157
+ textOverflow: 'clip',
158
+ lineHeight: 26,
159
+ }"
160
+ :maxHeight="200"
161
+ >
162
+ {{ "宽度固定200,\\textcolor{#FF0000}{最大高度200},文字不足以撑起高度时,按照实际高度绘制,顶住下面的flex div" }}
163
+ </jsv-text-box>
164
+ <div
165
+ :style="{
166
+ width: 100,
167
+ height: 26,
168
+ fontSize: 20,
169
+ color: '#000000',
170
+ backgroundColor: '#009999',
171
+ }"
172
+ >{{ "后续文字" }}</div>
173
+ </jsv-flex-div>
174
+
175
+ <jsv-flex-div
176
+ :style="{
177
+ left: 520,
178
+ top: 230,
179
+ width: 200,
180
+ height: 300,
181
+ backgroundColor: '#030303',
182
+ flexDirection: 'column',
183
+ alignItems: 'flex-start',
184
+ }">
185
+ <jsv-text-box
186
+ syncDraw="sync"
187
+ :enableLatex="true"
188
+ :style="{
189
+ backgroundColor: '#999999',
190
+ width: 200,
191
+ fontSize: 20,
192
+ color: '#00ff00',
193
+ textOverflow: 'ellipsis',
194
+ lineHeight: 26,
195
+ }"
196
+ :maxHeight="200"
197
+ >
198
+ {{ "宽度固定200,\\textcolor{#FF0000}{最大高度200},文字超过最大高度,进行超出处理,\\textcolor{#FF0000}{高度为整行的倍数(以不超过200的7*26=182)},补充文字1,补充文字2,补充文字3,补充文字4,补充文字5,补充文字6,补充文字7,补充文字8,补充文字9,补充文字10" }}
199
+ </jsv-text-box>
200
+ <div
201
+ :style="{
202
+ width: 100,
203
+ height: 26,
204
+ fontSize: 20,
205
+ color: '#000000',
206
+ backgroundColor: '#009999',
207
+ }"
208
+ >{{ "后续文字" }}</div>
209
+ </jsv-flex-div>
210
+
211
+ </template>
@@ -4,6 +4,8 @@ import ActivityApp from "../MetroWidgetDemos/PerformanceTest/App.vue"; // TODO
4
4
  import { jJsvRuntimeBridge } from "jsview";
5
5
  import { ref, onMounted } from "vue";
6
6
 
7
+ // 本用例测试deepLink启动场景
8
+
7
9
  const getShowMode = () => {
8
10
  let showMode = 0;
9
11
  // showMode信息可被URL中的?后缀信息替换
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shijiu/jsview-vue-samples",
3
- "version": "2.3.151-test.0",
3
+ "version": "3.0.0-test.0",
4
4
  "license": "MIT",
5
5
  "repository": "system/jsview-framework",
6
6
  "author": "mengxk",
@@ -13,12 +13,12 @@
13
13
  ],
14
14
  "main": "index.mjs",
15
15
  "devDependencies": {
16
- "less": "4.1.3",
16
+ "less": "4.6.4",
17
17
  "mockjs": "1.1.0",
18
- "sass": "1.58.1",
19
- "stylus": "0.59.0"
18
+ "sass": "1.99.0",
19
+ "stylus": "0.64.0"
20
20
  },
21
21
  "engines": {
22
- "node": ">=16.0.0"
22
+ "node": ">=20.0.0"
23
23
  }
24
24
  }