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