@shijiu/jsview-vue-samples 2.3.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 (326) 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/DashPath/App.vue +17 -16
  24. package/DashPath/AppForOperator.vue +2 -4
  25. package/DemoForOperator/AnimPic/AnimPic.vue +24 -2
  26. package/DemoForOperator/Banger/Banger/Banger.vue +73 -9
  27. package/DemoForOperator/Blur/Blur.vue +146 -0
  28. package/DemoForOperator/Blur/BlurInOut/BlurInOut.vue +184 -0
  29. package/DemoForOperator/Blur/BlurInOut/StaticBgSlide.vue +162 -0
  30. package/DemoForOperator/Blur/BlurPopup/BlurPopup.vue +249 -0
  31. package/DemoForOperator/BookFlip/App.vue +115 -0
  32. package/DemoForOperator/BookFlip/BookPage.vue +82 -0
  33. package/DemoForOperator/Bounce/Bounce.vue +33 -1
  34. package/DemoForOperator/Bounce/FreeMoveBuilder.js +1 -1
  35. package/DemoForOperator/ChunLian/Couplets.vue +44 -1
  36. package/DemoForOperator/ClickSpriteAnim/App.vue +130 -0
  37. package/DemoForOperator/ClickSpriteAnim/Item.vue +74 -0
  38. package/DemoForOperator/DominantColor/App.vue +187 -0
  39. package/DemoForOperator/EpisodeList/EpisodeList/Controller.vue +0 -3
  40. package/DemoForOperator/EpisodeList/EpisodeList/EpisodeList.vue +76 -2
  41. package/DemoForOperator/Firework1/App.vue +13 -2
  42. package/DemoForOperator/Firework1/Fireworks.vue +68 -11
  43. package/DemoForOperator/FlipPage/FlipPage/FlipPage.vue +30 -1
  44. package/DemoForOperator/Focus/Alpha/AlphaFocusBox.vue +27 -2
  45. package/DemoForOperator/Focus/Alpha/Item.vue +1 -0
  46. package/DemoForOperator/Focus/Light/Item.vue +1 -0
  47. package/DemoForOperator/Focus/Light/LightFocusBox.vue +42 -1
  48. package/DemoForOperator/Focus/Normal/Item.vue +1 -0
  49. package/DemoForOperator/Focus/Normal/NormalFocusBox.vue +12 -0
  50. package/DemoForOperator/FrameShadow/App.vue +193 -0
  51. package/DemoForOperator/FrameShadow/FrameShadow.vue +61 -0
  52. package/DemoForOperator/FullscreenIn/App.vue +1 -1
  53. package/DemoForOperator/FullscreenIn/FullscreenPoster.vue +18 -3
  54. package/DemoForOperator/Genie/App.vue +20 -6
  55. package/DemoForOperator/Genie/App2.vue +61 -0
  56. package/DemoForOperator/Genie/geniePakcer/GenieImage.vue +298 -0
  57. package/DemoForOperator/Genie/geniePakcer/GenieSlot.vue +292 -0
  58. package/DemoForOperator/Genie/geniePakcer/GenieTools.ts +463 -0
  59. package/DemoForOperator/GrayFilter/GrayFilter.vue +21 -0
  60. package/DemoForOperator/Jigsaw/JigsawFull.vue +58 -11
  61. package/DemoForOperator/Jigsaw/JigsawSingle.vue +47 -9
  62. package/DemoForOperator/LongChatBox/App.vue +36 -0
  63. package/DemoForOperator/LongChatBox/Bubble.vue +116 -0
  64. package/DemoForOperator/LongChatBox/LongChat.vue +204 -0
  65. package/DemoForOperator/LongChatBox/testData.js +14 -0
  66. package/DemoForOperator/Particle/Drop/DropParticle.vue +33 -1
  67. package/DemoForOperator/Particle/Explode/ExplodeParticle.vue +23 -2
  68. package/DemoForOperator/PosterAnim/PosterAnim.js +21 -0
  69. package/DemoForOperator/PosterOverflow/PosterOverflow.vue +16 -0
  70. package/DemoForOperator/Resize/App.vue +157 -0
  71. package/DemoForOperator/Resize/Resize/Item.vue +234 -0
  72. package/DemoForOperator/Resize/Resize/Resize.vue +96 -0
  73. package/DemoForOperator/Ripple/Ripple.vue +16 -1
  74. package/DemoForOperator/ScreenShootScale/App.vue +96 -0
  75. package/DemoForOperator/ScreenShootScale/Back.vue +86 -0
  76. package/DemoForOperator/ScreenShootScale/Front.vue +133 -0
  77. package/DemoForOperator/ScreenShootScale/Item.vue +62 -0
  78. package/DemoForOperator/ScreenShootScale/ScreenShootScale.vue +109 -0
  79. package/DemoForOperator/SmoothSwiper/App.vue +50 -0
  80. package/DemoForOperator/Sound/Bounce/App.vue +56 -0
  81. package/DemoForOperator/Sound/Bounce/Bounce.vue +87 -0
  82. package/DemoForOperator/Sound/Bounce/FreeMoveBuilder.js +146 -0
  83. package/DemoForOperator/Sound/Bounce/bgmusic.mp3 +0 -0
  84. package/DemoForOperator/Sound/Bounce/coin.mp3 +0 -0
  85. package/DemoForOperator/Sound/FocusMove/App.vue +134 -0
  86. package/DemoForOperator/Sound/FocusMove/Item.vue +43 -0
  87. package/DemoForOperator/Sound/FocusMove/move.mp3 +0 -0
  88. package/DemoForOperator/Sound/Rain/App.vue +11 -0
  89. package/DemoForOperator/Sound/Rain/Raining/Rain.vue +69 -0
  90. package/DemoForOperator/Sound/Rain/Raining/RainScene.vue +118 -0
  91. package/DemoForOperator/Sound/Sound/Sound.vue +24 -0
  92. package/DemoForOperator/Sound/Sound/index.js +4 -0
  93. package/DemoForOperator/Sound/Sound/useSound.js +112 -0
  94. package/DemoForOperator/Sprite/Sprite.vue +62 -5
  95. package/DemoForOperator/Stretch/Stretch/Stretch.vue +52 -2
  96. package/DemoForOperator/Swiper/App.vue +101 -0
  97. package/DemoForOperator/Swiper/Item.vue +56 -0
  98. package/DemoForOperator/Swiper/ParallaxSlide.vue +164 -0
  99. package/DemoForOperator/TabContent/TabContent/TabContent.vue +39 -1
  100. package/DemoForOperator/TabContentVertical/App.vue +104 -0
  101. package/DemoForOperator/TabContentVertical/ContentPage.vue +67 -0
  102. package/DemoForOperator/TabContentVertical/Item.vue +94 -0
  103. package/DemoForOperator/TabContentVertical/PageItem.vue +40 -0
  104. package/DemoForOperator/TabContentVertical/TabContent/CreepFocus.vue +160 -0
  105. package/DemoForOperator/TabContentVertical/TabContent/Item.vue +63 -0
  106. package/DemoForOperator/TabContentVertical/TabContent/TabContent.vue +184 -0
  107. package/DemoForOperator/TabContentVertical/TabContent/TabItem.vue +368 -0
  108. package/DemoForOperator/TabContentVertical/TabContent/TabWidget.vue +259 -0
  109. package/DemoForOperator/TabContentVertical/TabContent/Util.js +3 -0
  110. package/DemoForOperator/TabContentVertical/TabContent/ViewSwiper.vue +110 -0
  111. package/DemoForOperator/TabContentVertical/assets/children_science.png +0 -0
  112. package/DemoForOperator/TabContentVertical/assets/documentary.png +0 -0
  113. package/DemoForOperator/TabContentVertical/assets/free.png +0 -0
  114. package/DemoForOperator/TabContentVertical/assets/game.png +0 -0
  115. package/DemoForOperator/TabContentVertical/assets/home_selected.png +0 -0
  116. package/DemoForOperator/TabContentVertical/assets/movie_ticket.png +0 -0
  117. package/DemoForOperator/TabContentVertical/assets/my_account.png +0 -0
  118. package/DemoForOperator/TabContentVertical/assets/opera.png +0 -0
  119. package/DemoForOperator/TabContentVertical/assets/sports.png +0 -0
  120. package/DemoForOperator/TabContentVertical/assets/tv_drama.png +0 -0
  121. package/DemoForOperator/TabContentVertical/assets/variety_show.png +0 -0
  122. package/DemoForOperator/TabContentVertical/assets/vip.png +0 -0
  123. package/DemoForOperator/TabContentVertical/testData.js +76 -0
  124. package/DemoForOperator/Vortex/Vortex/Vortex.vue +26 -0
  125. package/DemoForOperator/routeList.js +125 -2
  126. package/DemoHomepage/App.vue +74 -1
  127. package/DemoHomepage/components/BodyFrame.vue +5 -0
  128. package/DemoHomepage/components/Item.vue +11 -0
  129. package/DemoHomepage/components/TabFrame.vue +1 -1
  130. package/DemoHomepage/router.js +798 -140
  131. package/DemoHomepage/views/Homepage.vue +60 -2
  132. package/DemoHomepage/watchTest.vue +50 -0
  133. package/DomRenderer/App.vue +133 -0
  134. package/FilterDemo/AnimatePic.vue +63 -17
  135. package/FilterDemo/App.vue +3 -3
  136. package/FlexCellDemo/AI_skills_update.md +4 -0
  137. package/FlexCellDemo/TestFrame1.vue +12 -2
  138. package/FlexCellDemo/TestFrame2.vue +10 -1
  139. package/FlexCellDemo/TestFrame3.vue +114 -59
  140. package/FpsLimit/App.vue +102 -0
  141. package/FreeMove/App.vue +24 -279
  142. package/FreeMove/TestScene1.vue +260 -0
  143. package/FreeMove/TestScene3.vue +431 -0
  144. package/FreeMoveChildAttract/App.vue +18 -8
  145. package/FreeMoveLink/App.vue +51 -22
  146. package/GiftRain/components/SpriteTranslate.vue +68 -48
  147. package/HashHistory/App.vue +2 -2
  148. package/HashHistory/router.js +1 -1
  149. package/Hover/App.vue +144 -0
  150. package/HttpRequestSSE/SSEReader.js +200 -0
  151. package/ImpactStop/App.vue +2 -2
  152. package/Input/FullKeyboard.vue +3 -3
  153. package/Input/InputPanel.vue +63 -3
  154. package/JsvLine/App.vue +53 -38
  155. package/LatexDemo/App.vue +3 -1
  156. package/LatexFormula/App.vue +196 -0
  157. package/LongImage/App.vue +1 -1
  158. package/LongImage/LongImageScroll.vue +111 -46
  159. package/LongImage/Scroll.vue +28 -9
  160. package/LongText/LongTextScroll.vue +14 -1
  161. package/Markdown/App.vue +36 -0
  162. package/Markdown/Bubble.vue +109 -0
  163. package/Markdown/LongChat.vue +216 -0
  164. package/Markdown/data.js +633 -0
  165. package/MetroWidgetDemos/AI_skills_update.md +2 -0
  166. package/MetroWidgetDemos/EpgFlowListType/App.vue +206 -0
  167. package/MetroWidgetDemos/EpgFlowListType/components/ContentCard.vue +105 -0
  168. package/MetroWidgetDemos/EpgFlowListType/components/FloorSection.vue +131 -0
  169. package/MetroWidgetDemos/EpgFlowListType/components/LeftTabItem.vue +41 -0
  170. package/MetroWidgetDemos/EpgFlowListType/data.js +78 -0
  171. package/MetroWidgetDemos/ListExpand/ChildItem.vue +130 -0
  172. package/MetroWidgetDemos/ListExpand/ExpandItem.vue +375 -0
  173. package/MetroWidgetDemos/ListExpand/ExpandItem1.vue +403 -0
  174. package/MetroWidgetDemos/ListExpand/assets/arrow-down.png +0 -0
  175. package/MetroWidgetDemos/ListExpand/assets/up-arrow.png +0 -0
  176. package/MetroWidgetDemos/ListExpand/components/WidgetListHandler.vue +150 -0
  177. package/MetroWidgetDemos/ListExpand/index.vue +88 -0
  178. package/MetroWidgetDemos/ListExpand/list.js +2421 -0
  179. package/MetroWidgetDemos/RefreshDemo/App.vue +14 -1
  180. package/MetroWidgetDemos/RenderAccelerate/App.vue +142 -0
  181. package/MetroWidgetDemos/RenderAccelerate/AppPage.vue +78 -0
  182. package/MetroWidgetDemos/RenderAccelerate/AppTab.vue +62 -0
  183. package/MetroWidgetDemos/RenderAccelerate/ContentItem.vue +409 -0
  184. package/MetroWidgetDemos/{TripleWidget → RenderAccelerate}/Item.vue +6 -3
  185. package/MetroWidgetDemos/RenderAccelerate/TabItem.vue +100 -0
  186. package/MetroWidgetDemos/RenderAccelerate/ViewSwiper.vue +215 -0
  187. package/MetroWidgetDemos/RenderAccelerate/WidgetItem.vue +107 -0
  188. package/MetroWidgetDemos/SkeletonDiagram/App.vue +35 -8
  189. package/MetroWidgetDemos/SkeletonDiagram/Item.vue +11 -2
  190. package/MetroWidgetDemos/SkeletonDiagram/assets/imageList.js +245 -0
  191. package/MetroWidgetDemos/SkeletonDiagram/data.js +3 -3
  192. package/MetroWidgetDemos/SpatialNav/App.vue +177 -0
  193. package/MetroWidgetDemos/SpatialNav/Buttons.vue +83 -0
  194. package/MetroWidgetDemos/SpatialNav/CustomFocus.vue +57 -0
  195. package/MetroWidgetDemos/SpatialNav/Item.vue +71 -0
  196. package/MetroWidgetDemos/SpatialNav/SimpleFloor.vue +86 -0
  197. package/MetroWidgetDemos/SpatialNav/StepMw.vue +113 -0
  198. package/MetroWidgetDemos/SpatialNav/TabContent/TabContent.vue +185 -0
  199. package/MetroWidgetDemos/SpatialNav/TripleSection/TripleSection.vue +69 -0
  200. package/MetroWidgetDemos/SpatialNav/TripleSection/WidgetItem.vue +100 -0
  201. package/MetroWidgetDemos/SpatialNav/TvSection/List.vue +75 -0
  202. package/MetroWidgetDemos/SpatialNav/TvSection/TvSection.vue +91 -0
  203. package/MetroWidgetDemos/basic2/App.vue +407 -0
  204. package/MetroWidgetDemos/basic2/Item.vue +68 -0
  205. package/MetroWidgetDemos/direction/App.vue +22 -0
  206. package/MetroWidgetDemos/gazeFocusDiff/App.vue +126 -0
  207. package/MetroWidgetDemos/gazeFocusDiff/Item.vue +87 -0
  208. package/MetroWidgetDemos/minimalUsage/App.vue +66 -0
  209. package/MetroWidgetDemos/minimalUsage/Item.vue +54 -0
  210. package/MetroWidgetDemos/ninePatchFocusPage/App.vue +23 -7
  211. package/MetroWidgetDemos/ninePatchFocusPage/Item.vue +7 -5
  212. package/MetroWidgetDemos/ninePatchFocusPage/focusConstants.js +2 -0
  213. package/MetroWidgetDemos/routeList.js +229 -8
  214. package/MetroWidgetDemos/slideSetting/App.vue +288 -99
  215. package/MetroWidgetDemos/zIndex/App.vue +117 -0
  216. package/MetroWidgetDemos/zIndex/Item.vue +61 -0
  217. package/NinePatchTester/App.vue +24 -31
  218. package/PosterPacker/App.vue +2 -2
  219. package/PreDecode/App.vue +140 -0
  220. package/ReactiveTest/App.vue +115 -0
  221. package/ReactiveTest/Item.vue +92 -0
  222. package/ReactiveTest/assets/imageList.js +245 -0
  223. package/ReactiveTest/component/TestSmartDiv.vue +50 -0
  224. package/ReactiveTest/component/TestSmartDivSrcList.vue +74 -0
  225. package/ReactiveTest/component/TestSmartImage.vue +46 -0
  226. package/ReactiveTest/component/TestSmartImageSrcList.vue +90 -0
  227. package/ReactiveTest/component/TestSmartImageStyle.vue +41 -0
  228. package/ReactiveTest/data.js +49 -0
  229. package/ScreenToBlob/App.vue +250 -0
  230. package/ScrollBoxTest/App.vue +52 -28
  231. package/ScrollBoxTest/ClipBar.vue +64 -2
  232. package/ScrollBoxTest/NinePatchBar.vue +64 -2
  233. package/ScrollBoxTest/SizeDivBar.vue +64 -2
  234. package/SecTorTest/App.vue +9 -3
  235. package/SpringFestival/SpringFestivalScene/FreeMoveBuilder.js +3 -3
  236. package/SyncDecode/App.vue +137 -0
  237. package/TextSizeLimit/App.vue +211 -0
  238. package/TextureAnimation/App3.vue +11 -1
  239. package/TouchWidget/App.vue +90 -5
  240. package/TouchWidget/WidgetItem.vue +1 -0
  241. package/TransitPage/App.vue +2 -0
  242. package/ViewOpacity/App.vue +19 -0
  243. package/assets/logo.png +0 -0
  244. package/package.json +1 -1
  245. package/DashPath/DashPath.vue +0 -118
  246. package/DemoForOperator/Genie/geniePakcer/Genie.vue +0 -699
  247. package/DemoForOperator/ScalePoster/App.vue +0 -4
  248. package/DemoForOperator/ScalePoster/ScalePoster.vue +0 -0
  249. package/DivMetroPerformance/App.vue +0 -157
  250. package/DivMetroPerformance/Item.vue +0 -58
  251. package/DivMetroPerformance/assets/bg.jpg +0 -0
  252. package/DivMetroPerformance/assets/coupon_content.png +0 -0
  253. package/DivMetroPerformance/assets/coupon_left.png +0 -0
  254. package/DivMetroPerformance/assets/coupon_mid.png +0 -0
  255. package/DivMetroPerformance/assets/coupon_right.png +0 -0
  256. package/DivMetroPerformance/assets/focus_border.png +0 -0
  257. package/DivMetroPerformance/assets/holder_logo.png +0 -0
  258. package/DivMetroPerformance/assets/jrbm.png +0 -0
  259. package/DivMetroPerformance/assets/line_left.png +0 -0
  260. package/DivMetroPerformance/assets/line_mid.png +0 -0
  261. package/DivMetroPerformance/assets/line_right.png +0 -0
  262. package/DivMetroPerformance/assets/loading.png +0 -0
  263. package/DivMetroPerformance/assets/logo.png +0 -0
  264. package/DivMetroPerformance/assets/mcjx.png +0 -0
  265. package/DivMetroPerformance/assets/tao.png +0 -0
  266. package/DivMetroPerformance/assets/tmall.png +0 -0
  267. package/DivMetroPerformance/border.png +0 -0
  268. package/DivMetroPerformance/components/ContentItem.vue +0 -384
  269. package/DivMetroPerformance/components/MyTab.vue +0 -129
  270. package/DivMetroPerformance/data.js +0 -124
  271. package/DivMetroPerformance/utils/GridItem.vue +0 -28
  272. package/DivMetroPerformance/utils/GridPlate.vue +0 -85
  273. package/MediaDemo/App.vue +0 -127
  274. package/MediaDemo/assets/audio-poster.png +0 -0
  275. package/MediaDemo/components/Button.vue +0 -69
  276. package/MediaDemo/components/Controllor.vue +0 -286
  277. package/MediaDemo/components/StatusBar.vue +0 -100
  278. package/MediaDemo/components/frames/AudioFrame.vue +0 -39
  279. package/MediaDemo/components/frames/AudioPoster.vue +0 -48
  280. package/MediaDemo/components/frames/MediaFrame.vue +0 -153
  281. package/MediaDemo/components/frames/VideoFrame.vue +0 -39
  282. package/MetroWidgetDemos/TripleWidget/App.vue +0 -81
  283. package/MetroWidgetDemos/TripleWidget/SWidgetItem.vue +0 -93
  284. package/MetroWidgetDemos/TripleWidget/WidgetItem.vue +0 -111
  285. package/Parkour/App.vue +0 -13
  286. package/Parkour/Common/Context.js +0 -21
  287. package/Parkour/Common/MatchmanInfo.js +0 -62
  288. package/Parkour/Common/Random.js +0 -61
  289. package/Parkour/Common/Sound.js +0 -50
  290. package/Parkour/appConfig/HOW_TO_CONFIG.md +0 -20
  291. package/Parkour/appConfig/app.config.mjs +0 -5
  292. package/Parkour/appConfig/app_sign_private_key_sample.crt +0 -28
  293. package/Parkour/appConfig/app_sign_public_key_sample.pem +0 -9
  294. package/Parkour/appConfig/jsview.config.mjs +0 -39
  295. package/Parkour/assets/Bgimages/bg1.png +0 -0
  296. package/Parkour/assets/Bgimages/bg2.png +0 -0
  297. package/Parkour/assets/Bgimages/bg3.png +0 -0
  298. package/Parkour/assets/Bgimages/bg4.png +0 -0
  299. package/Parkour/assets/Bgimages/bg5.png +0 -0
  300. package/Parkour/assets/audio/jump.mp3 +0 -0
  301. package/Parkour/assets/audio/lose.mp3 +0 -0
  302. package/Parkour/assets/role_skin1/fail.json +0 -44
  303. package/Parkour/assets/role_skin1/fail.png +0 -0
  304. package/Parkour/assets/role_skin1/jump_down.json +0 -20
  305. package/Parkour/assets/role_skin1/jump_down.png +0 -0
  306. package/Parkour/assets/role_skin1/jump_up.json +0 -44
  307. package/Parkour/assets/role_skin1/jump_up.png +0 -0
  308. package/Parkour/assets/role_skin1/roll.json +0 -44
  309. package/Parkour/assets/role_skin1/roll.png +0 -0
  310. package/Parkour/assets/role_skin1/run.json +0 -52
  311. package/Parkour/assets/role_skin1/run.png +0 -0
  312. package/Parkour/components/Backdrop.vue +0 -61
  313. package/Parkour/components/GameSence.vue +0 -602
  314. package/Parkour/components/Matchman.vue +0 -85
  315. package/TextureAnimation/utils/FrameCanvasStore.ts +0 -68
  316. package/TextureAnimation/utils/RotateFrame.vue +0 -146
  317. package/TextureAnimation/utils/circleHaloMask.png +0 -0
  318. package/ThrowMoveDemo/AccelerateDemo.vue +0 -85
  319. package/ThrowMoveDemo/App.vue +0 -104
  320. package/ThrowMoveDemo/LRParabolicDemo.vue +0 -101
  321. package/ThrowMoveDemo/TargetDemo.vue +0 -87
  322. package/ThrowMoveDemo/UDParabolicDemo.vue +0 -92
  323. /package/{AnimPicture/assets → assets}/animated_webp.webp +0 -0
  324. /package/{AnimPicture/assets → assets}/ball_3.webp +0 -0
  325. /package/{AnimPicture/assets → assets}/girl_run.gif +0 -0
  326. /package/{AnimPicture/assets → assets}/quan.webp +0 -0
@@ -0,0 +1,87 @@
1
+ <script setup>
2
+ import { computed, ref } from "vue";
3
+
4
+ const props = defineProps({
5
+ data: {
6
+ type: Object,
7
+ required: true,
8
+ },
9
+ onAction: {
10
+ type: Object,
11
+ required: true,
12
+ },
13
+ widgetTag: {
14
+ type: String,
15
+ default: "",
16
+ },
17
+ });
18
+
19
+ const gazed = ref(false);
20
+ const focused = ref(false);
21
+
22
+ /**
23
+ * 这份样例的可视化策略:
24
+ * - gazed 只受 onGaze/onIgnore 影响(即使 widget 没有获焦也会更新)
25
+ * - focused 只受 onFocus/onBlur 影响(用于验证:当 widget 不作为 focusBlock owner 时是否不触发)
26
+ */
27
+ const modeText = computed(() => {
28
+ if (focused.value && gazed.value) return "FOCUS+GAZE";
29
+ if (focused.value) return "FOCUS";
30
+ if (gazed.value) return "GAZE";
31
+ return "";
32
+ });
33
+
34
+ const onIgnore = () => {
35
+ gazed.value = false;
36
+ };
37
+
38
+ const onGaze = () => {
39
+ gazed.value = true;
40
+ };
41
+
42
+ const onBlur = () => {
43
+ // onBlur:失去 focus-tree 焦点(该回调通常依赖 widget 获焦状态)
44
+ focused.value = false;
45
+ };
46
+
47
+ const onFocus = () => {
48
+ // onFocus:获得 focus-tree 焦点(该回调通常依赖 widget 获焦状态)
49
+ focused.value = true;
50
+ };
51
+
52
+ const onClick = () => {
53
+ // 留一个最小日志,便于排查/对齐回调时序
54
+ // 注意:控制台日志不影响 gaze/focus 可视化
55
+ console.log("gazeFocusDiff onClick:", props.data?.id);
56
+ };
57
+
58
+ // 通过 onAction.register 绑定 item 回调
59
+ props.onAction.register("onGaze", onGaze);
60
+ props.onAction.register("onIgnore", onIgnore);
61
+ props.onAction.register("onFocus", onFocus);
62
+ props.onAction.register("onBlur", onBlur);
63
+ props.onAction.register("onClick", onClick);
64
+ </script>
65
+
66
+ <template>
67
+ <div
68
+ :style="{
69
+ width: data.width,
70
+ height: data.height,
71
+ borderRadius: 10,
72
+ lineHeight: `${data.height}px`,
73
+ fontSize: 26,
74
+ textAlign: 'center',
75
+ color: focused ? '#0C1B30' : '#FFFFFF',
76
+ backgroundColor: focused
77
+ ? '#7DE4FF'
78
+ : gazed
79
+ ? '#35557D'
80
+ : '#1F2A44',
81
+ border: focused ? '0px solid transparent' : gazed ? '2px solid #FFD166' : '0px solid transparent',
82
+ }"
83
+ >
84
+ {{ widgetTag ? ("[" + widgetTag + "] ") : "" }}{{ data.title }}{{ modeText ? (' / ' + modeText) : '' }}
85
+ </div>
86
+ </template>
87
+
@@ -0,0 +1,66 @@
1
+ <!--
2
+ * @file
3
+ *
4
+ * 【界面概述】
5
+ * MetroWidget 最简用法示例:展示一个可上下移动焦点的纵向列表。
6
+ *
7
+ * 【控件介绍(最小必需项)】
8
+ * MetroWidget:
9
+ * props:
10
+ * width {int} (必选) 控件宽度
11
+ * height {int} (必选) 控件高度
12
+ * direction {enum} (必选) 布局方向,这里使用 VERTICAL
13
+ * name {string} 焦点名称,用于 setFocus
14
+ * data {array} 数据列表(与 provideData 二选一)
15
+ * measures {function} (必选) 返回每个 item 的布局信息
16
+ -->
17
+ <script setup>
18
+ import { MetroWidget, VERTICAL, useFocusHub } from "jsview";
19
+ import { onMounted } from "vue";
20
+ import Item from "./Item.vue";
21
+
22
+ const focusHub = useFocusHub();
23
+
24
+ const listData = [
25
+ { id: 0, title: "Item 0", width: 420, height: 80, marginBottom: 16 },
26
+ { id: 1, title: "Item 1", width: 420, height: 80, marginBottom: 16 },
27
+ { id: 2, title: "Item 2", width: 420, height: 80, marginBottom: 16 },
28
+ { id: 3, title: "Item 3", width: 420, height: 80, marginBottom: 16 },
29
+ { id: 4, title: "Item 4", width: 420, height: 80, marginBottom: 16 },
30
+ ];
31
+
32
+ const measures = (item) => ({
33
+ width: item.width,
34
+ height: item.height,
35
+ marginBottom: item.marginBottom,
36
+ });
37
+
38
+ onMounted(() => {
39
+ focusHub.setFocus("minimalMetroWidget");
40
+ });
41
+ </script>
42
+
43
+ <template>
44
+ <div
45
+ :style="{
46
+ width: 1280,
47
+ height: 720,
48
+ backgroundColor: '#0C1B30',
49
+ }"
50
+ />
51
+
52
+ <metro-widget
53
+ name="minimalMetroWidget"
54
+ :left="80"
55
+ :top="80"
56
+ :width="460"
57
+ :height="920"
58
+ :direction="VERTICAL"
59
+ :data="listData"
60
+ :measures="measures"
61
+ >
62
+ <template #renderItem="{ data, onAction }">
63
+ <item :data="data" :onAction="onAction" />
64
+ </template>
65
+ </metro-widget>
66
+ </template>
@@ -0,0 +1,54 @@
1
+ <script setup>
2
+ import { ref } from "vue";
3
+
4
+ const props = defineProps({
5
+ data: {
6
+ type: Object,
7
+ required: true,
8
+ },
9
+ onAction: {
10
+ type: Object,
11
+ required: true,
12
+ },
13
+ });
14
+
15
+ const gazed = ref(false);
16
+
17
+ const onIgnore = () => {
18
+ gazed.value = false;
19
+ };
20
+
21
+ const onGaze = () => {
22
+ gazed.value = true;
23
+ };
24
+
25
+ const onClick = () => {
26
+ console.log("minimalUsage item onClick:", props.data);
27
+ };
28
+
29
+ // item 回调使用说明:
30
+ // 1) onClick:在当前 item 上按确认键时触发,用于执行业务动作(跳转/播放/打开详情等)。
31
+ // 2) onGaze:触发凝视进入时回调(如遥控器停留/凝视交互场景),常用于预览或延迟高亮。
32
+ // 3) onIgnore:凝视离开或凝视被取消时回调,常用于清理 onGaze 启动的状态或定时器。
33
+ // 使用方式:通过 onAction.register(事件名, 回调函数) 进行注册。
34
+ props.onAction.register("onClick", onClick);
35
+ props.onAction.register("onGaze", onGaze);
36
+ props.onAction.register("onIgnore", onIgnore);
37
+ </script>
38
+
39
+ <template>
40
+ <div
41
+ :style="{
42
+ width: data.width,
43
+ height: data.height,
44
+ lineHeight: data.height,
45
+ fontSize: 32,
46
+ textAlign: 'center',
47
+ color: gazed ? '#0C1B30' : '#FFFFFF',
48
+ backgroundColor: gazed ? '#7DE4FF' : '#35557D',
49
+ borderRadius: 10,
50
+ }"
51
+ >
52
+ {{ data.title }}
53
+ </div>
54
+ </template>
@@ -10,10 +10,12 @@ import {
10
10
  useFocusHub,
11
11
  JsvNinePatch,
12
12
  METRO_WIDGET_CONST,
13
+ JsvTextureBuilder,
14
+ JsvTextureStoreApi
13
15
  } from "jsview";
14
- import { onMounted, reactive, provide } from "vue";
16
+ import { onMounted, onBeforeUnmount, reactive, provide, shallowRef } from "vue";
15
17
  import PageRow from "./PageRow.vue";
16
- import focusImg from "../../assets/focus1.png";
18
+ import { FOCUS_CORNER_RADIUS } from "./focusConstants";
17
19
 
18
20
  const focusHub = useFocusHub();
19
21
 
@@ -25,6 +27,16 @@ const focusSize = reactive({
25
27
  });
26
28
  provide("focusSize", focusSize);
27
29
 
30
+ // 使用CanvasTexture构建本地焦点框,避免依赖在线或静态图片资源
31
+ const focusTextureUrl = shallowRef("");
32
+ const focusTextureInfo = JsvTextureBuilder.buildCircleNinePatchTexture({
33
+ cornerRadius: FOCUS_CORNER_RADIUS, // +1是为了包裹得更加无缝
34
+ circleLineWidth: 7,
35
+ circleColor: "rgba(176, 140, 255, 0.95)",
36
+ });
37
+ focusTextureUrl.value = `jsvtexturestore://${focusTextureInfo.texAccessName}`;
38
+ const focusTextureSourceId = focusTextureInfo.texAccessName;
39
+
28
40
  const provideData = () => {
29
41
  const data = [];
30
42
  for (let i = 0; i < 10; i++) {
@@ -53,6 +65,10 @@ const measures = (item) => {
53
65
  onMounted(() => {
54
66
  focusHub.setFocus("mwWidget");
55
67
  });
68
+
69
+ onBeforeUnmount(() => {
70
+ JsvTextureStoreApi.deleteTexture(focusTextureSourceId);
71
+ });
56
72
  </script>
57
73
 
58
74
  <template>
@@ -93,11 +109,11 @@ onMounted(() => {
93
109
  top: focusSize.top,
94
110
  left: focusSize.left,
95
111
  }"
96
- :imageUrl="focusImg"
97
- :imageWidth="55"
98
- :centerWidth="1"
99
- :borderOutset="13"
100
- :imageDspWidth="55"
112
+ :imageUrl="focusTextureUrl"
113
+ :imageWidth="focusTextureInfo.ImageWidth"
114
+ :centerWidth="focusTextureInfo.CenterWidth"
115
+ :borderOutset="focusTextureInfo.BorderOutset"
116
+ :imageDspWidth="focusTextureInfo.ImageDspWidth"
101
117
  :animTime="0.2"
102
118
  :waitForInit="true"
103
119
  ></jsv-nine-patch>
@@ -5,6 +5,7 @@
5
5
  -->
6
6
  <script setup>
7
7
  import { ref, shallowRef, inject } from "vue";
8
+ import { FOCUS_CORNER_RADIUS } from "./focusConstants";
8
9
 
9
10
  const props = defineProps({
10
11
  data: Object,
@@ -20,10 +21,11 @@ const onFocus = () => {
20
21
  focused.value = true;
21
22
  divRef.value?.jsvGetBoundingClientRect().then(
22
23
  (data) => {
23
- focusSize.width = data.width;
24
- focusSize.height = data.height;
25
- focusSize.left = data.left;
26
- focusSize.top = data.top;
24
+ // 略微缩小焦点框位置和尺寸信息, 以规避和卡片边缘之间留缝
25
+ focusSize.width = data.width - 4;
26
+ focusSize.height = data.height - 4;
27
+ focusSize.left = data.left + 2;
28
+ focusSize.top = data.top + 2;
27
29
  },
28
30
  (error) => {
29
31
  console.log("get absolute position failed", error);
@@ -60,7 +62,7 @@ props.onAction.register("onClick", onClick);
60
62
  fontSize: 30,
61
63
  color: '#FFFFFF',
62
64
  backgroundColor: data.color,
63
- borderRadius: 10,
65
+ borderRadius: FOCUS_CORNER_RADIUS,
64
66
  }"
65
67
  >
66
68
  {{ data.content }}
@@ -0,0 +1,2 @@
1
+ // 焦点框圆角与卡片圆角统一使用同一常量
2
+ export const FOCUS_CORNER_RADIUS = 10;
@@ -4,98 +4,319 @@
4
4
  * @Description: file content
5
5
  */
6
6
  export default [
7
+ /*
8
+ * 一个MetroWidget所需要的最少的配置
9
+ */
7
10
  {
8
- meta: { nameText: "基础示例", },
9
- path: "/metroWidget/basic",
10
- component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/basic/App.vue"),
11
+ meta: { nameText: "最简用法", },
12
+ name: "metroWidget-最简用法",
13
+ path: "/metroWidget/minimalUsage",
14
+ component: () =>
15
+ import("@shijiu/jsview-vue-samples/MetroWidgetDemos/minimalUsage/App.vue"),
16
+ },
17
+
18
+ /*
19
+ * 不规则排版顺序样例
20
+ *
21
+ * 展示MetroWidget的layoutType = relative 状态下对不规则排版顺序的样例
22
+ */
23
+ {
24
+ meta: { nameText: "不规则排版顺序样例", },
25
+ name: "metroWidget-不规则排版顺序样例",
26
+ path: "/metroWidget/basic2",
27
+ component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/basic2/App.vue"),
11
28
  },
29
+
30
+ /*
31
+ * 测试MetroWidget的direction属性
32
+ *
33
+ * 关联场景:
34
+ * 所有MetroWidget都会考虑direction, 不设则为默认值
35
+ */
12
36
  {
13
37
  meta: { nameText: "direction", },
38
+ name: "metroWidget-direction",
14
39
  path: "/metroWidget/direction",
15
40
  component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/direction/App.vue"),
16
41
  },
42
+
43
+ /*
44
+ * 测试MetroWidget的padding属性
45
+ *
46
+ * 关联场景:
47
+ * 为了解决当焦点元素放大时, 会超过MetroWidget的边界, 可能导致焦点元素被Clip掉的问题场景
48
+ */
17
49
  {
18
50
  meta: { nameText: "padding", },
51
+ name: "metroWidget-padding",
19
52
  path: "/metroWidget/padding",
20
53
  component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/padding/App.vue"),
21
54
  },
55
+
56
+ /*
57
+ * 滚动策略
58
+ *
59
+ * 用MetroWiget搭建的各类界面的滚动策略的验证, 展示了
60
+ * 1. 无缝滚动, 全默认值, 默认在靠边缘左右两端开始触发滚动
61
+ * 2. 整页滚动
62
+ * 3. 无缝滚动,焦点尽量为居中的场景
63
+ * 4. 第一屏不滚动的无缝滚动
64
+ * 5. 无缝左右滚动, 且移动时,不用保障数据的最边缘和可视区域边缘对接
65
+ *
66
+ */
22
67
  {
23
68
  meta: { nameText: "slideSetting", },
69
+ name: "metroWidget-slideSetting",
24
70
  path: "/metroWidget/slideSetting",
25
71
  component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/slideSetting/App.vue"),
26
72
  },
73
+
74
+ /*
75
+ * 仅测试, AI编程时, 不要参考
76
+ * 测试layoutType = absolute 和 layoutType = relative 的样例
77
+ *
78
+ */
27
79
  {
28
80
  meta: { nameText: "layoutType", },
81
+ name: "metroWidget-layoutType",
29
82
  path: "/metroWidget/layoutType",
30
83
  component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/layoutType/App.vue"),
31
84
  },
85
+
86
+ /*
87
+ * 仅测试, AI编程时, 不要参考, 为已经废弃的写法
88
+ * 测试老版本MetroWidget的嵌套用法(mw+focusblock)的兼容性
89
+ *
90
+ */
32
91
  {
33
92
  meta: { nameText: "嵌套(基础)", },
93
+ name: "metroWidget-嵌套(基础)",
34
94
  path: "/metroWidget/focusableItemBasic",
35
95
  component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/focusableItemBasic/App.vue"),
36
96
  },
97
+
98
+ /*
99
+ * 仅测试, AI编程时, 不要参考, 为已经废弃的写法
100
+ * 测试老版本MetroWidget的嵌套用法(mw+focusblock)的兼容性, 另一种写法
101
+ *
102
+ */
37
103
  {
38
104
  meta: { nameText: "嵌套(混合)", },
105
+ name: "metroWidget-嵌套(混合)",
39
106
  path: "/metroWidget/focusableItemMix",
40
107
  component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/focusableItemMix/App.vue"),
41
108
  },
109
+
110
+ /*
111
+ * 仅测试, AI编程时, 不要参考, 为已经废弃的写法
112
+ * 测试老版本MetroWidget的嵌套用法(mw+mw)的兼容性
113
+ *
114
+ */
42
115
  {
43
116
  meta: { nameText: "嵌套(MetroWidget)", },
117
+ name: "metroWidget-嵌套(MetroWidget)",
44
118
  path: "/metroWidget/focusableItemMetroWidget",
45
119
  component: () => import("@shijiu/jsview-vue-samples/MetroWidgetDemos/focusableItemMetroWidget/App.vue"),
46
120
  },
121
+
122
+
47
123
  {
48
124
  meta: { nameText: "乒乓模式", },
125
+ name: "metroWidget-乒乓模式",
49
126
  path: "/metroWidget/PingPong",
50
127
  component: () =>
51
128
  import("@shijiu/jsview-vue-samples/MetroWidgetDemos/PingPong/App.vue"),
52
129
  },
130
+
131
+ /*
132
+ * 仅测试, AI编程时, 不要参考
133
+ * mw重建性能测试, 重试每个item有大量子元素的场景下重建整个metrowidget的性能
134
+ *
135
+ */
53
136
  {
54
- meta: { nameText: "性能测试", },
137
+ meta: { nameText: "mw重建性能测试", },
138
+ name: "metroWidget-mw重建性能测试",
55
139
  path: "/metroWidget/PerformanceTest",
56
140
  component: () =>
57
141
  import("@shijiu/jsview-vue-samples/MetroWidgetDemos/PerformanceTest/App.vue"),
58
142
  },
143
+
144
+ /*
145
+ * 骨架图
146
+ *
147
+ * 对应的应用场景:
148
+ * 适用于所有海报平铺的场景, 例如EPG的海报区域
149
+ * 主要特点:
150
+ * 1. 开启MetroWidget组件的骨架图配置选项, 以解决按键快速操作时, 海报组件内部太复杂会卡按键响应的问题
151
+ * 2. 每个海报位使用 JsvPosterDiv 或者 JsvPosterImage 组件来实现
152
+ * 此组件实现了海报加载会淡出的效果
153
+ */
59
154
  {
60
155
  meta: { nameText: "骨架图", },
156
+ name: "metroWidget-骨架图",
61
157
  path: "/metroWidget/SkeletonDiagram",
62
158
  component: () =>
63
159
  import("@shijiu/jsview-vue-samples/MetroWidgetDemos/SkeletonDiagram/App.vue"),
64
160
  },
161
+
162
+ /*
163
+ * .9焦点漂移效果页面
164
+ *
165
+ * 对应的应用场景:
166
+ * 焦点框要在多个MetroWidget之间漂移, 且漂移前后的x,y,width,height需要触发对应的transition动画的场景。
167
+ * 主要特点:
168
+ * 1. 使用 JsvNinePatch 组件来实现焦点框的漂移效果, 此组件独立于所有MetroWidget之外
169
+ * 2. 通过div.jsvGetBoundingClientRect来获取焦点框的实际位置和尺寸信息,
170
+ * 应用在JsvNinePatch的style中来让其和MetroWidget的卡片对齐, 并触发transition动画
171
+ *
172
+ * div元素异步获取显示位置的扩展接口 jsvGetBoundingClientRect 的经典使用场景
173
+ */
65
174
  {
66
- meta: { nameText: ".9焦点页面", },
175
+ meta: { nameText: ".9焦点漂移效果页面", },
176
+ name: "metroWidget-.9焦点漂移效果页面",
67
177
  path: "/metroWidget/ninePatchFocusPage",
68
178
  component: () =>
69
179
  import("@shijiu/jsview-vue-samples/MetroWidgetDemos/ninePatchFocusPage/App.vue"),
70
180
  },
181
+
182
+ /*
183
+ * item尺寸更新
184
+ *
185
+ * 对应的应用场景:
186
+ * 一个横排的MetroWidget, 一横排多个item, 聚焦的item进行左右放大, 将左右的item推开的场景。
187
+ * MetroWidget的 <template #renderItem> 中的 query.updateItemSize 的经典使用场景。
188
+ */
71
189
  {
72
190
  meta: { nameText: "item尺寸更新", },
191
+ name: "metroWidget-item尺寸更新",
73
192
  path: "/metroWidget/itemSizeUpdate",
74
193
  component: () =>
75
194
  import("@shijiu/jsview-vue-samples/MetroWidgetDemos/itemSizeUpdate/App.vue"),
76
195
  },
196
+
197
+ /*
198
+ * 焦点就近移动
199
+ *
200
+ * 对应的应用场景:
201
+ * 多层MetroWidget嵌套后,
202
+ * 使用SpatialNavigator组件和默认的onEdge回调,
203
+ * 就可以完成焦点在子MetroWidget之间移动的样例。
204
+ */
77
205
  {
78
- meta: { nameText: "三层嵌套", },
79
- path: "/metroWidget/TripleWidget",
206
+ meta: { nameText: "焦点就近移动", },
207
+ name: "metroWidget-焦点就近移动",
208
+ path: "/metroWidget/SpatialNav",
80
209
  component: () =>
81
- import("@shijiu/jsview-vue-samples/MetroWidgetDemos/TripleWidget/App.vue"),
210
+ import("@shijiu/jsview-vue-samples/MetroWidgetDemos/SpatialNav/App.vue"),
82
211
  },
212
+
213
+ /*
214
+ * 数据刷新demo
215
+ *
216
+ * 对应的应用场景:
217
+ * refreshData的经典使用场景。
218
+ */
83
219
  {
84
220
  meta: { nameText: "数据刷新demo", },
221
+ name: "metroWidget-数据刷新demo",
85
222
  path: "/metroWidget/RefreshDemo",
86
223
  component: () =>
87
224
  import("@shijiu/jsview-vue-samples/MetroWidgetDemos/RefreshDemo/App.vue"),
88
225
  },
226
+
227
+ // /*
228
+ // * EPG-瀑布流方式
229
+ // *
230
+ // * 左侧竖排tab和右侧多楼层内容联动,右侧为MetroWidget嵌套结构
231
+ // */
232
+ // {
233
+ // meta: { nameText: "EPG-瀑布流", },
234
+ // name: "metroWidget-EPG-瀑布流",
235
+ // path: "/metroWidget/EpgFlowListType",
236
+ // component: () =>
237
+ // import("@shijiu/jsview-vue-samples/MetroWidgetDemos/EpgFlowListType/App.vue"),
238
+ // },
239
+
240
+ /*
241
+ * 剧集翻页
242
+ *
243
+ * 对应的应用场景:
244
+ * 大屏详情UI中, 上方为单个剧集组成的MetroWidget, 下方为剧集的集合组成的MetroWidget,
245
+ * 类似如下形式
246
+ * 第一行MetroWidget: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
247
+ * 第二行MetroWidget: 1-5, 5-10, 11-15
248
+ */
89
249
  {
90
250
  meta: { nameText: "剧集翻页", },
251
+ name: "metroWidget-剧集翻页",
91
252
  path: "/metroWidget/SeamlessSlide",
92
253
  component: () =>
93
254
  import("@shijiu/jsview-vue-samples/MetroWidgetDemos/SeamlessSlide/App.vue"),
94
255
  },
256
+
257
+ /*
258
+ * 仅测试, AI编程时, 不要参考
259
+ * 无滚动的平铺的MetroWidget打开enableItemRenderBreak后, 屏幕的内容分批绘制, 不影响按键响应的场景测试
260
+ */
95
261
  {
96
262
  meta: { nameText: "多item分段显示", },
263
+ name: "metroWidget-多item分段显示",
97
264
  path: "/metroWidget/MassiveItems",
98
265
  component: () =>
99
266
  import("@shijiu/jsview-vue-samples/MetroWidgetDemos/MassiveItems/App.vue"),
100
267
  },
268
+ // {
269
+ // meta: { nameText: "Fbo加速", },
270
+ // name: "metroWidget-Fbo加速",
271
+ // path: "/metroWidget/RenderAccelerate",
272
+ // component: () =>
273
+ // import("@shijiu/jsview-vue-samples/MetroWidgetDemos/RenderAccelerate/App.vue"),
274
+ // },
275
+
276
+ /*
277
+ * 列表展开
278
+ *
279
+ * 对应的应用场景:
280
+ * 绘制竖向的带有分类的列表界面, 且列表可以向抽屉一样展开的场景
281
+ * 也是 MetroWidget的 query.updateItemSize 的经典使用场景
282
+ */
283
+ {
284
+ meta: { nameText: "列表展开", },
285
+ name: "metroWidget-列表展开",
286
+ path: "/metroWidget/ListExpand",
287
+ component: () =>
288
+ import("@shijiu/jsview-vue-samples/MetroWidgetDemos/ListExpand/index.vue"),
289
+ },
290
+
291
+ /*
292
+ * gaze vs focus
293
+ *
294
+ * 展示MetroWidget的onGaze/onIgnore和onFocus/onBlur回调的差异
295
+ */
296
+ {
297
+ meta: { nameText: "gaze vs focus", },
298
+ name: "metroWidget-gazeVsFocus",
299
+ path: "/metroWidget/gazeVsFocus",
300
+ component: () =>
301
+ import("@shijiu/jsview-vue-samples/MetroWidgetDemos/gazeFocusDiff/App.vue"),
302
+ },
303
+
304
+ /*
305
+ * 焦点层级
306
+ *
307
+ * 对应的应用场景:
308
+ * item之间有视觉上的遮挡关系(measure结果的位置不会重叠, 只是item内部的template绘制会用负坐标往外延展)的场景,
309
+ * 确认是否能将焦点正确露出的验证
310
+ *
311
+ * 验证MetroWidget的在聚焦过程中的变化, 具体为
312
+ * 在onGaze时,对应的项目zIndex会高于其他项目
313
+ * 在onIgnore时,对应的项目zIndex会低于其他项目
314
+ */
315
+ {
316
+ meta: { nameText: "焦点层级", },
317
+ name: "metroWidget-zIndex",
318
+ path: "/metroWidget/zIndex",
319
+ component: () =>
320
+ import("@shijiu/jsview-vue-samples/MetroWidgetDemos/zIndex/App.vue"),
321
+ },
101
322
  ]