@shijiu/jsview-vue-samples 2.3.151-test.0 → 2.3.728-alpha.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 (244) 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/DemoForOperator/Blur/Blur.vue +1 -1
  24. package/DemoForOperator/Blur/BlurInOut/BlurInOut.vue +49 -23
  25. package/DemoForOperator/Blur/BlurInOut/StaticBgSlide.vue +1 -1
  26. package/DemoForOperator/Blur/BlurPopup/BlurPopup.vue +156 -20
  27. package/DemoForOperator/BookFlip/App.vue +1 -1
  28. package/DemoForOperator/Bounce/FreeMoveBuilder.js +1 -1
  29. package/DemoForOperator/Firework1/App.vue +12 -1
  30. package/DemoForOperator/Firework1/Fireworks.vue +18 -0
  31. package/DemoForOperator/FlipPage/FlipPage/FlipPage.vue +1 -0
  32. package/DemoForOperator/Focus/Alpha/Item.vue +1 -0
  33. package/DemoForOperator/Focus/Light/Item.vue +1 -0
  34. package/DemoForOperator/Focus/Normal/Item.vue +1 -0
  35. package/DemoForOperator/Genie/App.vue +20 -6
  36. package/DemoForOperator/Genie/App2.vue +61 -0
  37. package/DemoForOperator/Genie/geniePakcer/GenieImage.vue +298 -0
  38. package/DemoForOperator/Genie/geniePakcer/GenieSlot.vue +292 -0
  39. package/DemoForOperator/Genie/geniePakcer/GenieTools.ts +463 -0
  40. package/DemoForOperator/Jigsaw/JigsawFull.vue +12 -7
  41. package/DemoForOperator/Jigsaw/JigsawSingle.vue +13 -7
  42. package/DemoForOperator/LongChatBox/App.vue +13 -13
  43. package/DemoForOperator/LongChatBox/Bubble.vue +78 -66
  44. package/DemoForOperator/LongChatBox/LongChat.vue +67 -36
  45. package/DemoForOperator/LongChatBox/testData.js +7 -44
  46. package/DemoForOperator/Sound/Bounce/FreeMoveBuilder.js +1 -1
  47. package/DemoForOperator/routeList.js +8 -2
  48. package/DemoHomepage/App.vue +74 -1
  49. package/DemoHomepage/components/BodyFrame.vue +5 -0
  50. package/DemoHomepage/components/TabFrame.vue +1 -1
  51. package/DemoHomepage/router.js +749 -165
  52. package/DemoHomepage/views/Homepage.vue +60 -2
  53. package/DemoHomepage/watchTest.vue +50 -0
  54. package/DomRenderer/App.vue +133 -0
  55. package/FilterDemo/AnimatePic.vue +63 -17
  56. package/FilterDemo/App.vue +3 -3
  57. package/FlexCellDemo/AI_skills_update.md +4 -0
  58. package/FlexCellDemo/TestFrame1.vue +12 -2
  59. package/FlexCellDemo/TestFrame2.vue +10 -1
  60. package/FlexCellDemo/TestFrame3.vue +114 -59
  61. package/FpsLimit/App.vue +102 -0
  62. package/FreeMove/App.vue +24 -279
  63. package/FreeMove/TestScene1.vue +260 -0
  64. package/FreeMove/TestScene3.vue +431 -0
  65. package/FreeMoveChildAttract/App.vue +18 -8
  66. package/FreeMoveLink/App.vue +51 -22
  67. package/Hover/App.vue +144 -0
  68. package/HttpRequestSSE/SSEReader.js +200 -0
  69. package/ImpactStop/App.vue +2 -2
  70. package/Input/FullKeyboard.vue +3 -3
  71. package/Input/InputPanel.vue +63 -3
  72. package/JsvLine/App.vue +53 -38
  73. package/LatexDemo/App.vue +3 -1
  74. package/LatexFormula/App.vue +196 -0
  75. package/LongImage/App.vue +1 -1
  76. package/LongImage/LongImageScroll.vue +111 -46
  77. package/LongImage/Scroll.vue +28 -9
  78. package/LongText/LongTextScroll.vue +14 -1
  79. package/Markdown/App.vue +36 -0
  80. package/Markdown/Bubble.vue +109 -0
  81. package/Markdown/LongChat.vue +216 -0
  82. package/Markdown/data.js +633 -0
  83. package/MetroWidgetDemos/AI_skills_update.md +2 -0
  84. package/MetroWidgetDemos/EpgFlowListType/App.vue +206 -0
  85. package/MetroWidgetDemos/EpgFlowListType/components/ContentCard.vue +105 -0
  86. package/MetroWidgetDemos/EpgFlowListType/components/FloorSection.vue +131 -0
  87. package/MetroWidgetDemos/EpgFlowListType/components/LeftTabItem.vue +41 -0
  88. package/MetroWidgetDemos/EpgFlowListType/data.js +78 -0
  89. package/MetroWidgetDemos/ListExpand/ChildItem.vue +130 -0
  90. package/MetroWidgetDemos/ListExpand/ExpandItem.vue +375 -0
  91. package/MetroWidgetDemos/ListExpand/ExpandItem1.vue +403 -0
  92. package/MetroWidgetDemos/ListExpand/assets/arrow-down.png +0 -0
  93. package/MetroWidgetDemos/ListExpand/assets/up-arrow.png +0 -0
  94. package/MetroWidgetDemos/ListExpand/components/WidgetListHandler.vue +150 -0
  95. package/MetroWidgetDemos/ListExpand/index.vue +88 -0
  96. package/MetroWidgetDemos/ListExpand/list.js +2421 -0
  97. package/MetroWidgetDemos/RefreshDemo/App.vue +14 -1
  98. package/MetroWidgetDemos/RenderAccelerate/App.vue +142 -0
  99. package/MetroWidgetDemos/RenderAccelerate/AppPage.vue +78 -0
  100. package/MetroWidgetDemos/RenderAccelerate/AppTab.vue +62 -0
  101. package/MetroWidgetDemos/RenderAccelerate/ContentItem.vue +409 -0
  102. package/MetroWidgetDemos/RenderAccelerate/Item.vue +67 -0
  103. package/MetroWidgetDemos/RenderAccelerate/TabItem.vue +100 -0
  104. package/MetroWidgetDemos/RenderAccelerate/ViewSwiper.vue +215 -0
  105. package/MetroWidgetDemos/RenderAccelerate/WidgetItem.vue +107 -0
  106. package/MetroWidgetDemos/SkeletonDiagram/App.vue +35 -8
  107. package/MetroWidgetDemos/SkeletonDiagram/Item.vue +11 -2
  108. package/MetroWidgetDemos/SkeletonDiagram/assets/imageList.js +245 -0
  109. package/MetroWidgetDemos/SkeletonDiagram/data.js +3 -3
  110. package/MetroWidgetDemos/SpatialNav/App.vue +177 -0
  111. package/MetroWidgetDemos/SpatialNav/Buttons.vue +83 -0
  112. package/MetroWidgetDemos/SpatialNav/CustomFocus.vue +57 -0
  113. package/MetroWidgetDemos/{TripleWidget → SpatialNav}/Item.vue +1 -8
  114. package/MetroWidgetDemos/{TripleWidget/WidgetItem.vue → SpatialNav/SimpleFloor.vue} +14 -45
  115. package/MetroWidgetDemos/SpatialNav/StepMw.vue +113 -0
  116. package/MetroWidgetDemos/SpatialNav/TabContent/TabContent.vue +185 -0
  117. package/MetroWidgetDemos/SpatialNav/TripleSection/TripleSection.vue +69 -0
  118. package/MetroWidgetDemos/SpatialNav/TripleSection/WidgetItem.vue +100 -0
  119. package/MetroWidgetDemos/SpatialNav/TvSection/List.vue +75 -0
  120. package/MetroWidgetDemos/SpatialNav/TvSection/TvSection.vue +91 -0
  121. package/MetroWidgetDemos/basic2/App.vue +407 -0
  122. package/MetroWidgetDemos/basic2/Item.vue +68 -0
  123. package/MetroWidgetDemos/direction/App.vue +22 -0
  124. package/MetroWidgetDemos/gazeFocusDiff/App.vue +126 -0
  125. package/MetroWidgetDemos/gazeFocusDiff/Item.vue +87 -0
  126. package/MetroWidgetDemos/minimalUsage/App.vue +66 -0
  127. package/MetroWidgetDemos/minimalUsage/Item.vue +54 -0
  128. package/MetroWidgetDemos/ninePatchFocusPage/App.vue +23 -7
  129. package/MetroWidgetDemos/ninePatchFocusPage/Item.vue +7 -5
  130. package/MetroWidgetDemos/ninePatchFocusPage/focusConstants.js +2 -0
  131. package/MetroWidgetDemos/routeList.js +216 -12
  132. package/MetroWidgetDemos/slideSetting/App.vue +288 -99
  133. package/MetroWidgetDemos/zIndex/App.vue +117 -0
  134. package/MetroWidgetDemos/zIndex/Item.vue +61 -0
  135. package/NinePatchTester/App.vue +24 -31
  136. package/PreDecode/App.vue +140 -0
  137. package/ReactiveTest/App.vue +115 -0
  138. package/ReactiveTest/Item.vue +92 -0
  139. package/ReactiveTest/assets/imageList.js +245 -0
  140. package/ReactiveTest/component/TestSmartDiv.vue +50 -0
  141. package/ReactiveTest/component/TestSmartDivSrcList.vue +74 -0
  142. package/ReactiveTest/component/TestSmartImage.vue +46 -0
  143. package/ReactiveTest/component/TestSmartImageSrcList.vue +90 -0
  144. package/ReactiveTest/component/TestSmartImageStyle.vue +41 -0
  145. package/ReactiveTest/data.js +49 -0
  146. package/ScreenToBlob/App.vue +250 -0
  147. package/ScrollBoxTest/App.vue +52 -28
  148. package/ScrollBoxTest/ClipBar.vue +64 -2
  149. package/ScrollBoxTest/NinePatchBar.vue +64 -2
  150. package/ScrollBoxTest/SizeDivBar.vue +64 -2
  151. package/SecTorTest/App.vue +9 -3
  152. package/SpringFestival/SpringFestivalScene/FreeMoveBuilder.js +3 -3
  153. package/SyncDecode/App.vue +137 -0
  154. package/TextSizeLimit/App.vue +211 -0
  155. package/TextureAnimation/App3.vue +11 -1
  156. package/TouchWidget/App.vue +90 -5
  157. package/TouchWidget/WidgetItem.vue +1 -0
  158. package/TransitPage/App.vue +2 -0
  159. package/assets/logo.png +0 -0
  160. package/package.json +1 -1
  161. package/DemoForOperator/BookFlip/BookFlip/FlipPage.vue +0 -179
  162. package/DemoForOperator/BookFlip/BookFlip/FlippingBook.vue +0 -310
  163. package/DemoForOperator/BookFlip/BookFlip/flip.glsl +0 -135
  164. package/DemoForOperator/Genie/geniePakcer/Genie.vue +0 -741
  165. package/DemoForOperator/LongChatBox/TextManager.ts +0 -147
  166. package/DemoForOperator/LongChatBox/VirtualList.vue +0 -298
  167. package/DemoForOperator/LongChatBox/utile.js +0 -331
  168. package/DivMetroPerformance/App.vue +0 -157
  169. package/DivMetroPerformance/Item.vue +0 -58
  170. package/DivMetroPerformance/assets/bg.jpg +0 -0
  171. package/DivMetroPerformance/assets/coupon_content.png +0 -0
  172. package/DivMetroPerformance/assets/coupon_left.png +0 -0
  173. package/DivMetroPerformance/assets/coupon_mid.png +0 -0
  174. package/DivMetroPerformance/assets/coupon_right.png +0 -0
  175. package/DivMetroPerformance/assets/focus_border.png +0 -0
  176. package/DivMetroPerformance/assets/holder_logo.png +0 -0
  177. package/DivMetroPerformance/assets/jrbm.png +0 -0
  178. package/DivMetroPerformance/assets/line_left.png +0 -0
  179. package/DivMetroPerformance/assets/line_mid.png +0 -0
  180. package/DivMetroPerformance/assets/line_right.png +0 -0
  181. package/DivMetroPerformance/assets/loading.png +0 -0
  182. package/DivMetroPerformance/assets/logo.png +0 -0
  183. package/DivMetroPerformance/assets/mcjx.png +0 -0
  184. package/DivMetroPerformance/assets/tao.png +0 -0
  185. package/DivMetroPerformance/assets/tmall.png +0 -0
  186. package/DivMetroPerformance/border.png +0 -0
  187. package/DivMetroPerformance/components/ContentItem.vue +0 -384
  188. package/DivMetroPerformance/components/MyTab.vue +0 -129
  189. package/DivMetroPerformance/data.js +0 -124
  190. package/DivMetroPerformance/utils/GridItem.vue +0 -28
  191. package/DivMetroPerformance/utils/GridPlate.vue +0 -85
  192. package/MediaDemo/App.vue +0 -127
  193. package/MediaDemo/assets/audio-poster.png +0 -0
  194. package/MediaDemo/components/Button.vue +0 -69
  195. package/MediaDemo/components/Controllor.vue +0 -286
  196. package/MediaDemo/components/StatusBar.vue +0 -100
  197. package/MediaDemo/components/frames/AudioFrame.vue +0 -39
  198. package/MediaDemo/components/frames/AudioPoster.vue +0 -48
  199. package/MediaDemo/components/frames/MediaFrame.vue +0 -153
  200. package/MediaDemo/components/frames/VideoFrame.vue +0 -39
  201. package/MetroWidgetDemos/TripleWidget/App.vue +0 -87
  202. package/MetroWidgetDemos/TripleWidget/SWidgetItem.vue +0 -99
  203. package/Parkour/App.vue +0 -13
  204. package/Parkour/Common/Context.js +0 -21
  205. package/Parkour/Common/MatchmanInfo.js +0 -62
  206. package/Parkour/Common/Random.js +0 -61
  207. package/Parkour/Common/Sound.js +0 -50
  208. package/Parkour/appConfig/HOW_TO_CONFIG.md +0 -20
  209. package/Parkour/appConfig/app.config.mjs +0 -5
  210. package/Parkour/appConfig/app_sign_private_key_sample.crt +0 -28
  211. package/Parkour/appConfig/app_sign_public_key_sample.pem +0 -9
  212. package/Parkour/appConfig/jsview.config.mjs +0 -39
  213. package/Parkour/assets/Bgimages/bg1.png +0 -0
  214. package/Parkour/assets/Bgimages/bg2.png +0 -0
  215. package/Parkour/assets/Bgimages/bg3.png +0 -0
  216. package/Parkour/assets/Bgimages/bg4.png +0 -0
  217. package/Parkour/assets/Bgimages/bg5.png +0 -0
  218. package/Parkour/assets/audio/jump.mp3 +0 -0
  219. package/Parkour/assets/audio/lose.mp3 +0 -0
  220. package/Parkour/assets/role_skin1/fail.json +0 -44
  221. package/Parkour/assets/role_skin1/fail.png +0 -0
  222. package/Parkour/assets/role_skin1/jump_down.json +0 -20
  223. package/Parkour/assets/role_skin1/jump_down.png +0 -0
  224. package/Parkour/assets/role_skin1/jump_up.json +0 -44
  225. package/Parkour/assets/role_skin1/jump_up.png +0 -0
  226. package/Parkour/assets/role_skin1/roll.json +0 -44
  227. package/Parkour/assets/role_skin1/roll.png +0 -0
  228. package/Parkour/assets/role_skin1/run.json +0 -52
  229. package/Parkour/assets/role_skin1/run.png +0 -0
  230. package/Parkour/components/Backdrop.vue +0 -61
  231. package/Parkour/components/GameSence.vue +0 -602
  232. package/Parkour/components/Matchman.vue +0 -85
  233. package/TextureAnimation/utils/FrameCanvasStore.ts +0 -68
  234. package/TextureAnimation/utils/RotateFrame.vue +0 -146
  235. package/TextureAnimation/utils/circleHaloMask.png +0 -0
  236. package/ThrowMoveDemo/AccelerateDemo.vue +0 -85
  237. package/ThrowMoveDemo/App.vue +0 -104
  238. package/ThrowMoveDemo/LRParabolicDemo.vue +0 -101
  239. package/ThrowMoveDemo/TargetDemo.vue +0 -87
  240. package/ThrowMoveDemo/UDParabolicDemo.vue +0 -92
  241. /package/{AnimPicture/assets → assets}/animated_webp.webp +0 -0
  242. /package/{AnimPicture/assets → assets}/ball_3.webp +0 -0
  243. /package/{AnimPicture/assets → assets}/girl_run.gif +0 -0
  244. /package/{AnimPicture/assets → assets}/quan.webp +0 -0
@@ -0,0 +1,114 @@
1
+ <script setup>
2
+ /**
3
+ * @description: 图片交替展示示例
4
+ * 如本样例的item.vue所示, 使用 JsvPosterImage/JsvPosterDiv 组件, 设置 srcList 属性,
5
+ * 将AB两个图作为非响应式数组输入到组件中, 即可实现AB都载入到内存,切换时不会闪
6
+ * 相比Preload进行预加载,此方案没有Preload的图永久在内存的问题,AB两图会根据显隐的控制在不显示时自动**同时**清理出内存
7
+ */
8
+ import { MetroWidget, VERTICAL, useFocusHub, JsvTextureStoreApi } from "jsview";
9
+ import Item from "./Item.vue";
10
+ import { onMounted, inject, shallowRef } from "vue";
11
+ import { useRouter } from "vue-router";
12
+ import data from "./data.js";
13
+ import logo from "../assets/logo.png";
14
+
15
+ const router = useRouter();
16
+ const focusHub = useFocusHub();
17
+
18
+ const measures = (item) => {
19
+ return {
20
+ width: item.width,
21
+ height: item.height,
22
+ marginRight: 10,
23
+ marginBottom: 10,
24
+ placeHolderLayout: {
25
+ width: item.width,
26
+ height: item.height,
27
+ logoWidth: item.index % 2 == 0 ? 120 : 60,
28
+ logoHeight: item.index % 2 == 0 ? 98 : 49,
29
+ },
30
+ };
31
+ };
32
+
33
+ let rCaptureImage = inject("homeCaptureImage");
34
+ let rToCaputureNode = shallowRef(null);
35
+
36
+ const onDispatchKeyDown = (ev) => {
37
+ return false;
38
+ };
39
+
40
+ const onKeyDown = (ev) => {
41
+ if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
42
+ // 返回处理, 测试跨路由截图功能
43
+ JsvTextureStoreApi.capture2Texture(
44
+ rToCaputureNode.value,
45
+ (textureName, autoRecycle, w, h) => {
46
+ console.log("test ImageCapture done");
47
+ rCaptureImage.value = textureName;
48
+ router.go(-1);
49
+ },
50
+ false // 不自动回收
51
+ );
52
+ }
53
+ return true;
54
+ };
55
+
56
+ const provideData = () => {
57
+ return data;
58
+ };
59
+
60
+ onMounted(() => {
61
+ focusHub.setFocus("myFocusWidget");
62
+ });
63
+ </script>
64
+
65
+ <template>
66
+ <div
67
+ ref="rToCaputureNode"
68
+ :style="{
69
+ width: 1280,
70
+ height: 720,
71
+ }"
72
+ >
73
+ <jsv-focus-block
74
+ :style="{
75
+ width: 1920,
76
+ height: 1080,
77
+ backgroundColor: '#007788',
78
+ }"
79
+ :onKeyDown="onKeyDown"
80
+ :onDispatchKeyDown="onDispatchKeyDown"
81
+ >
82
+ <metro-widget
83
+ name="myFocusWidget"
84
+ :top="50"
85
+ :left="50"
86
+ :width="1000"
87
+ :height="550"
88
+ :direction="VERTICAL"
89
+ :provideData="provideData"
90
+ :measures="measures"
91
+ :padding="{ left: 50, right: 50, top: 50, bottom: 50 }"
92
+ :enableItemRenderBreak="true"
93
+ :placeHolderSetting="{
94
+ backgroundColor: 'rgba(78,105,127, 0.8)',
95
+ focusBackgroundColor: '#770088aa',
96
+ borderRadius: 10,
97
+ gap: 10,
98
+ logoUrl: logo,
99
+ logoWidth: 120,
100
+ logoHeight: 98,
101
+ }"
102
+ >
103
+ <template #renderItem="{ data, query, onEdge, onAction }">
104
+ <item
105
+ :data="data"
106
+ :query="query"
107
+ :onEdge="onEdge"
108
+ :onAction="onAction"
109
+ />
110
+ </template>
111
+ </metro-widget>
112
+ </jsv-focus-block>
113
+ </div>
114
+ </template>
@@ -0,0 +1,133 @@
1
+ <!--
2
+ * @Author: ChenChanghua
3
+ * @Date: 2023-02-06 10:19:42
4
+ * @Description: file content
5
+ -->
6
+ <script setup>
7
+ import { ref, shallowRef, computed, watchEffect } from "vue";
8
+ import { JsvPosterImage, JsvPosterDiv } from "jsview";
9
+
10
+ const props = defineProps({
11
+ data: Object,
12
+ query: Object,
13
+ onEdge: Function,
14
+ onAction: Object,
15
+ });
16
+
17
+ let focused = ref(false);
18
+ let borderSet = ref("10");
19
+ let doFadeIn = ref(true);
20
+
21
+ // const altSrcs = [props.data.url, props.data.focusUrl];
22
+ const altSrcs = [props.data.focusUrl, props.data.url];
23
+
24
+ const onFocus = () => {
25
+ focused.value = true;
26
+ borderSet.value = "10 0 10 0";
27
+ doFadeIn.value = false;
28
+ };
29
+
30
+ const onBlur = () => {
31
+ focused.value = false;
32
+ borderSet.value = "10";
33
+ };
34
+
35
+ const onClicked = () => {
36
+ console.log(`item ${props.query.id} clicked`);
37
+ };
38
+
39
+ props.onAction.register("onFocus", onFocus);
40
+ props.onAction.register("onBlur", onBlur);
41
+ props.onAction.register("onClick", onClicked);
42
+
43
+ const posterStyle = computed(() => {
44
+ // computed写法后,若borderSet不和focused绑定, 则不会重新触发style的设置, 相比template直接写style会减少响应式消耗
45
+ return {
46
+ width: props.data.width,
47
+ height: props.data.height,
48
+ borderRadius: borderSet.value,
49
+ }
50
+ });
51
+
52
+ </script>
53
+
54
+ <template>
55
+ <div
56
+ :style="{
57
+ width: data.width,
58
+ height: data.height,
59
+ transition: 'transform 0.25s linear',
60
+ transform: focused ? 'scale3d(1.1, 1.1, 1)' : '',
61
+ }"
62
+ >
63
+ <div
64
+ v-if="focused"
65
+ :style="{
66
+ left: -10,
67
+ top: -10,
68
+ width: props.data.width + 20,
69
+ height: props.data.height + 20,
70
+ backgroundColor: '#770088',
71
+ borderRadius: 10,
72
+ }"
73
+ >
74
+ </div>
75
+ <div v-if="query.index % 2 == 0">
76
+ <jsv-poster-image
77
+ :style="posterStyle"
78
+ :altImages="altSrcs"
79
+ :altIndex="focused ? 1 : 0"
80
+ :altSync="query.index % 4 == 0 ? false : true"
81
+ >
82
+ <div
83
+ :style="{
84
+ width: data.width,
85
+ height: data.height,
86
+ backgroundColor: '#ff0000',
87
+ borderRadius: 10,
88
+ }"
89
+ />
90
+ </jsv-poster-image>
91
+ <div
92
+ :style="{
93
+ top:8,
94
+ left:8,
95
+ width: 40,
96
+ height: 30,
97
+ backgroundColor: '#007788',
98
+ fontSize: 20,
99
+ }"
100
+ >
101
+ {{ "img" }}
102
+ </div>
103
+ </div>
104
+ <div v-else>
105
+ <jsv-poster-div
106
+ :style="posterStyle"
107
+ :altImages="altSrcs"
108
+ :altIndex="focused ? 1 : 0"
109
+ >
110
+ <div
111
+ :style="{
112
+ width: data.width,
113
+ height: data.height,
114
+ backgroundColor: '#ff0000',
115
+ borderRadius: 10,
116
+ }"
117
+ />
118
+ </jsv-poster-div>
119
+ <div
120
+ :style="{
121
+ top:8,
122
+ left:8,
123
+ width: 40,
124
+ height: 30,
125
+ backgroundColor: '#007788',
126
+ fontSize: 20,
127
+ }"
128
+ >
129
+ {{ "div" }}
130
+ </div>
131
+ </div>
132
+ </div>
133
+ </template>
@@ -1,4 +1,9 @@
1
- [
1
+ import webp from "../../assets/animated_webp.webp"
2
+ import gif from "../../assets/girl_run.gif"
3
+ import staticWebp from "../../assets/webpDemo.webp"
4
+
5
+
6
+ export const imageList = [
2
7
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/089049108f2d1246ae9d6dc3d123dd44.jpeg",
3
8
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/5c7acca00d79a4ddde978cf0a4e88d31.jpeg",
4
9
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/c1fbeecb0d930c5aed173289b1cbe659.jpeg",
@@ -6,6 +11,9 @@
6
11
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/5b1c19c766fce2c9df19f66519626e30.jpeg",
7
12
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/c3e8959a45ac2a3723ee0908dae640df.jpeg",
8
13
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/1652a0867e68dd1ec679eb1c81df1188.jpeg",
14
+ webp,
15
+ gif,
16
+ staticWebp,
9
17
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/be821910e1a6180e.jpg",
10
18
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/dd4b1c7471613493.jpg",
11
19
  "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/MetroWidgetDemos/SkeletonDiagram/assets/imageList/a06164b26590b994.jpg",
@@ -0,0 +1,17 @@
1
+ /*
2
+ * @Author: ChenChanghua
3
+ * @Date: 2023-02-06 10:21:46
4
+ * @Description: file content
5
+ */
6
+ import { imageList } from "./assets/imageList.js"
7
+ let data = [];
8
+ for (let i = 0; i < Math.floor(imageList.length / 2); ++i) {
9
+ data.push({
10
+ width: 200,
11
+ height: 200,
12
+ url: imageList[i*2],
13
+ focusUrl: imageList[i*2+1],
14
+ index: i,
15
+ });
16
+ }
17
+ export default data;
@@ -0,0 +1,5 @@
1
+ 1. 不读取那些顶层 demo 目录完全没对应任何一条路由的样例(路由中注释掉的样例也属于不包含), 路由文件位置:
2
+ DemoForOperator/routeList.js
3
+ DemoHomepage/router.js
4
+ MetroWidgetDemos/routeList.js
5
+
@@ -20,15 +20,16 @@ import {
20
20
  } from "jsview";
21
21
  import Item from "./Item.vue";
22
22
 
23
- import catRun from "./assets/animated_webp.webp";
24
- import girlRun from "./assets/girl_run.gif";
25
- import quan from "./assets/quan.webp";
26
- import ball from "./assets/ball_3.webp";
23
+ import catRun from "../assets/animated_webp.webp";
24
+ import girlRun from "../assets/girl_run.gif";
25
+ import quan from "../assets/quan.webp";
26
+ import ball from "../assets/ball_3.webp";
27
27
 
28
28
  const focusHub = useFocusHub();
29
29
  let catRunPlay = ref(false);
30
30
  let girlRunPlay = ref(false);
31
31
  let quanPlay = ref(false);
32
+ let quanDoPlay = ref(false);
32
33
  let ballPlay = ref(false);
33
34
 
34
35
  const catRunCallback = {
@@ -49,9 +50,12 @@ const girlRunCallback = {
49
50
  };
50
51
  const quanCallback = {
51
52
  onStart: () => {
53
+ console.log("quanCallback.onStart");
52
54
  quanPlay.value = true;
53
55
  },
54
56
  onEnd: () => {
57
+ console.log("quanCallback.onEnd");
58
+ quanDoPlay.value = false;
55
59
  quanPlay.value = false;
56
60
  },
57
61
  };
@@ -68,6 +72,12 @@ let girlRunRef = ref(null);
68
72
  let quanRef = ref(null);
69
73
  let ballRef = ref(null);
70
74
 
75
+ const doPlayQuan = () => {
76
+ quanDoPlay.value = true;
77
+ quanRef.value.play(LoopType.LOOP_FINITE, 1, ApicEndState.HIDE);
78
+ quanPlay.value = true;
79
+ }
80
+
71
81
  let preClickIndex = -1;
72
82
  const data = [
73
83
  {
@@ -109,8 +119,7 @@ const data = [
109
119
  quanRef.value.stop();
110
120
  quanPlay.value = false;
111
121
  } else {
112
- quanRef.value.play();
113
- quanPlay.value = true;
122
+ doPlayQuan();
114
123
  }
115
124
  }
116
125
  },
@@ -208,8 +217,10 @@ const measures = (item) => {
208
217
  };
209
218
 
210
219
  onMounted(() => {
211
- catRunRef.value.play();
220
+ catRunRef.value.play(); // 测试手动启动cat
221
+ doPlayQuan(); // 测试手动启动优惠券
212
222
  focusHub.setFocus("myWidget");
223
+ console.log("Ludl anim onMounted");
213
224
  });
214
225
  </script>
215
226
 
@@ -244,12 +255,11 @@ onMounted(() => {
244
255
  </div>
245
256
 
246
257
  <div :style="{ left: 540, top: 20 }">
247
- <JsvApic
258
+ <JsvApic2
259
+ v-show="quanDoPlay"
248
260
  ref="quanRef"
249
261
  :src="`url(${quan})`"
250
262
  :style="{ width: 250, height: 296 }"
251
- :autoPlay="true"
252
- :loopType="LoopType.LOOP_DEFAULT"
253
263
  :onStart="quanCallback.onStart"
254
264
  :onEnd="quanCallback.onEnd"
255
265
  />
@@ -0,0 +1,90 @@
1
+ <template>
2
+ <div
3
+ :style="{
4
+ width: 1280,
5
+ height: 720,
6
+ backgroundColor: '#007788',
7
+ }"
8
+ ></div>
9
+ <JsvPreload :preloadList="preloadList"></JsvPreload>
10
+ <div
11
+ :style="{
12
+ width: 1280,
13
+ height: 100,
14
+ top: 10,
15
+ textAlign: 'center',
16
+ fontSize: 30,
17
+ color: '#ffffff',
18
+ }"
19
+ >
20
+ 移动焦点不闪
21
+ </div>
22
+ <metro-widget
23
+ name="tablist"
24
+ :width="1920"
25
+ :height="95"
26
+ :provideData="tabData"
27
+ :direction="HORIZONTAL"
28
+ :measures="measures"
29
+ :style="{
30
+ left: 137,
31
+ top: 63,
32
+ }"
33
+ :touchFlag="1"
34
+ :initFocusId="0"
35
+ >
36
+ <template #renderItem="{ data, query, onEdge, onAction }">
37
+ <TabItem
38
+ :data="data"
39
+ :query="query"
40
+ :onEdge="onEdge"
41
+ :onAction="onAction"
42
+ />
43
+ </template>
44
+ </metro-widget>
45
+ </template>
46
+
47
+ <script setup>
48
+ import {
49
+ MetroWidget,
50
+ useFocusHub,
51
+ HORIZONTAL,
52
+ buildPreloadInfo,
53
+ JsvPreload,
54
+ } from "jsview";
55
+ import TabItem from "./TabItem.vue";
56
+ import { onMounted } from "vue";
57
+ import { data } from "./data";
58
+
59
+ const focusHub = useFocusHub();
60
+ const props = defineProps({
61
+ data: Array,
62
+ });
63
+
64
+ //预加载
65
+ let preloadList = [];
66
+ for (let i = 0; i < data.length; i++) {
67
+ const item = data[i];
68
+ preloadList.push(buildPreloadInfo(item.unFocusImage));
69
+ }
70
+ console.log(preloadList);
71
+
72
+ //数据变形成需要的数据
73
+ const tabData = () => {
74
+ return data;
75
+ };
76
+ const measures = (item) => {
77
+ return {
78
+ width: 115,
79
+ height: 95,
80
+ marginRight: 20,
81
+ enableTap: true,
82
+ };
83
+ };
84
+
85
+ onMounted(() => {
86
+ focusHub.setFocus("tablist");
87
+ });
88
+ </script>
89
+
90
+ <style scoped></style>
@@ -0,0 +1,65 @@
1
+ <template>
2
+ <JsvPreload
3
+ v-if="!rFocus"
4
+ :preloadList="rPreload_info"
5
+ :onPreloadDone="onPreloadDone"
6
+ ></JsvPreload>
7
+
8
+ <div
9
+ v-if="!rFocus || !webpPreloadingDone"
10
+ :style="{
11
+ width: 115,
12
+ height: 95,
13
+ borderRadius: 5,
14
+ backgroundImage: props.data.unFocusImage,
15
+ }"
16
+ ></div>
17
+ <div v-if="rFocus" :style="{ width: 115, height: 95 }">
18
+ <WebpShow :imgUrl="props.data.focusImage"></WebpShow>
19
+ </div>
20
+ </template>
21
+
22
+ <script setup>
23
+ import { onBeforeUnmount, shallowRef, reactive, ref } from "vue";
24
+ import { JsvPreload, buildPreloadInfo } from "jsview";
25
+ import WebpShow from "./WebpShow.vue";
26
+ const props = defineProps({
27
+ data: Object,
28
+ onAction: Object,
29
+ query: Object,
30
+ onEdge: Function,
31
+ });
32
+
33
+ const rPreload_info = [buildPreloadInfo(props.data.focusImage)];
34
+ const webpPreloadingDone = ref(true);
35
+ const onPreloadDone = () => {
36
+ webpPreloadingDone.value = true;
37
+ };
38
+
39
+ let rFocus = shallowRef(false);
40
+ const cTabTimer = { id: -1 };
41
+ const onFocus = () => {
42
+ rFocus.value = true;
43
+ };
44
+ // 监听onFocus事件
45
+ props.onAction.register("onFocus", onFocus);
46
+ const onBlur = () => {
47
+ rFocus.value = false;
48
+ webpPreloadingDone.value = false;
49
+ };
50
+ // 监听onBlur事件
51
+ props.onAction.register("onBlur", onBlur);
52
+ const onClick = () => {
53
+ console.log("onClick");
54
+ };
55
+ props.onAction.register("onClick", onClick);
56
+
57
+ onBeforeUnmount(() => {
58
+ if (cTabTimer.id) {
59
+ clearTimeout(cTabTimer.id);
60
+ cTabTimer.id = -1;
61
+ }
62
+ });
63
+ </script>
64
+
65
+ <style scoped></style>
@@ -0,0 +1,24 @@
1
+ <template>
2
+ <JsvApic2
3
+ ref="rImageRef"
4
+ :src="`url(${props.imgUrl})`"
5
+ :style="{ width: 115, height: 95 }"
6
+ />
7
+ </template>
8
+
9
+ <script setup>
10
+ import { onMounted, shallowRef } from "vue";
11
+ import { JsvApic2 } from "jsview";
12
+ const props = defineProps({
13
+ imgUrl: String,
14
+ });
15
+ let rImageRef = shallowRef(null);
16
+
17
+ onMounted(() => {
18
+ console.log("onMounted");
19
+ rImageRef.value.show(0);
20
+ rImageRef.value.play();
21
+ });
22
+ </script>
23
+
24
+ <style lang="scss" scoped></style>
@@ -0,0 +1,50 @@
1
+ export const data = [
2
+ {
3
+ name: "逻辑",
4
+ id: "310",
5
+ focusImage:
6
+ "https://oss.image.qcast.cn/homepage/20230918/588f58ae8061dc022093b23c96e95fd2.webp",
7
+ unFocusImage:
8
+ "https://oss.image.qcast.cn/homepage/20230918/f3f4465e85e620fc5876404aebafd535.png",
9
+ },
10
+ {
11
+ name: "观察",
12
+ id: "309",
13
+ focusImage:
14
+ "https://oss.image.qcast.cn/homepage/20230918/a119f14c4411c2ebd04b3e77aa25bfc8.webp",
15
+ unFocusImage:
16
+ "https://oss.image.qcast.cn/homepage/20230918/90dcf106034017307d1cbe1d075e59c4.png",
17
+ },
18
+ {
19
+ name: "常识",
20
+ id: "308",
21
+ focusImage:
22
+ "https://oss.image.qcast.cn/homepage/20230918/0ac608408c1e1bd90a5afedc93d772fd.webp",
23
+ unFocusImage:
24
+ "https://oss.image.qcast.cn/homepage/20230918/dfb674467e7e9156c0ad1f6e49684688.png",
25
+ },
26
+ {
27
+ name: "艺术",
28
+ id: "307",
29
+ focusImage:
30
+ "https://oss.image.qcast.cn/homepage/20230918/bb0e8f720c6bc8a4393d2145e4ff7a56.webp",
31
+ unFocusImage:
32
+ "https://oss.image.qcast.cn/homepage/20230918/9eef0e4ee11e00b262110017bbf0005c.png",
33
+ },
34
+ {
35
+ name: "运动",
36
+ id: "306",
37
+ focusImage:
38
+ "https://oss.image.qcast.cn/homepage/20230918/56b4ee34821ecef14b3e393085c49d25.webp",
39
+ unFocusImage:
40
+ "https://oss.image.qcast.cn/homepage/20230918/fc455e46d1e66a9ffdf5f3e43f9215c5.png",
41
+ },
42
+ {
43
+ name: "识字",
44
+ id: "305",
45
+ focusImage:
46
+ "https://oss.image.qcast.cn/homepage/20230918/00503db39e3914d2d2b3da6b4bc45062.webp",
47
+ unFocusImage:
48
+ "https://oss.image.qcast.cn/homepage/20230918/a7207efea1f32953d2844180010f4018.png",
49
+ },
50
+ ];
@@ -0,0 +1 @@
1
+ @shijiu/jsview-vue-samples/Basic 整理这里面的所有css用法,这个是jsview所能使用的css写法, 之外的写法都不支持, 归纳结果放到 jsview-best-practices 的skills中
@@ -0,0 +1,93 @@
1
+ <script setup>
2
+ // 6 种颜色格式测试,每行 3 个,共两行
3
+ const itemStyle = {
4
+ width: 70,
5
+ height: 30,
6
+ };
7
+ const gap = 4;
8
+ const rowHeight = itemStyle.height + gap;
9
+ const colWidth = itemStyle.width + gap;
10
+ </script>
11
+
12
+ <template>
13
+ <div id="layout-root">
14
+ <div
15
+ class="content-font"
16
+ :style="{
17
+ top: 0,
18
+ left: 0,
19
+ width: itemStyle.width,
20
+ height: itemStyle.height,
21
+ backgroundColor: '#993366',
22
+ opacity: 0.5,
23
+ }"
24
+ >
25
+ #RRGGBB
26
+ </div>
27
+ <div
28
+ class="content-font"
29
+ :style="{
30
+ top: 0,
31
+ left: colWidth,
32
+ width: itemStyle.width,
33
+ height: itemStyle.height,
34
+ backgroundColor: '#99336680',
35
+ }"
36
+ >
37
+ #RRGGBBAA
38
+ </div>
39
+ <div
40
+ class="content-font"
41
+ :style="{
42
+ top: 0,
43
+ left: colWidth * 2,
44
+ width: itemStyle.width,
45
+ height: itemStyle.height,
46
+ whiteSpace: 'normal',
47
+ backgroundColor: 'rgba(153, 51, 102, 0.5)',
48
+ }"
49
+ >
50
+ rgba()
51
+ </div>
52
+ <div
53
+ class="content-font"
54
+ :style="{
55
+ top: rowHeight,
56
+ left: 0,
57
+ width: itemStyle.width,
58
+ height: itemStyle.height,
59
+ backgroundColor: 'rgb(153, 51, 102)',
60
+ }"
61
+ >
62
+ rgb()
63
+ </div>
64
+ <div
65
+ class="content-font"
66
+ :style="{
67
+ top: rowHeight,
68
+ left: colWidth,
69
+ width: itemStyle.width,
70
+ height: itemStyle.height,
71
+ backgroundColor: '#9368',
72
+ }"
73
+ >
74
+ #RGBA
75
+ </div>
76
+ <div
77
+ class="content-font"
78
+ :style="{
79
+ top: rowHeight,
80
+ left: colWidth * 2,
81
+ width: itemStyle.width,
82
+ height: itemStyle.height,
83
+ backgroundColor: '#936',
84
+ }"
85
+ >
86
+ #RGB
87
+ </div>
88
+ </div>
89
+ </template>
90
+
91
+ <style>
92
+ @import "../FontStyle.css";
93
+ </style>