@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
@@ -19,7 +19,7 @@
19
19
  :style="{
20
20
  width: sampleImageWidth,
21
21
  height: sampleImageWidth,
22
- backgroundImage: `jsvtexturestore://${sourceId}`,
22
+ backgroundImage: textureUrl,
23
23
  }"
24
24
  />
25
25
  <div
@@ -100,7 +100,7 @@
100
100
  width: vTargetRectWidth,
101
101
  height: vTargetRectHeight,
102
102
  }"
103
- :imageUrl="`jsvtexturestore://${sourceId}`"
103
+ :imageUrl="textureUrl"
104
104
  :imageWidth="vImageWidth"
105
105
  :centerWidth="vCenterWidth"
106
106
  :imageDspWidth="vImageDspWidth"
@@ -132,44 +132,37 @@
132
132
 
133
133
  <script setup>
134
134
  import { shallowRef, onBeforeUnmount } from "vue";
135
- import { JsvNinePatch, JsvTextureStoreApi, JsvFlexDiv } from "jsview";
135
+ import { JsvNinePatch, JsvTextureStoreApi, JsvFlexDiv, JsvTextureBuilder } from "jsview";
136
136
 
137
- // 调试参数输入设定
138
- const innerRadius2 = 110; // 最右边图片的内直径(也是右边图矩形的边长值)
139
- const circleLineWidth = 10; // 最右边图的边缘粗细
140
- const sampleImageWidth = 148; // 最右边图形的画布尺寸,画布为正方形
137
+ // 素材图片的参数, 以下三个值根据设计要求调整, 只和要框住的圆角矩形的圆角半径有关, 和要框住的圆角矩形的宽高无关
138
+ const vTargetRectRaidus = 55; // 需要对齐区域的圆角半径
139
+ const circleLineWidth = 10; // 焦点框素材图片的焦点框的线粗, 根据设计要求调整即可
140
+ const innerRadius2 = vTargetRectRaidus * 2; // 焦点框素材图片的内直径, 此值应该等于所框图形的圆角半径的二倍
141
141
 
142
+ // 以下两个设置定为变量, 实际根据圆角矩形的宽高可变化
142
143
  const vTargetRectWidth = 250; // 需要对齐区域的矩形宽
143
144
  const vTargetRectHeight = 300; // 需要对齐区域的矩形高
144
- const vTargetRectRaidus = innerRadius2 / 2; // 需要对齐区域的圆角半径,请和圆环内径对应的半径一致才能套齐
145
145
 
146
- // 计算后的对应NinePatch参数
147
- let vBorderOutset = (sampleImageWidth - innerRadius2) / 2; // 设置值为图片长度减去内直径除以2
148
- let vImageWidth = sampleImageWidth; // 原图尺寸设置
149
- let vImageDspWidth = sampleImageWidth; // 显示图尺寸,当想复用目标图片,但是半径又不想等时才和原图不一样
150
- let vCenterWidth = 1; // 圆形的.9图, 中心固定为1
146
+ let textureUrl = shallowRef("");
147
+ const textureInfo = JsvTextureBuilder.buildCircleNinePatchTexture({
148
+ cornerRadius: vTargetRectRaidus,
149
+ circleLineWidth,
150
+ circleColor: "#FF00FF7F",
151
+ bgColor: "rgba(200,200,200,0.5)",
152
+ }); // 统一通过TextureBuilder构建CanvasTexture
153
+ textureUrl.value = `jsvtexturestore://${textureInfo.texAccessName}`;
154
+ let sourceId = textureInfo.texAccessName;
151
155
 
152
- // 设置设定模拟绘制.9图
153
- let canvasRef;
154
- let sourceId = shallowRef("");
155
- canvasRef = JsvTextureStoreApi.canvasTexture(
156
- sampleImageWidth,
157
- sampleImageWidth
158
- ); // 创建画布
156
+ // 获得JsvNinePatch的参数
157
+ let vBorderOutset = textureInfo.BorderOutset;
158
+ let vImageWidth = textureInfo.ImageWidth; // 原图尺寸, 为显示尺寸 x displayScale
159
+ let vImageDspWidth = textureInfo.ImageDspWidth; // 显示尺寸: 图尺进行缩放到目标位置的尺寸
160
+ let vCenterWidth = textureInfo.CenterWidth;
159
161
 
160
- let circleRadius =
161
- Math.floor(innerRadius2 / 2) + Math.floor(circleLineWidth / 2); // 圆环绘制路径是粗线的中心线,所以要减去一半的线宽
162
- let customPath = canvasRef.circlePath(
163
- Math.floor(sampleImageWidth / 2),
164
- Math.floor(sampleImageWidth / 2),
165
- circleRadius
166
- ); // 创建圆环绘制路径,圆形在画布的中心点位置
167
- canvasRef.drawColor("rgba(200,200,200,0.5)"); // 画布绘制半透明底色
168
- customPath.stroke(circleLineWidth, "#FF00FF7F"); // 以给定线宽绘制圆环
169
- sourceId.value = canvasRef.commit(); // texture和div的textureStore绑定
162
+ const sampleImageWidth = vImageDspWidth; // 样例图的显示尺寸设置
170
163
 
171
164
  onBeforeUnmount(() => {
172
- JsvTextureStoreApi.deleteTexture(sourceId.value); // 释放texture资源
165
+ JsvTextureStoreApi.deleteTexture(sourceId); // 释放texture资源
173
166
  });
174
167
  </script>
175
168
 
@@ -0,0 +1,140 @@
1
+ <template>
2
+ <jsv-focus-block
3
+ :onAction="{ onKeyDown }"
4
+ autoFocus
5
+ :style="{
6
+ width: 1280,
7
+ height: 720,
8
+ backgroundColor: '#007788',
9
+ }"
10
+ >
11
+ <JsvPreload :downloadList="downloadInfo" :onDownloadDone="onDownloadDone" />
12
+ <div
13
+ v-if="loadDone"
14
+ :style="{
15
+ left: rootLeft,
16
+ transition: 'left 0.5s ease-in-out',
17
+ }"
18
+ @transitionend="onTransitionEnd"
19
+ >
20
+ <JsvPosterImage
21
+ v-if="showImg == 0"
22
+ :style="{
23
+ left: 0,
24
+ width: 1280,
25
+ height: 720,
26
+ }"
27
+ :syncDraw="true"
28
+ :src="ImageLongmao"
29
+ >
30
+ </JsvPosterImage>
31
+ <JsvPosterImage
32
+ v-if="showImg == 1"
33
+ :style="{
34
+ left: 1280,
35
+ width: 1280,
36
+ height: 720,
37
+ }"
38
+ :syncDraw="true"
39
+ :src="ImageOwl"
40
+ >
41
+ </JsvPosterImage>
42
+ <JsvPosterImage
43
+ v-if="showImg == 2"
44
+ :style="{
45
+ left: 2560,
46
+ width: 1280,
47
+ height: 720,
48
+ }"
49
+ :syncDraw="true"
50
+ :src="ImagePanda"
51
+ >
52
+ </JsvPosterImage>
53
+ </div>
54
+
55
+ <div
56
+ :style="{
57
+ width: 1280,
58
+ height: 40,
59
+ backgroundColor: '#00000088',
60
+ top: 100,
61
+ color: '#ffffff',
62
+ fontSize: 30,
63
+ textAlign: 'center',
64
+ }"
65
+ >
66
+ 下载并预解码完成后展示图片, 按左右键, 看图片解码时间的延迟
67
+ </div>
68
+
69
+ <div
70
+ :style="{
71
+ left: 100,
72
+ top: 100,
73
+ width: 100,
74
+ height: 100,
75
+ backgroundColor: '#ff0000',
76
+ animation: 'rotate 5s linear infinite',
77
+ }"
78
+ ></div>
79
+ </jsv-focus-block>
80
+ </template>
81
+
82
+ <script setup>
83
+ import { ref, onMounted } from "vue";
84
+ import { JsvPosterImage, JsvPreload, buildDownloadInfo } from "jsview";
85
+
86
+ const rootLeft = ref(0);
87
+ const showImg = ref(0);
88
+ const loadDone = ref(false);
89
+ const ImageLongmao =
90
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/DemoHomepage/App/BackgroundLongmao.jpg";
91
+ const ImagePanda =
92
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/panda.jpeg";
93
+ const ImageOwl =
94
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/CustomShader/App/owl.jpeg";
95
+
96
+ const downloadInfo = [
97
+ buildDownloadInfo(ImageLongmao, null, false, true),
98
+ buildDownloadInfo(ImagePanda, null, false, true),
99
+ buildDownloadInfo(ImageOwl, null, false, true),
100
+ ];
101
+
102
+ const onKeyDown = (ev) => {
103
+ switch (ev.keyCode) {
104
+ case 37:
105
+ if (showImg.value > 0) {
106
+ showImg.value = showImg.value - 1;
107
+ rootLeft.value = rootLeft.value + 1280;
108
+ }
109
+ break;
110
+ case 39:
111
+ if (showImg.value < 2) {
112
+ showImg.value = showImg.value + 1;
113
+ rootLeft.value = rootLeft.value - 1280;
114
+ }
115
+ break;
116
+ }
117
+ };
118
+
119
+ const onDownloadDone = (info) => {
120
+ console.log("onDownloadDone", info);
121
+ loadDone.value = true;
122
+ };
123
+
124
+ const onTransitionEnd = () => {
125
+ console.log("onAnimationEnd clear resource");
126
+ window.JsvCoreApi?.triggerTextureRecycle?.();
127
+ };
128
+
129
+ </script>
130
+
131
+ <style>
132
+ @keyframes rotate {
133
+ from {
134
+ transform: rotate3d(0, 0, 1, 0deg);
135
+ }
136
+ to {
137
+ transform: rotate3d(0, 0, 1, 360deg);
138
+ }
139
+ }
140
+ </style>
@@ -0,0 +1,115 @@
1
+ <script setup>
2
+ /**
3
+ * @description: 图片交替展示示例
4
+ * 如本样例的item.vue所示, 使用 JsvPosterImage/JsvPosterDiv 组件, 设置 srcList 属性,
5
+ * 将AB两个图作为非响应式数组输入到组件中, 即可实现AB都载入到内存,切换时不会闪
6
+ * 相比Preload进行预加载,此方案没有Preload的图永久在内存的问题,AB两图会根据显隐的控制在不显示时自动**同时**清理出内存
7
+ */
8
+ import { MetroWidget, VERTICAL, useFocusHub, JsvTextureStoreApi } from "jsview";
9
+ import Item from "./Item.vue";
10
+ import { onMounted, inject, shallowRef } from "vue";
11
+ import { useRouter } from "vue-router";
12
+ import data from "./data.js";
13
+ import logo from "../assets/logo.png";
14
+
15
+ const router = useRouter();
16
+ const focusHub = useFocusHub();
17
+
18
+ const measures = (item) => {
19
+ return {
20
+ width: item.width,
21
+ height: item.height,
22
+ marginRight: 10,
23
+ marginBottom: 10,
24
+ placeHolderLayout: {
25
+ width: item.width,
26
+ height: item.height,
27
+ logoWidth: item.index % 2 == 0 ? 120 : 60,
28
+ logoHeight: item.index % 2 == 0 ? 98 : 49,
29
+ },
30
+ };
31
+ };
32
+
33
+ let rCaptureImage = inject("homeCaptureImage");
34
+ let rToCaputureNode = shallowRef(null);
35
+
36
+ const onDispatchKeyDown = (ev) => {
37
+ return false;
38
+ };
39
+
40
+ const onKeyDown = (ev) => {
41
+ if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
42
+ // 返回处理, 测试跨路由截图功能
43
+ JsvTextureStoreApi.capture2Texture(
44
+ rToCaputureNode.value,
45
+ (textureName, autoRecycle, w, h) => {
46
+ console.log("test ImageCapture done");
47
+ rCaptureImage.value = textureName;
48
+ router.go(-1);
49
+ },
50
+ false // 不自动回收
51
+ );
52
+ }
53
+ return true;
54
+ };
55
+
56
+ const provideData = () => {
57
+ return data;
58
+ };
59
+
60
+ onMounted(() => {
61
+ focusHub.setFocus("myFocusWidget");
62
+ });
63
+ </script>
64
+
65
+ <template>
66
+ <div
67
+ ref="rToCaputureNode"
68
+ :style="{
69
+ width: 1280,
70
+ height: 720,
71
+ }"
72
+ >
73
+ <jsv-focus-block
74
+ :style="{
75
+ width: 1920,
76
+ height: 1080,
77
+ backgroundColor: '#007788',
78
+ }"
79
+ :onKeyDown="onKeyDown"
80
+ :onDispatchKeyDown="onDispatchKeyDown"
81
+ >
82
+ <metro-widget
83
+ name="myFocusWidget"
84
+ :top="50"
85
+ :left="50"
86
+ :width="1000"
87
+ :height="550"
88
+ :direction="VERTICAL"
89
+ :provideData="provideData"
90
+ :measures="measures"
91
+ :padding="{ left: 50, right: 50, top: 50, bottom: 50 }"
92
+ :enableItemRenderBreak="true"
93
+ :touchFlag="0"
94
+ :placeHolderSetting="{
95
+ backgroundColor: 'rgba(78,105,127, 0.8)',
96
+ focusBackgroundColor: '#770088aa',
97
+ borderRadius: 10,
98
+ gap: 10,
99
+ logoUrl: logo,
100
+ logoWidth: 120,
101
+ logoHeight: 98,
102
+ }"
103
+ >
104
+ <template #renderItem="{ data, query, onEdge, onAction }">
105
+ <item
106
+ :data="data"
107
+ :query="query"
108
+ :onEdge="onEdge"
109
+ :onAction="onAction"
110
+ />
111
+ </template>
112
+ </metro-widget>
113
+ </jsv-focus-block>
114
+ </div>
115
+ </template>
@@ -0,0 +1,92 @@
1
+ <!--
2
+ * @Author: ChenChanghua
3
+ * @Date: 2023-02-06 10:19:42
4
+ * @Description: file content
5
+ -->
6
+ <script setup>
7
+ import { ref, shallowRef, computed, watchEffect } from "vue";
8
+ import { JsvFlexDiv } from "jsview";
9
+
10
+ const props = defineProps({
11
+ data: Object,
12
+ query: Object,
13
+ onAction: Object,
14
+ });
15
+
16
+ let focused = ref(false);
17
+ let borderSet = ref("10");
18
+ let doFadeIn = ref(true);
19
+
20
+ // const altSrcs = [props.data.url, props.data.focusUrl];
21
+ const altSrcs = [props.data.focusUrl, props.data.url];
22
+
23
+ const onFocus = () => {
24
+ focused.value = true;
25
+ borderSet.value = "10 0 10 0";
26
+ doFadeIn.value = false;
27
+ };
28
+
29
+ const onBlur = () => {
30
+ focused.value = false;
31
+ borderSet.value = "10";
32
+ };
33
+
34
+ const onClicked = () => {
35
+ console.log(`item ${props.query.id} clicked`);
36
+ };
37
+
38
+ props.onAction.register("onFocus", onFocus);
39
+ props.onAction.register("onBlur", onBlur);
40
+ props.onAction.register("onClick", onClicked);
41
+
42
+ const posterStyle = computed(() => {
43
+ // computed写法后,若borderSet不和focused绑定, 则不会重新触发style的设置, 相比template直接写style会减少响应式消耗
44
+ return {
45
+ width: props.data.width,
46
+ height: props.data.height,
47
+ borderRadius: borderSet.value,
48
+ }
49
+ });
50
+
51
+ </script>
52
+
53
+ <template>
54
+ <div
55
+ :style="{
56
+ width: data.width,
57
+ height: data.height,
58
+ transition: 'transform 0.25s linear',
59
+ transform: focused ? 'scale3d(1.1, 1.1, 1)' : '',
60
+ }"
61
+ >
62
+ <div
63
+ v-if="focused"
64
+ :style="{
65
+ left: -10,
66
+ top: -10,
67
+ width: props.data.width + 20,
68
+ height: props.data.height + 20,
69
+ backgroundColor: '#770088',
70
+ borderRadius: 10,
71
+ }"
72
+ >
73
+ </div>
74
+ <props.data.component :data="data" :query="query" :focused="focused"/>
75
+ <jsv-flex-div
76
+ :style="{
77
+ top:8,
78
+ left:8,
79
+ backgroundColor: '#00FF00',
80
+ }"
81
+ >
82
+ <div
83
+ :style="{
84
+ height: 30,
85
+ fontSize: 20,
86
+ }"
87
+ >
88
+ {{ data.name }}
89
+ </div>
90
+ </jsv-flex-div>
91
+ </div>
92
+ </template>