@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
@@ -15,119 +15,266 @@ let routeList = [
15
15
  keepAlive: true // 需要被缓存(测试Router keep alive机制)
16
16
  }
17
17
  },
18
+
19
+ // ========== feature ==========
20
+ /*
21
+ * 基础示例合集
22
+ *
23
+ * 对应的应用场景:
24
+ * div, img标签, jsview所兼容的css设置样例
25
+ * (包含通过transition和transform属性来简单实现动画的场景)
26
+ */
18
27
  {
19
28
  meta: { nameText: '基础示例合集', },
20
29
  name: "feature-基础示例合集",
21
30
  path: '/feature/Basic',
22
31
  component: () => import('@shijiu/jsview-vue-samples/Basic/App.vue'),
23
32
  },
33
+
34
+ /**
35
+ * Dom文本渲染
36
+ *
37
+ * 对应场景:
38
+ * 题库后台给的数据是一段 dom 文本需要模仿浏览器显示出来
39
+ */
40
+ {
41
+ meta: { nameText: 'Dom文本渲染', },
42
+ name: "feature-Dom文本渲染",
43
+ path: '/feature/DomRenderer',
44
+ component: () => import('@shijiu/jsview-vue-samples/DomRenderer/App.vue'),
45
+ },
46
+
47
+ /*
48
+ * 截图Blob
49
+ *
50
+ * 对应的应用场景:
51
+ * 1. 对div截图后, 生成blob, 然后用div或者img标签展示此blob的图像的场景
52
+ * 2. 使用图片url来生成blob, 然后用div或者img标签展示此blob的图像的场景
53
+ */
54
+ {
55
+ meta: { nameText: '截图Blob', },
56
+ name: 'feature-截图Blob',
57
+ path: '/feature/ScreenToBlob',
58
+ component: () => import('@shijiu/jsview-vue-samples/ScreenToBlob/App.vue'),
59
+ },
60
+
24
61
  // {
25
62
  // meta: { nameText: 'FreeMoveResize', },
26
63
  // path: '/feature/FreeMoveResize',
27
64
  // component: () => import('@shijiu/jsview-vue-samples/FreeMoveResize/App.vue'),
28
65
  // },
29
- {
30
- meta: { nameText: '3d移动动画', },
31
- name: "Operations-3d移动动画",
32
- path: '/Operations/3dMove',
33
- component: () => import('jsview-vue-samples/Poster3d/App.vue'),
34
- },
35
- {
36
- meta: { nameText: '烟花行进特效', },
37
- name: "Operations-烟花行进特效",
38
- path: '/Operations/SprayMove',
39
- component: () => import('jsview-vue-samples/SprayMove/App.vue'),
40
- },
41
- {
42
- meta: { nameText: '海报图收放组件', },
43
- name: "Operations-海报图收放组件",
44
- path: '/Operations/PosterPacker',
45
- component: () => import('jsview-vue-samples/PosterPacker/App.vue'),
66
+
67
+ /*
68
+ * Blob加载测试
69
+ *
70
+ * 对应的应用场景:
71
+ * 使用XMLHttpRequest请求blob,然后使用BlobApi.createObjectURL来创建blob的URL,
72
+ * 并通过img标签展示blob的图像的场景
73
+ */
74
+ {
75
+ meta: { nameText: 'Blob加载测试', },
76
+ name: "feature-Blob加载测试",
77
+ path: '/feature/BlobLoadTest',
78
+ component: () => import('@shijiu/jsview-vue-samples/BlobLoadTest/App.vue'),
46
79
  },
80
+
81
+ /*
82
+ * div快照功能
83
+ *
84
+ * 对应的应用场景:
85
+ * 对div截图后, 用另一个div或者img标签展示截图的图像的场景
86
+ */
47
87
  {
48
88
  meta: { nameText: 'div快照功能', },
49
89
  name: "feature-div快照功能",
50
90
  path: '/feature/BakeViewDemo',
51
91
  component: () => import('@shijiu/jsview-vue-samples/BakeViewDemo/App.vue'),
52
92
  },
93
+
94
+ /*
95
+ * FlexDemo
96
+ *
97
+ * 对应的应用场景:
98
+ * 使用Flex布局的场景, 注意JsvFlexDiv组件只支持一层子的flex, 多层场景要使用JsvFlexCell嵌套
99
+ */
53
100
  {
54
101
  meta: { nameText: 'FlexDemo', },
55
102
  name: "feature-FlexDemo",
56
103
  path: '/feature/FlexDemo',
57
104
  component: () => import('@shijiu/jsview-vue-samples/FlexCellDemo/App.vue')
58
105
  },
106
+
107
+ /*
108
+ * ScreenFlex
109
+ *
110
+ * 对应的应用场景:
111
+ * 展示用 JsvScreenFlex 组件实现全屏范围的居中对齐, 右上角和左下角对齐的场景
112
+ * 主要解决在非16:9比例的屏幕上, 制作自适应铺满全屏的UI时如何进行对齐的场景
113
+ * PS: 普通的16:9应用上非16:9屏幕时, 建议采用背景图铺满, 内容通过JsvScreenFlex居中显示的布局
114
+ */
59
115
  {
60
116
  meta: { nameText: 'ScreenFlex', },
61
117
  name: "feature-ScreenFlex",
62
118
  path: '/feature/ScreenFlex',
63
119
  component: () => import('@shijiu/jsview-vue-samples/FullScreenFlex/App.vue')
64
120
  },
121
+
122
+ /*
123
+ * 连接线Demo
124
+ *
125
+ * 对应的应用场景:
126
+ * 1. 绘制树状关系图, 脑图等图表场景中绘制连线用
127
+ * 2. 解决常规div来绘制连线时无法做到的问题,具体如下:
128
+ * Z字形连线中其中一个弯折是圆弧或者两个弯折是圆弧的场景需求
129
+ */
65
130
  {
66
131
  meta: { nameText: '连接线Demo', },
67
132
  name: "feature-连接线Demo",
68
133
  path: '/feature/ConnectLine',
69
134
  component: () => import('@shijiu/jsview-vue-samples/ConnectLine/App.vue')
70
135
  },
136
+
137
+ /*
138
+ * 离散焦点自动处理
139
+ * 源码是一个测试样例, AI编程时不需要参考, 原理就是界面上有位置任意的
140
+ * 有style.width和style.height尺寸的JsvFocusBlock组件,
141
+ * 当上下左右键在这个FocusBlock的onKeyXXX或者onDispatchXXXX处理中都return了false时(表示都不拦截和处理这些导航键)
142
+ * 框架会按照这些JsvFocusBlock的布局, 自动在这些jsvFocusBlock之间进行焦点切换
143
+ *
144
+ * 对应的应用场景:
145
+ * 元素简单,且位置不重叠的游戏或运营类场景,EPG等复杂场景不适合
146
+ */
71
147
  {
72
148
  meta: { nameText: '离散焦点自动处理', },
73
149
  name: "feature-离散焦点自动处理",
74
150
  path: '/feature/DispersedFocusControl',
75
151
  component: () => import('@shijiu/jsview-vue-samples/DispersedFocusControl/App.vue'),
76
152
  },
77
- {
78
- meta: { nameText: '离散焦点分布', },
79
- name: "feature-离散焦点分布",
80
- path: '/feature/DispersedItemSample',
81
- component: () => import('@shijiu/jsview-vue-samples/DispersedItemSample/DispersedItemSample.vue')
82
- },
153
+
154
+ // 一个简单的空间寻焦算法的样例, 已被自动寻焦样例 DispersedFocusControl 替代
155
+ // {
156
+ // meta: { nameText: '离散焦点分布', },
157
+ // name: "feature-离散焦点分布",
158
+ // path: '/feature/DispersedItemSample',
159
+ // component: () => import('@shijiu/jsview-vue-samples/DispersedItemSample/DispersedItemSample.vue')
160
+ // },
161
+
162
+ /*
163
+ * 饼图测试
164
+ *
165
+ * 对应的应用场景:
166
+ * 需要绘制图表的场景中, 需要绘制饼图的场景, 样例中还提供了调整饼图的分配比例而产生动画的效果。
167
+ * 除了支持屏图(几个扇形构成)外,还支持环形图(扇形只留扇顶弧形构成一个圆环)
168
+ * 使用时一定要注意, 传入的所有内容的合不能大于100%, 可以略小于100%, 不足100%的部分会自动补到最后一项中
169
+ */
83
170
  {
84
171
  meta: { nameText: '饼图测试', },
85
172
  name: "feature-饼图测试",
86
173
  path: '/feature/SecTorTest',
87
174
  component: () => import('@shijiu/jsview-vue-samples/SecTorTest/App.vue'),
88
175
  },
176
+
177
+ /*
178
+ * TextureStore测试
179
+ *
180
+ * 对应的应用场景:
181
+ * 手搓出可用于<div>标签的style.backgroundImage或者<img>标签的src的图片资源临时url
182
+ * 但此用例只展示 JsvTextureStoreApi 的 canvasTexture 接口的用法,
183
+ * 此样例包含子场景:
184
+ * 和JsvNinePatch配合的的直角框和圆角框
185
+ * 半圆
186
+ * 纯色圆角方块
187
+ * 渐变圆角方块
188
+ */
89
189
  {
90
190
  meta: { nameText: 'TextureStore测试', },
91
191
  name: "feature-TextureStore测试",
92
192
  path: '/feature/TextureStoreTest',
93
193
  component: () => import('@shijiu/jsview-vue-samples/TextureStoreTest/App.vue'),
94
194
  },
195
+
196
+ /*
197
+ * NinePatch对齐测试
198
+ *
199
+ * 对应的应用场景:
200
+ * 圆角矩形要套一个外边缘框的场景, 且框为纯色的最简解决方法。
201
+ * 使用JsvNinePatch组件, 且图片资源由代码生成(JsvTextureBuilder.buildCircleNinePatchTexture)
202
+ */
95
203
  {
96
204
  meta: { nameText: 'NinePatch对齐测试', },
97
205
  name: "feature-NinePatch对齐测试",
98
206
  path: '/feature/NinePatchTester',
99
207
  component: () => import('@shijiu/jsview-vue-samples/NinePatchTester/App.vue'),
100
208
  },
209
+
210
+ /*
211
+ * NativeSharedView测试
212
+ *
213
+ * 对应的应用场景:
214
+ * 使用JsvNativeSharedDiv组件并监听其尺寸和位置变化的场景
215
+ */
101
216
  {
102
217
  meta: { nameText: 'NativeSharedView测试', },
103
218
  name: "feature-NativeSharedView测试",
104
219
  path: '/feature/TestNativeSharedView',
105
220
  component: () => import('@shijiu/jsview-vue-samples/TestNativeSharedView/App.vue'),
106
221
  },
222
+
223
+ /*
224
+ * 仅测试, AI编程时, 不要参考
225
+ * CSS预处理
226
+ *
227
+ */
107
228
  {
108
229
  meta: { nameText: 'CSS预处理', },
109
230
  name: "feature-CSS预处理",
110
231
  path: '/feature/CssPreprocessor',
111
232
  component: () => import('@shijiu/jsview-vue-samples/CssPreprocessor/App.vue'),
112
233
  },
234
+
235
+ /*
236
+ * 可视化变化通知
237
+ *
238
+ * 对应的应用场景:
239
+ * EPG布局, 监控视频窗口在滑动过程中是否移除屏幕时, 并在移除屏幕时进行播放停止, 移回屏幕时进行播放恢复的场景
240
+ * 以及一些放在MetroWidget中的, 需要关注由于MetroWidget滚动而导致其内容移出/移回屏幕的场景
241
+ */
113
242
  {
114
243
  meta: { nameText: '可视化变化通知', },
115
244
  name: "feature-可视化变化通知",
116
245
  path: '/feature/VisibleSensorDemo',
117
246
  component: () => import('@shijiu/jsview-vue-samples/VisibleSensorDemo/App.vue'),
118
247
  },
248
+
249
+ /*
250
+ * 仅测试, AI编程时, 不要参考
251
+ * 快速刷新的表格布局组件
252
+ *
253
+ */
119
254
  {
120
255
  meta: { nameText: '快速刷新的表格布局组件', },
121
256
  name: "feature-快速刷新的表格布局组件",
122
257
  path: '/feature/GridDemo',
123
258
  component: () => import('@shijiu/jsview-vue-samples/GridDemo/App.vue'),
124
259
  },
260
+
261
+ /*
262
+ * 仅测试, AI编程时, 不要参考
263
+ * 有命名空间的焦点切换
264
+ *
265
+ */
125
266
  {
126
267
  meta: { nameText: '有命名空间的焦点切换', },
127
268
  name: "feature-有命名空间的焦点切换",
128
269
  path: '/feature/BasicFocusControl',
129
270
  component: () => import('@shijiu/jsview-vue-samples/BasicFocusControl/App.vue'),
130
271
  },
272
+
273
+ /*
274
+ * 仅测试, AI编程时, 不要参考
275
+ * Hash方式路由切换
276
+ *
277
+ */
131
278
  {
132
279
  meta: { nameText: 'Hash方式路由切换', },
133
280
  name: "feature-Hash方式路由切换",
@@ -135,281 +282,595 @@ let routeList = [
135
282
  props: { routePath: '/feature/HashHistory' },
136
283
  component: () => import('@shijiu/jsview-vue-samples/HashHistory/App.vue'),
137
284
  },
138
- {
139
- meta: { nameText: '翻牌游戏', },
140
- name: "Game-翻牌游戏",
141
- path: '/Game/FlipCard',
142
- component: () => import('@shijiu/jsview-vue-samples/FlipCard/App.vue'),
143
- },
285
+
286
+ /*
287
+ * 设置颜色空间
288
+ *
289
+ // * 对应的应用场景:
290
+ * 海报资源内存使用较大, 愿意以时间换内存时, 可通过如样例那样的
291
+ * 设置data-jsv-img-color-space为RGB_565来节省内存
292
+ * 原理是JsView引擎会自动将解码出来的RGBA_8888图片存储成RGB_565的bitmap以节省一半内存
293
+ * 特别注意: 如果要用JsvPreload进行预加载时,预加载的图片和尺寸和颜色空间要和实际在img标签中设置的完全一致才能有
294
+ * 预加载的效果(预加载效果是加载完后, img标签再展示时就不会因为要一步加载图片而引起闪动的问题)
295
+ */
144
296
  {
145
297
  meta: { nameText: '设置颜色空间', },
146
298
  name: "feature-设置颜色空间",
147
299
  path: '/feature/ColorSpace',
148
300
  component: () => import('@shijiu/jsview-vue-samples/ColorSpace/App.vue'),
149
301
  },
302
+
303
+ /*
304
+ * 制定Texture尺寸
305
+ *
306
+ * 对应的应用场景:
307
+ * 海报资源内存使用较大, 愿意以时间换内存时, 可通过如样例那样的
308
+ * 设置data-jsv-img-scaledown-tex为true来节省内存
309
+ * 原理是JsView只存储图片压缩尺寸后的bitmap, 而不是原始的尺寸的图片以节省内存
310
+ * 特别注意: 如果要用JsvPreload进行预加载时,预加载的图片和尺寸和颜色空间要和实际在img标签中设置的完全一致才能有
311
+ * 预加载的效果(预加载效果是加载完后, img标签再展示时就不会因为要一步加载图片而引起闪动的问题)
312
+ */
150
313
  {
151
314
  meta: { nameText: '制定Texture尺寸', },
152
315
  name: "feature-制定Texture尺寸",
153
316
  path: '/feature/TextureSize',
154
317
  component: () => import('@shijiu/jsview-vue-samples/TextureSize/App.vue'),
155
318
  },
319
+
320
+ /*
321
+ * 长文字
322
+ *
323
+ * 对应的应用场景:
324
+ * 需要展示诸如用户协议,大片长端纯文本的场景
325
+ * 此样例也是 JsvScrollBox 组件的典型应用场景, 解决了一个长条形的滚动窗口如何和其右边进度条联动的场景。
326
+ * 同时 JsvScrollBox 支持触控拖动, 触控fling, 进度条点击跳转和鼠标滚动这几个场景
327
+ *
328
+ * 长内容并且右边有可点击快速定位的滚动条的场景。
329
+ * 会用两个 JsvScrollBox 来完成此场景, 一个JsvScrollBox用来展示长内容, 一个JsvScrollBox用来展示滚动条。
330
+ * 用linkName和syncWith来关联两个JsvScrollBox, 使得两个JsvScrollBox的进度保持一致。
331
+ */
156
332
  {
157
333
  meta: { nameText: '长文字', },
158
334
  name: "feature-长文字",
159
335
  path: '/feature/LongText',
160
336
  component: () => import('@shijiu/jsview-vue-samples/LongText/App.vue'),
161
337
  },
338
+
339
+ /*
340
+ * 长文字Latex
341
+ *
342
+ * 对应的应用场景:
343
+ * 同 “长文字” 样例, 区别只是纯文本中可以有LaTex的写法
344
+ */
162
345
  {
163
346
  meta: { nameText: '长文字Latex', },
164
347
  name: "feature-长文字Latex",
165
348
  path: '/feature/LongTextLatex',
166
349
  component: () => import('@shijiu/jsview-vue-samples/LongTextLatex/App.vue'),
167
350
  },
351
+
352
+ /*
353
+ * 二维码
354
+ *
355
+ * 对应的应用场景:
356
+ * 所以使用二维码的场景,在JsView中可以通过字符串生成二维码图片并展示
357
+ * 这个是JsvQrcode组件的典型应用场景, 主要展示了如下特性:
358
+ * 1. 字符串同步生成二维码(界面出现时不会一闪, 但是有可能会卡按键操作)
359
+ * 2. 字符串异步生成二维码(界面出现时会一闪才出, 但是不会卡按键操作)
360
+ * 3. 中心小图标绘制方案
361
+ * 4. 容错级别指定
362
+ */
168
363
  {
169
364
  meta: { nameText: '二维码', },
170
365
  name: "feature-二维码",
171
366
  path: '/feature/QrcodeDemo',
172
367
  component: () => import('@shijiu/jsview-vue-samples/QrcodeDemo/App.vue'),
173
368
  },
369
+
370
+ /*
371
+ * 文字阴影
372
+ *
373
+ * 对应的应用场景:
374
+ * 适合要给文字添加阴影的场景
375
+ * 需要展示在JsView场景下所支持的所有的文字阴影的写法,
376
+ * 注意!!! 不要使用所列写法以外的CSS属性来做文字阴影
377
+ */
174
378
  {
175
379
  meta: { nameText: '文字阴影', },
176
380
  name: "feature-文字阴影",
177
381
  path: '/feature/TextShadowDemo',
178
382
  component: () => import('@shijiu/jsview-vue-samples/TextShadowDemo/App.vue'),
179
383
  },
384
+
385
+ /*
386
+ * 多行文字区域内对齐
387
+ *
388
+ * 对应的应用场景:
389
+ * 适合多行纯文本内容进行区域内对齐(居中,居左,居右)的场景
390
+ * 注意!!! 遇到多行文本居中的场景, 不要用非jsview支持的css的属性来进行居中, 要用JsvTextBox组件和其属性来完成
391
+ * 此样例也是JsvTextBox组件的典型应用场景
392
+ */
180
393
  {
181
394
  meta: { nameText: '多行文字区域内对齐', },
182
395
  name: "feature-多行文字区域内对齐",
183
396
  path: '/feature/TextBox',
184
397
  component: () => import('@shijiu/jsview-vue-samples/TextBox/App.vue'),
185
398
  },
186
- // TODO: 改为FreeMove后再激活
187
- // {
188
- // meta: { nameText: '抛物运动写法样例', },
189
- // path: '/Game/ThrowMoveDemo',
190
- // component: () => import('@shijiu/jsview-vue-samples/ThrowMoveDemo/App.vue'),
191
- // },
192
- {
193
- meta: { nameText: '精灵图', },
194
- name: "Game-精灵图",
195
- path: '/Game/SpriteImage',
196
- component: () => import('@shijiu/jsview-vue-samples/SpriteImage/App.vue'),
197
- },
399
+
400
+ /*
401
+ * 文字滚动(标题跑马灯)
402
+ *
403
+ * 对应的应用场景:
404
+ * 适合需要展示标题跑马灯的场景
405
+ * 此样例也是JsvMarquee组件的典型应用场景
406
+ */
198
407
  {
199
408
  meta: { nameText: '文字滚动(标题跑马灯)', },
200
409
  name: "feature-文字滚动(标题跑马灯)",
201
410
  path: '/feature/Marquee',
202
411
  component: () => import('@shijiu/jsview-vue-samples/Marquee/App.vue'),
203
412
  },
413
+
414
+ /*
415
+ * 文字输入
416
+ *
417
+ * 对应的应用场景:
418
+ * 此样例是JsvInput组件的典型应用场景
419
+ * JsvInput组件是用来和android系统的Ime进行通讯的组件
420
+ * 通常平板产品会需要通过ime进行输入,而电视产品由于ime不方便所以都不采用ime输入
421
+ */
204
422
  {
205
423
  meta: { nameText: '文字输入', },
206
424
  name: "feature-文字输入",
207
425
  path: '/feature/Input',
208
426
  component: () => import('@shijiu/jsview-vue-samples/Input/App.vue'),
209
427
  },
210
- {
211
- meta: { nameText: '情景主题效果:雨', },
212
- name: "Operations-情景主题效果:雨",
213
- path: '/Operations/TombSweepingDayTest',
214
- component: () => import('@shijiu/jsview-vue-samples/TombSweepingDayTest/App.vue'),
215
- },
216
- {
217
- meta: { nameText: '.9图焦点框漂移', },
218
- name: "Operations-.9图焦点框漂移",
219
- path: '/Operations/NinePatchDemo',
220
- component: () => import('@shijiu/jsview-vue-samples/NinePatchDemo/App.vue'),
221
- },
222
- {
223
- meta: { nameText: '动图', },
224
- name: "Operations-动图",
225
- path: '/Operations/AnimPicture',
226
- component: () => import('@shijiu/jsview-vue-samples/AnimPicture/App.vue'),
227
- },
228
- {
229
- meta: { nameText: '粒子效果', },
230
- name: "Operations-粒子效果",
231
- path: '/Operations/SprayView',
232
- component: () => import('@shijiu/jsview-vue-samples/SprayView/App.vue'),
233
- },
234
- {
235
- meta: { nameText: '长图片', },
236
- name: "Operations-长图片",
237
- path: '/Operations/LongImage',
238
- component: () => import('@shijiu/jsview-vue-samples/LongImage/App.vue'),
239
- },
240
- {
241
- meta: { nameText: '拼图demo', },
242
- name: "Operations-拼图demo",
243
- path: '/Operations/MaskClip',
244
- component: () => import('@shijiu/jsview-vue-samples/MaskClip/App.vue'),
245
- },
246
- {
247
- meta: { nameText: 'SoundPool', },
248
- name: "Game-SoundPool",
249
- path: '/Game/SoundPool',
250
- component: () => import('@shijiu/jsview-vue-samples/SoundPool/App.vue'),
251
- },
252
- {
253
- meta: { nameText: 'TextureAnimation', },
254
- name: "Operations-TextureAnimation",
255
- path: '/Operations/TextureAnimation',
256
- component: () => import('@shijiu/jsview-vue-samples/TextureAnimation/App.vue'),
257
- },
258
- {
259
- meta: { nameText: '焦点框旋转光效果', },
260
- name: "Operations-焦点框旋转光效果",
261
- path: '/Operations/TextureAnimation2',
262
- component: () => import('@shijiu/jsview-vue-samples/TextureAnimation/App3.vue'),
263
- },
264
- {
265
- meta: { nameText: '公祭日黑白效果', },
266
- name: "Operations-公祭日黑白效果",
267
- path: '/Operations/GrayDown',
268
- component: () => import('@shijiu/jsview-vue-samples/FilterDemo/App.vue'),
269
- },
270
- {
271
- meta: { nameText: '水波特效', },
272
- name: "Operations-水波特效",
273
- path: '/Operations/Ripple',
274
- component: () => import('@shijiu/jsview-vue-samples/Ripple/App.vue'),
275
- },
428
+
429
+ /*
430
+ * 预加载
431
+ *
432
+ * 对应的应用场景:
433
+ * 用于解决由于图片异步加载导致图片切换时闪动问题
434
+ * 此样例是JsvPreload组件的典型应用场景
435
+ * 原理是: 通过JsvPreload组件将目标图片的bitmap加载到内存,
436
+ * 并通过JsvPreload这个vue组件的生命周期来管理这个内存中的bitmap的生命周期(两者生命周期相同)
437
+ * 注意点:
438
+ * 1. 对于展示时会设置 data-jsv-img-scaledown-tex 和 data-jsv-img-color-space 的场景
439
+ * 要在JsvPreload的图片项目配置中也设置相同的配置(参照JsvPreload组件设置属性的接口, 和img标签的这两个属性并不完全同名)
440
+ * 2. 预加载内存消耗较大, 内存按照bitmap来计算 = width * height * 4 bytes
441
+ * 建议JsvPreload的总内存不要超过10M(1920x1080的背景图不要超过3张)
442
+ */
276
443
  {
277
444
  meta: { nameText: '预加载', },
278
445
  name: "feature-预加载",
279
446
  path: '/feature/Preload',
280
447
  component: () => import('@shijiu/jsview-vue-samples/Preload/App.vue'),
281
448
  },
449
+
450
+ /*
451
+ * AB图片切换
452
+ *
453
+ * 对应的应用场景:
454
+ * 此样例是JsvABImage组件的典型应用场景
455
+ * JsvABImage是用来解决按钮等AB图, 焦点和非焦点是两张不同的图片, 切换时不要有闪烁(未加载完成前不要切换)的问题
456
+ * 原理: JsvABImage组件借助JsvSmartImage组件实现了AB图片切换的功能, 主要原理是A切换到B时, B加载完成后才会进行切换
457
+ * 此方案的AB图可以支持A图为jpg, png这种静态图, 而B图位webp或者gif的这种场景
458
+ * 比用JsvPreload将所有B图都缓存起来的解决方案更省内存
459
+ */
460
+ {
461
+ meta: { nameText: 'AB图片切换', },
462
+ name: "feature-AB图片切换",
463
+ path: '/feature/ABImageAlt',
464
+ component: () => import('@shijiu/jsview-vue-samples/ABImageAlt/App.vue'),
465
+ },
466
+
467
+ /*
468
+ * 仅测试, AI编程时, 不要参考
469
+ * 图片组件响应式测试
470
+ *
471
+ * JsvPosterDiv和JsvPosterImage组件图片内容变化的测试用例
472
+ * (也是JsvSmartDiv和JsvSmartImage组件的典型测试用例)
473
+ */
474
+ {
475
+ meta: { nameText: '图片组件响应式测试', },
476
+ name: "feature-图片组件响应式测试",
477
+ path: '/feature/ReactiveTest',
478
+ component: () => import('@shijiu/jsview-vue-samples/ReactiveTest/App.vue'),
479
+ },
480
+
481
+ /*
482
+ * 仅测试, AI编程时, 不要参考
483
+ * 单图片透明
484
+ *
485
+ * img标签单设opacity属性来实现图片透明效果的测试用例
486
+ * 注意: div标签不支持设置opacity
487
+ */
282
488
  {
283
489
  meta: { nameText: '单图片透明', },
284
490
  name: "feature-单图片透明",
285
491
  path: '/feature/ViewOpacity',
286
492
  component: () => import('@shijiu/jsview-vue-samples/ViewOpacity/App.vue'),
287
493
  },
494
+
495
+ /*
496
+ * 仅测试, AI编程时, 不要参考
497
+ * 图片缩小算法
498
+ *
499
+ * 测试img标签单设data-jsv-img-scaledown-tex属性来实现图片缩小场景下, 执行的性能和效果
500
+ */
288
501
  {
289
502
  meta: { nameText: '图片缩小算法', },
290
503
  name: "feature-图片缩小算法",
291
504
  path: '/feature/ScaleDownNeon',
292
505
  component: () => import('@shijiu/jsview-vue-samples/ScaleDownNeon/App.vue'),
293
506
  },
507
+
508
+ /*
509
+ * 渐变Texture
510
+ *
511
+ * 对应的应用场景:
512
+ * 用于要展示渐变色背景图的场景, 支持垂直, 水平, 对角, 多色渐变
513
+ */
294
514
  {
295
515
  meta: { nameText: '渐变Texture', },
296
516
  name: "feature-渐变Texture",
297
517
  path: '/feature/GradientTexture',
298
518
  component: () => import('@shijiu/jsview-vue-samples/GradientTexture/App.vue'),
299
519
  },
300
- {
301
- meta: { nameText: '碰撞检测', },
302
- name: "Game-碰撞检测",
303
- path: '/Game/Collision',
304
- component: () => import('@shijiu/jsview-vue-samples/Collision/App.vue'),
305
- },
306
- {
307
- meta: { nameText: '碰撞即停', },
308
- name: "Game-碰撞即停",
309
- path: '/Game/ImpactStop',
310
- component: () => import('@shijiu/jsview-vue-samples/ImpactStop/App.vue'),
311
- },
312
- {
313
- meta: { nameText: '滚动图', },
314
- name: "Operations-滚动图",
315
- path: '/Operations/Swiper',
316
- component: () => import('@shijiu/jsview-vue-samples/Swiper/App.vue'),
317
- },
520
+
521
+ /*
522
+ * 下载接口示例
523
+ *
524
+ * 对应的应用场景:
525
+ * JsvPreDownloader的典型应用场景
526
+ * 解决要对图片进行预下载的场景, 以优化图片的加载性能
527
+ * 但不宜过多,因为存储限制,预下载太多的图片会被先进新出的缓存逻辑顶掉, 而达不到图片加载的优化效果
528
+ */
318
529
  {
319
530
  meta: { nameText: '下载接口示例', },
320
531
  name: "feature-下载接口示例",
321
532
  path: '/feature/JsvPreDownloader',
322
533
  component: () => import('@shijiu/jsview-vue-samples/JsvPreDownloader/App.vue'),
323
534
  },
324
- {
325
- meta: { nameText: '焦点移动样式', },
326
- name: "Operations-焦点移动样式",
327
- path: '/Operations/FocusMoveStyle',
328
- component: () => import('@shijiu/jsview-vue-samples/FocusMoveStyle/App.vue'),
329
- },
535
+
536
+ /*
537
+ * 仅测试, AI编程时, 不要参考
538
+ * Mockjs测试
539
+ *
540
+ * 测试Mockjs的测试用例
541
+ */
330
542
  {
331
543
  meta: { nameText: 'Mockjs测试', },
332
544
  name: "feature-Mockjs测试",
333
545
  path: '/feature/MockjsDemo',
334
546
  component: () => import('@shijiu/jsview-vue-samples/MockjsDemo/App.vue'),
335
547
  },
336
- {
337
- meta: { nameText: '红包雨', },
338
- name: "Game-红包雨",
339
- path: '/Game/GiftRain',
340
- component: () => import('@shijiu/jsview-vue-samples/GiftRain/App.vue'),
341
- },
342
- {
343
- meta: { nameText: '雷达图', },
344
- name: "Game-雷达图",
345
- path: '/Game/RadarChart',
346
- component: () => import('@shijiu/jsview-vue-samples/JsvRadarChart/App.vue')
347
- },
348
- // TODO: 等改为对接FreeMoveActor后再恢复
349
- // {
350
- // meta: { nameText: '跑酷游戏', },
351
- // path: '/Game/Parkour',
352
- // component: () => import('@shijiu/jsview-vue-samples/Parkour/App.vue')
353
- // },
548
+
549
+ /*
550
+ * Hash参数
551
+ *
552
+ * 对应的应用场景:
553
+ * 一个读取URL的deepLink中信息的样例
554
+ * 对应场景有,
555
+ * 1. 读取 window.locaiton.search的内容
556
+ * 2. 从vue-router读取参数
557
+ */
354
558
  {
355
559
  meta: { nameText: 'Hash参数', },
356
560
  name: "feature-Hash参数",
357
561
  path: '/feature/HashParams',
358
562
  component: () => import('@shijiu/jsview-vue-samples/HashParams/App.vue'),
359
563
  },
564
+
565
+ /*
566
+ * 仅测试, AI编程时, 不要参考
567
+ * 按键打断描画
568
+ *
569
+ * JsvRenderBreak组件测试, 此组件可以将废弃, 不建议应用层直接使用
570
+ */
360
571
  {
361
572
  meta: { nameText: '按键打断描画', },
362
573
  name: "feature-按键打断描画",
363
574
  path: '/feature/BreakRender',
364
575
  component: () => import('@shijiu/jsview-vue-samples/BreakRender/App.vue'),
365
576
  },
577
+
578
+ /*
579
+ * latex示例
580
+ *
581
+ * 对应的应用场景:
582
+ * 使用于<div>标签中的文字需要展示
583
+ * 1. 文本中间部分文字变色的场景
584
+ * 2. 文本中间部分文字加粗的场景
585
+ * 3. 文本中间部分文字斜体的场景
586
+ * 4. 文本中间部分文字下划线的场景
587
+ * 5. 文本中间部分文字删除线的场景
588
+ * 原理: 用LaTex的语法来解决原本需要JsView不支持的css的属性才能实现的以上文字效果
589
+ */
366
590
  {
367
591
  meta: { nameText: 'latex示例', },
368
592
  name: "feature-latex示例",
369
593
  path: '/feature/LatexDemo',
370
594
  component: () => import('@shijiu/jsview-vue-samples/LatexDemo/App.vue'),
371
595
  },
596
+
597
+ /*
598
+ * GetRect示例
599
+ *
600
+ * 对应的应用场景:
601
+ * 想知道一个div相对于屏幕左上角的实际绘制位置的场景(包括transform或者keyframe动画等变化引起的位置和尺寸变化)。
602
+ * 只能异步获取位置信息
603
+ * div元素扩展接口jsvGetBoundingClientRect的经典使用场景
604
+ *
605
+ * 和下面网站呼应
606
+ * https://jsview-dev.shijiutv.com/guide/4.standard-features/4.2.html5-elements.html#element%E6%96%B9%E6%B3%95
607
+ */
372
608
  {
373
609
  meta: { nameText: 'GetRect示例', },
374
610
  name: "feature-GetRect示例",
375
611
  path: '/feature/GetRect',
376
612
  component: () => import('@shijiu/jsview-vue-samples/GetBoundingClientRect/App.vue'),
377
613
  },
614
+
615
+ /*
616
+ * 仅测试, AI编程时, 不要参考
617
+ * 动态Class示例
618
+ *
619
+ */
378
620
  {
379
621
  meta: { nameText: '动态Class示例', },
380
622
  name: "feature-动态Class示例",
381
623
  path: '/feature/DynamicClass',
382
624
  component: () => import('@shijiu/jsview-vue-samples/DynamicClass/App.vue'),
383
625
  },
626
+
627
+ /*
628
+ * 仅测试, AI编程时, 不要参考
629
+ * Class动态切换示例
630
+ *
631
+ */
384
632
  {
385
633
  meta: { nameText: 'Class动态切换示例', },
386
634
  name: "feature-Class动态切换示例",
387
635
  path: '/feature/ClassDynamicSwitching',
388
636
  component: () => import('@shijiu/jsview-vue-samples/ClassDynamicSwitching/App.vue'),
389
637
  },
638
+
639
+ /*
640
+ * JsvLine示例
641
+ *
642
+ * 对应的应用场景:
643
+ * 绘制一条斜线无锯齿的线, 比用div + backgroundColor 来说, 其优势在于斜线时没有锯齿
644
+ */
390
645
  {
391
646
  meta: { nameText: 'JsvLine示例', },
392
647
  name: "feature-JsvLine示例",
393
648
  path: '/feature/JsvLine',
394
649
  component: () => import('@shijiu/jsview-vue-samples/JsvLine/App.vue'),
395
650
  },
396
- // {
397
- // meta: { nameText: 'FreeMove示例', },
398
- // path: '/feature/FreeMove',
399
- // component: () => import('@shijiu/jsview-vue-samples/FreeMove/App.vue'),
400
- // },
651
+
652
+ /*
653
+ *
654
+ * 仅测试, AI编程时, 不要参考
655
+ * FreeMove示例
656
+ *
657
+ */
658
+ {
659
+ meta: { nameText: 'FreeMove示例', },
660
+ path: '/feature/FreeMove',
661
+ component: () => import('@shijiu/jsview-vue-samples/FreeMove/App.vue'),
662
+ },
663
+
664
+ /*
665
+ * 思维导图示例
666
+ *
667
+ * 对应的应用场景:
668
+ * 需要绘制树状结构图或者脑图的场景,
669
+ * 此样例是JsvMindMap组件的典型应用场景
670
+ * 解决了这类图像的在遥控器的只有上下左右键场景下的操作问题。
671
+ * JsvMindMap也是一个内嵌了JsvFocusBlok的组件, 可通过FocusHub.setFocus来设置焦点
672
+ */
401
673
  {
402
674
  meta: { nameText: '思维导图示例', },
403
675
  name: "feature-思维导图示例",
404
676
  path: '/feature/MindMap',
405
677
  component: () => import('@shijiu/jsview-vue-samples/MindMap/App.vue'),
406
678
  },
679
+
680
+ /*
681
+ * 仅测试, AI编程时, 不要参考
682
+ * latex公式
683
+ *
684
+ */
407
685
  {
408
686
  meta: { nameText: 'latex公式', },
409
687
  name: "feature-latex公式",
410
688
  path: '/feature/LatexFormula',
411
689
  component: () => import('@shijiu/jsview-vue-samples/LatexFormula/App.vue'),
412
690
  },
691
+
692
+ /*
693
+ * 文字大小限制
694
+ *
695
+ * 对应的应用场景:
696
+ * 用于解决文字内容多少不确定, 但是又要占用一定的尺寸的场景。
697
+ * 用JsvTextBox组件的minWidth、maxWidth、minHeight、maxHeight配置,
698
+ * 来解决没法用JsView不识别的css中的同名属性(minWidth、maxWidth、minHeight、maxHeight)来解决文字排版场景
699
+ */
700
+ {
701
+ meta: { nameText: '文字大小限制', },
702
+ name: 'feature-文字大小限制',
703
+ path: '/feature/TextSizeLimit',
704
+ component: () => import('@shijiu/jsview-vue-samples/TextSizeLimit/App.vue'),
705
+ },
706
+
707
+ /*
708
+ * 分行API
709
+ *
710
+ * 对应的应用场景:
711
+ * TextTools.breakLines的使用样例
712
+ * 对应场景为需要对文字的行数进行探测, 以及要对每行文字有后处理的场景
713
+ */
714
+ {
715
+ meta: { nameText: '分行API', },
716
+ name: 'feature-分行API',
717
+ path: '/feature/BreakLines',
718
+ component: () => import('@shijiu/jsview-vue-samples/BreakLinesApi/App.vue')
719
+ },
720
+
721
+ /*
722
+ * 同步解码
723
+ *
724
+ * 对应的应用场景:
725
+ * 用于解决默认的图片解码为异步和其他内容不同时出现的问题
726
+ * 具体处理为 JsvPosterImage 组件将 syncDraw 属性设置为 true
727
+ * 其逻辑为:
728
+ * 1. 若图片已经下载过, 则会堵住渲染线程,等到解码完后后和其他内容一起绘制,
729
+ * 所以图片最好用JsvPreDownloader来完成下载, 或者用JsvPreload的downloadList属性来完成下载
730
+ * 2. 若图片未下载过, 则仍然会异步下载, 异步解码, 相当于同步解码这个开关不生效
731
+ */
732
+ {
733
+ meta: { nameText: '同步解码', },
734
+ name: 'feature-同步解码',
735
+ path: '/feature/SyncDecode',
736
+ component: () => import('@shijiu/jsview-vue-samples/SyncDecode/App.vue')
737
+ },
738
+
739
+ /*
740
+ * 仅测试, AI编程时, 不要参考
741
+ * 预解码
742
+ *
743
+ * 后续预解码功能做完后, 再确认是否可用于AI编程参考
744
+ */
745
+ {
746
+ meta: { nameText: '预解码', },
747
+ name: 'feature-预解码',
748
+ path: '/feature/PreDecode',
749
+ component: () => import('@shijiu/jsview-vue-samples/PreDecode/App.vue')
750
+ },
751
+
752
+ /*
753
+ * 帧率限制
754
+ *
755
+ * 对应的应用场景:
756
+ * 为了解决在一些设备上长时间保持高帧率绘制会导致设备高功率运转太久会过热的问题
757
+ * 通过例如 window.JsvCoreApi.setIdleFps(true, 5, 5000) 这样的设置
758
+ * 让设备在无用户操作(按键和触控等操作)5000毫秒后, 帧率降到5fps, 当用户有操作时又会立刻回复到原来的帧率, 如此循环
759
+ */
760
+ {
761
+ meta: { nameText: '帧率限制', },
762
+ name: 'feature-帧率限制',
763
+ path: '/feature/FpsLimit',
764
+ component: () => import('@shijiu/jsview-vue-samples/FpsLimit/App.vue')
765
+ },
766
+
767
+ // ========== operation ==========
768
+ /*
769
+ * 3d移动动画
770
+ *
771
+ * 对应的应用场景:
772
+ * 想让一个区域内的内容进行rotate或者设置z轴后, 有近大远小的透视效果的场景
773
+ * Jsv3dStage组件的典型应用场景, 在一个指定区域内设置透视, 然后在其中的div的transform引起有z轴区别时有透视效果
774
+ * Jsv3dDiv和div相比, Jsv3dDiv图片会把边缘进行过渡处理从而消除锯齿感, 并且Jsv3dDiv可设置z轴值, 而div当倾斜时会有锯齿
775
+ */
776
+ {
777
+ meta: { nameText: '3d移动动画', },
778
+ name: "Operations-3d移动动画",
779
+ path: '/Operations/3dMove',
780
+ component: () => import('jsview-vue-samples/Poster3d/App.vue'),
781
+ },
782
+
783
+
784
+ {
785
+ meta: { nameText: '烟花行进特效', },
786
+ name: "Operations-烟花行进特效",
787
+ path: '/Operations/SprayMove',
788
+ component: () => import('jsview-vue-samples/SprayMove/App.vue'),
789
+ },
790
+ {
791
+ meta: { nameText: '海报图收放组件', },
792
+ name: "Operations-海报图收放组件",
793
+ path: '/Operations/PosterPacker',
794
+ component: () => import('jsview-vue-samples/PosterPacker/App.vue'),
795
+ },
796
+ {
797
+ meta: { nameText: '情景主题效果:雨', },
798
+ name: "Operations-情景主题效果:雨",
799
+ path: '/Operations/TombSweepingDayTest',
800
+ component: () => import('@shijiu/jsview-vue-samples/TombSweepingDayTest/App.vue'),
801
+ },
802
+ {
803
+ meta: { nameText: '.9图焦点框漂移', },
804
+ name: "Operations-.9图焦点框漂移",
805
+ path: '/Operations/NinePatchDemo',
806
+ component: () => import('@shijiu/jsview-vue-samples/NinePatchDemo/App.vue'),
807
+ },
808
+ {
809
+ meta: { nameText: '动图', },
810
+ name: "Operations-动图",
811
+ path: '/Operations/AnimPicture',
812
+ component: () => import('@shijiu/jsview-vue-samples/AnimPicture/App.vue'),
813
+ },
814
+ {
815
+ meta: { nameText: '动静图标切换', },
816
+ name: "Operations-动静图标切换",
817
+ path: '/Operations/ApicSwitch',
818
+ component: () => import('@shijiu/jsview-vue-samples/ApicSwitch/App.vue'),
819
+ },
820
+ {
821
+ meta: { nameText: '粒子效果', },
822
+ name: "Operations-粒子效果",
823
+ path: '/Operations/SprayView',
824
+ component: () => import('@shijiu/jsview-vue-samples/SprayView/App.vue'),
825
+ },
826
+ {
827
+ meta: { nameText: '长图片', },
828
+ name: "Operations-长图片",
829
+ path: '/Operations/LongImage',
830
+ component: () => import('@shijiu/jsview-vue-samples/LongImage/App.vue'),
831
+ },
832
+ {
833
+ meta: { nameText: '拼图demo', },
834
+ name: "Operations-拼图demo",
835
+ path: '/Operations/MaskClip',
836
+ component: () => import('@shijiu/jsview-vue-samples/MaskClip/App.vue'),
837
+ },
838
+ {
839
+ meta: { nameText: 'TextureAnimation', },
840
+ name: "Operations-TextureAnimation",
841
+ path: '/Operations/TextureAnimation',
842
+ component: () => import('@shijiu/jsview-vue-samples/TextureAnimation/App.vue'),
843
+ },
844
+ {
845
+ meta: { nameText: '焦点框旋转光效果', },
846
+ name: "Operations-焦点框旋转光效果",
847
+ path: '/Operations/TextureAnimation2',
848
+ component: () => import('@shijiu/jsview-vue-samples/TextureAnimation/App3.vue'),
849
+ },
850
+ {
851
+ meta: { nameText: '公祭日黑白效果', },
852
+ name: "Operations-公祭日黑白效果",
853
+ path: '/Operations/GrayDown',
854
+ component: () => import('@shijiu/jsview-vue-samples/FilterDemo/App.vue'),
855
+ },
856
+ {
857
+ meta: { nameText: '水波特效', },
858
+ name: "Operations-水波特效",
859
+ path: '/Operations/Ripple',
860
+ component: () => import('@shijiu/jsview-vue-samples/Ripple/App.vue'),
861
+ },
862
+ {
863
+ meta: { nameText: '滚动图', },
864
+ name: "Operations-滚动图",
865
+ path: '/Operations/Swiper',
866
+ component: () => import('@shijiu/jsview-vue-samples/Swiper/App.vue'),
867
+ },
868
+ {
869
+ meta: { nameText: '焦点移动样式', },
870
+ name: "Operations-焦点移动样式",
871
+ path: '/Operations/FocusMoveStyle',
872
+ component: () => import('@shijiu/jsview-vue-samples/FocusMoveStyle/App.vue'),
873
+ },
413
874
  {
414
875
  meta: { nameText: 'Swiper3dTest', },
415
876
  name: "Operations-Swiper3dTest",
@@ -440,24 +901,85 @@ let routeList = [
440
901
  path: '/Operations/SceneTransition',
441
902
  component: () => import('@shijiu/jsview-vue-samples/SceneTransition/App.vue'),
442
903
  },
904
+ {
905
+ meta: { nameText: '自定义shader', },
906
+ name: "Operations-自定义shader",
907
+ path: '/Operations/CustomShader',
908
+ component: () => import('@shijiu/jsview-vue-samples/CustomShader/App.vue'),
909
+ },
910
+ {
911
+ meta: { nameText: '虚线框测试用例', },
912
+ name: "Operations-虚线框测试用例",
913
+ path: '/Operations/DashPath',
914
+ component: () => import('@shijiu/jsview-vue-samples/DashPath/App.vue'),
915
+ },
916
+ // {
917
+ // meta: { nameText: '透视镜效果样例', },
918
+ // path: '/Operations/DriftScopeTest',
919
+ // component: () => import('@shijiu/jsview-vue-samples/DriftScopeTest/App.vue'),
920
+ // },
921
+ {
922
+ meta: { nameText: '二维统计图样例', },
923
+ name: 'Operations-二维统计图样例',
924
+ path: '/Operations/DataChart',
925
+ component: () => import('@shijiu/jsview-vue-samples/CanvasDrawChart/App.vue')
926
+ },
927
+ {
928
+ meta: { nameText: 'MD+LaTex', },
929
+ name: 'Operations-Markdown',
930
+ path: '/Operations/Markdown',
931
+ component: () => import('@shijiu/jsview-vue-samples/Markdown/App.vue')
932
+ },
933
+
934
+ // ========== touch ==========
935
+ /*
936
+ * 点击Div
937
+ *
938
+ * 对应的应用场景:
939
+ * 单个div标签追加触控功能的场景
940
+ * 只响应点击的话,@click即可, 需要更多触控功能的话,需要div.jsvSetTapListener来设置
941
+ * jsvSetTapListener的经典使用场景
942
+ * 和下面网站呼应
943
+ * https://jsview-dev.shijiutv.com/guide/4.standard-features/4.8.touch-usage.html#%E8%A7%A6%E6%8E%A7%E5%8A%9F%E8%83%BD
944
+ */
443
945
  {
444
946
  meta: { nameText: '点击Div', },
445
947
  name: "touch-点击Div",
446
948
  path: '/touch/ClickDivDemo',
447
949
  component: () => import('@shijiu/jsview-vue-samples/ClickDivDemo/App.vue'),
448
950
  },
951
+
952
+ /*
953
+ * 触控示例
954
+ *
955
+ * 对应的应用场景:
956
+ * 让MetroWidget激活触控功能,以及如何接受触控事件的场景
957
+ * 以及想用一个蒙层屏蔽MetroWidget的所有触控事件和鼠标事件的场景
958
+ *
959
+ * 和下面网站呼应
960
+ * https://jsview-dev.shijiutv.com/guide/4.standard-features/4.8.touch-usage.html#%E8%A7%A6%E6%8E%A7%E5%8A%9F%E8%83%BD
961
+ */
449
962
  {
450
963
  meta: { nameText: '触控示例', },
451
964
  name: "touch-触控示例",
452
965
  path: '/touch/TouchWidget',
453
966
  component: () => import('@shijiu/jsview-vue-samples/TouchWidget/App.vue'),
454
967
  },
968
+
969
+ /*
970
+ * DragBox
971
+ *
972
+ * 对应的应用场景:
973
+ * 场景1: 当一个div想监测触控的拖动轨迹的场景, 将此div改为JsvDragBox组件来实现
974
+ * 场景2: 想监测用户在屏幕中滑动的手势轨迹时, 做最上层做一个全屏尺寸JsvDragBox, 通过其位置回调就能监测用户对屏幕的滑动事件
975
+ */
455
976
  {
456
977
  meta: { nameText: 'DragBox', },
457
978
  name: "touch-DragBox",
458
979
  path: '/touch/Box',
459
980
  component: () => import('@shijiu/jsview-vue-samples/DragBox/App.vue'),
460
981
  },
982
+
461
983
  // {
462
984
  // meta: { nameText: 'FreeMove触控磁吸', },
463
985
  // path: '/touch/FreeMoveChildAttract',
@@ -468,28 +990,90 @@ let routeList = [
468
990
  // path: '/touch/FreeMoveLink',
469
991
  // component: () => import('@shijiu/jsview-vue-samples/FreeMoveLink/App.vue'),
470
992
  // },
993
+
994
+ /*
995
+ * 可拖拽进度条
996
+ *
997
+ * 对应的应用场景:
998
+ * 要制作可触控操作的视频进度条的场景
999
+ *
1000
+ * JsvScrollBox和JsvScrollFollow组件的典型应用场景, 展示JsvScrollFollow和JsvScrollBox如何靠linkName联动起来的场景
1001
+ * 因为是进度条游标在滚动区域中滑动,所以用JsvScrollBox的Pin模式
1002
+ *
1003
+ * 和下面网站呼应
1004
+ * https://jsview-dev.shijiutv.com/guide/4.standard-features/4.8.touch-usage.html#_5-%E8%BF%9B%E5%BA%A6%E6%9D%A1%E6%8B%96%E5%8A%A8-%E8%A7%86%E9%A2%91%E8%BF%9B%E5%BA%A6%E6%9D%A1
1005
+ */
471
1006
  {
472
1007
  meta: { nameText: '可拖拽进度条', },
473
1008
  name: "touch-可拖拽进度条",
474
1009
  path: '/touch/ScrollBoxTest',
475
1010
  component: () => import('@shijiu/jsview-vue-samples/ScrollBoxTest/App.vue'),
476
1011
  },
1012
+
1013
+ /*
1014
+ * Hover
1015
+ *
1016
+ * 对应的应用场景:
1017
+ * 当一个div要对鼠标的hover事件做响应的场景, 只支持 @mouseenter 和 @mouseleave 事件, 不支持其他hover相关的事件定义
1018
+ *
1019
+ * 和以下网站呼应
1020
+ * https://jsview-dev.shijiutv.com/guide/4.standard-features/4.8.touch-usage.html#_7-%E9%BC%A0%E6%A0%87%E7%9A%84hover%E8%BF%9B%E5%87%BA%E6%A3%80%E6%B5%8B
1021
+ */
1022
+ {
1023
+ meta: { nameText: 'Hover', },
1024
+ name: 'touch-Hover',
1025
+ path: '/touch/Hover',
1026
+ component: () => import('@shijiu/jsview-vue-samples/Hover/App.vue')
1027
+ },
1028
+
1029
+ // ========== game ==========
1030
+ // TODO: 改为FreeMove后再激活
477
1031
  // {
478
- // meta: { nameText: '透视镜效果样例', },
479
- // path: '/Operations/DriftScopeTest',
480
- // component: () => import('@shijiu/jsview-vue-samples/DriftScopeTest/App.vue'),
1032
+ // meta: { nameText: '抛物运动写法样例', },
1033
+ // path: '/Game/ThrowMoveDemo',
1034
+ // component: () => import('@shijiu/jsview-vue-samples/ThrowMoveDemo/App.vue'),
481
1035
  // },
482
1036
  {
483
- meta: { nameText: '自定义shader', },
484
- name: "Operations-自定义shader",
485
- path: '/Operations/CustomShader',
486
- component: () => import('@shijiu/jsview-vue-samples/CustomShader/App.vue'),
1037
+ meta: { nameText: '翻牌游戏', },
1038
+ name: "Game-翻牌游戏",
1039
+ path: '/Game/FlipCard',
1040
+ component: () => import('@shijiu/jsview-vue-samples/FlipCard/App.vue'),
487
1041
  },
488
1042
  {
489
- meta: { nameText: '虚线框测试用例', },
490
- name: "Operations-虚线框测试用例",
491
- path: '/Operations/DashPath',
492
- component: () => import('@shijiu/jsview-vue-samples/DashPath/App.vue'),
1043
+ meta: { nameText: '精灵图', },
1044
+ name: "Game-精灵图",
1045
+ path: '/Game/SpriteImage',
1046
+ component: () => import('@shijiu/jsview-vue-samples/SpriteImage/App.vue'),
1047
+ },
1048
+ {
1049
+ meta: { nameText: 'SoundPool', },
1050
+ name: "Game-SoundPool",
1051
+ path: '/Game/SoundPool',
1052
+ component: () => import('@shijiu/jsview-vue-samples/SoundPool/App.vue'),
1053
+ },
1054
+ {
1055
+ meta: { nameText: '碰撞检测', },
1056
+ name: "Game-碰撞检测",
1057
+ path: '/Game/Collision',
1058
+ component: () => import('@shijiu/jsview-vue-samples/Collision/App.vue'),
1059
+ },
1060
+ {
1061
+ meta: { nameText: '碰撞即停', },
1062
+ name: "Game-碰撞即停",
1063
+ path: '/Game/ImpactStop',
1064
+ component: () => import('@shijiu/jsview-vue-samples/ImpactStop/App.vue'),
1065
+ },
1066
+ {
1067
+ meta: { nameText: '红包雨', },
1068
+ name: "Game-红包雨",
1069
+ path: '/Game/GiftRain',
1070
+ component: () => import('@shijiu/jsview-vue-samples/GiftRain/App.vue'),
1071
+ },
1072
+ {
1073
+ meta: { nameText: '雷达图', },
1074
+ name: "Game-雷达图",
1075
+ path: '/Game/RadarChart',
1076
+ component: () => import('@shijiu/jsview-vue-samples/JsvRadarChart/App.vue')
493
1077
  },
494
1078
  ];
495
1079