@shijiu/jsview-vue-samples 2.2.426-test.0 → 2.3.151-test.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 (246) hide show
  1. package/BakeViewDemo/AnimatePic.vue +1 -1
  2. package/Basic/components/text/TextDirection.vue +7 -1
  3. package/BasicFocusControl/components/BaseBlock.vue +65 -18
  4. package/BreakRender/assets/imageList.json +235 -235
  5. package/ColorSpace/App.vue +2 -2
  6. package/CoupletsTest/App.vue +1 -1
  7. package/CoupletsTest/widget/Banger/Banger.vue +3 -3
  8. package/CoupletsTest/widget/Banger/MaroonLoader.vue +5 -5
  9. package/CoupletsTest/widget/Couplets/Couplets.vue +4 -4
  10. package/CoupletsTest/widget/Fireworks/Fireworks.vue +13 -13
  11. package/CustomShader/App.vue +4 -4
  12. package/CustomShader/gaussianBlur.glsl +1 -1
  13. package/DashPath/App.vue +80 -0
  14. package/DashPath/AppForOperator.vue +33 -0
  15. package/DemoForOperator/AnimPic/AnimPic.vue +69 -0
  16. package/DemoForOperator/AnimPic/App.vue +28 -0
  17. package/DemoForOperator/Banger/App.vue +26 -0
  18. package/DemoForOperator/Banger/Banger/Banger.vue +316 -0
  19. package/DemoForOperator/Banger/Banger/Maroon.vue +123 -0
  20. package/DemoForOperator/Banger/Banger/MaroonLoader.vue +78 -0
  21. package/DemoForOperator/Banger/Banger/SpriteDeal.js +30 -0
  22. package/DemoForOperator/Blur/Blur.vue +146 -0
  23. package/DemoForOperator/Blur/BlurInOut/BlurInOut.vue +158 -0
  24. package/DemoForOperator/Blur/BlurInOut/StaticBgSlide.vue +162 -0
  25. package/DemoForOperator/Blur/BlurPopup/BlurPopup.vue +113 -0
  26. package/DemoForOperator/BookFlip/App.vue +115 -0
  27. package/DemoForOperator/BookFlip/BookFlip/FlipPage.vue +179 -0
  28. package/DemoForOperator/BookFlip/BookFlip/FlippingBook.vue +310 -0
  29. package/DemoForOperator/BookFlip/BookFlip/flip.glsl +135 -0
  30. package/DemoForOperator/BookFlip/BookPage.vue +82 -0
  31. package/DemoForOperator/Bounce/App.vue +43 -0
  32. package/DemoForOperator/Bounce/Bounce.vue +81 -0
  33. package/DemoForOperator/Bounce/FreeMoveBuilder.js +139 -0
  34. package/DemoForOperator/ChunLian/App.vue +47 -0
  35. package/DemoForOperator/ChunLian/Couplets.vue +291 -0
  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/App.vue +80 -0
  40. package/DemoForOperator/EpisodeList/EpisodeList/Controller.vue +110 -0
  41. package/DemoForOperator/EpisodeList/EpisodeList/EpisodeList.vue +250 -0
  42. package/DemoForOperator/EpisodeList/GroupItem.vue +65 -0
  43. package/DemoForOperator/EpisodeList/ListItem.vue +48 -0
  44. package/DemoForOperator/Firework1/App.vue +25 -0
  45. package/DemoForOperator/Firework1/Fireworks.vue +397 -0
  46. package/DemoForOperator/Firework1/SpriteDeal.js +30 -0
  47. package/DemoForOperator/FlipPage/App.vue +75 -0
  48. package/DemoForOperator/FlipPage/FlipPage/FlipPage.vue +178 -0
  49. package/DemoForOperator/FlipPage/FlipPage/flipIn.glsl +41 -0
  50. package/DemoForOperator/FlipPage/FlipPage/flipOut.glsl +41 -0
  51. package/DemoForOperator/Focus/Alpha/AlphaFocusBox.vue +95 -0
  52. package/DemoForOperator/Focus/Alpha/AlphaPage.vue +40 -0
  53. package/DemoForOperator/Focus/Alpha/Item.vue +64 -0
  54. package/DemoForOperator/Focus/App.vue +124 -0
  55. package/DemoForOperator/Focus/CommonPageSetting.js +30 -0
  56. package/DemoForOperator/Focus/Item.vue +46 -0
  57. package/DemoForOperator/Focus/Light/Item.vue +67 -0
  58. package/DemoForOperator/Focus/Light/LightFocusBox.vue +87 -0
  59. package/DemoForOperator/Focus/Light/LightPage.vue +43 -0
  60. package/DemoForOperator/Focus/Light/utils/FrameCanvasStore.ts +68 -0
  61. package/DemoForOperator/Focus/Light/utils/RotateFrame.vue +146 -0
  62. package/DemoForOperator/Focus/Light/utils/circleHaloMask.png +0 -0
  63. package/DemoForOperator/Focus/Normal/Item.vue +64 -0
  64. package/DemoForOperator/Focus/Normal/NormalFocusBox.vue +65 -0
  65. package/DemoForOperator/Focus/Normal/NormalPage.vue +41 -0
  66. package/DemoForOperator/Focus/SwipeLight/Item.vue +73 -0
  67. package/DemoForOperator/Focus/SwipeLight/SwipeLightBox.vue +62 -0
  68. package/DemoForOperator/Focus/SwipeLight/SwipeLightPage.vue +44 -0
  69. package/DemoForOperator/FrameShadow/App.vue +193 -0
  70. package/DemoForOperator/FrameShadow/FrameShadow.vue +61 -0
  71. package/DemoForOperator/FullscreenIn/App.vue +105 -0
  72. package/DemoForOperator/FullscreenIn/FullscreenPoster.vue +56 -0
  73. package/DemoForOperator/FullscreenIn/Item.vue +50 -0
  74. package/DemoForOperator/Genie/App.vue +78 -0
  75. package/DemoForOperator/Genie/geniePakcer/Genie.vue +741 -0
  76. package/DemoForOperator/Genie/geniePakcer/genieBottom.glsl +49 -0
  77. package/DemoForOperator/Genie/geniePakcer/genieLeft.glsl +50 -0
  78. package/DemoForOperator/Genie/geniePakcer/genieRight.glsl +57 -0
  79. package/DemoForOperator/Genie/geniePakcer/genieTop.glsl +50 -0
  80. package/DemoForOperator/GrayFilter/App.vue +51 -0
  81. package/DemoForOperator/GrayFilter/GrayFilter.vue +59 -0
  82. package/DemoForOperator/Jigsaw/App.vue +45 -0
  83. package/DemoForOperator/Jigsaw/JigsawFull.vue +142 -0
  84. package/DemoForOperator/Jigsaw/JigsawSingle.vue +118 -0
  85. package/DemoForOperator/LongChatBox/App.vue +36 -0
  86. package/DemoForOperator/LongChatBox/Bubble.vue +104 -0
  87. package/DemoForOperator/LongChatBox/LongChat.vue +173 -0
  88. package/DemoForOperator/LongChatBox/TextManager.ts +147 -0
  89. package/DemoForOperator/LongChatBox/VirtualList.vue +298 -0
  90. package/DemoForOperator/LongChatBox/testData.js +51 -0
  91. package/DemoForOperator/LongChatBox/utile.js +331 -0
  92. package/DemoForOperator/Particle/App.vue +69 -0
  93. package/DemoForOperator/Particle/Drop/DropParticle.vue +208 -0
  94. package/DemoForOperator/Particle/Explode/ExplodeParticle.vue +120 -0
  95. package/DemoForOperator/PosterAnim/App.vue +125 -0
  96. package/DemoForOperator/PosterAnim/Bounce/BouncePage.vue +54 -0
  97. package/DemoForOperator/PosterAnim/Bounce/Item.vue +85 -0
  98. package/DemoForOperator/PosterAnim/Breath/BreathPage.vue +47 -0
  99. package/DemoForOperator/PosterAnim/Breath/Item.vue +58 -0
  100. package/DemoForOperator/PosterAnim/CommonPageSetting.js +30 -0
  101. package/DemoForOperator/PosterAnim/Item.vue +46 -0
  102. package/DemoForOperator/PosterAnim/PosterAnim.js +79 -0
  103. package/DemoForOperator/PosterAnim/Scale/Item.vue +72 -0
  104. package/DemoForOperator/PosterAnim/Scale/ScalePage.vue +48 -0
  105. package/DemoForOperator/PosterAnim/Shake/Item.vue +85 -0
  106. package/DemoForOperator/PosterAnim/Shake/ShakePage.vue +53 -0
  107. package/DemoForOperator/PosterOverflow/App.vue +116 -0
  108. package/DemoForOperator/PosterOverflow/Item.vue +67 -0
  109. package/DemoForOperator/PosterOverflow/PosterOverflow.vue +39 -0
  110. package/DemoForOperator/Resize/App.vue +157 -0
  111. package/DemoForOperator/Resize/Resize/Item.vue +234 -0
  112. package/DemoForOperator/Resize/Resize/Resize.vue +96 -0
  113. package/DemoForOperator/Ripple/App.vue +54 -0
  114. package/DemoForOperator/Ripple/Ripple.vue +65 -0
  115. package/DemoForOperator/ScreenShootScale/App.vue +96 -0
  116. package/DemoForOperator/ScreenShootScale/Back.vue +86 -0
  117. package/DemoForOperator/ScreenShootScale/Front.vue +133 -0
  118. package/DemoForOperator/ScreenShootScale/Item.vue +62 -0
  119. package/DemoForOperator/ScreenShootScale/ScreenShootScale.vue +109 -0
  120. package/DemoForOperator/SmoothSwiper/App.vue +50 -0
  121. package/DemoForOperator/Sound/Bounce/App.vue +56 -0
  122. package/DemoForOperator/Sound/Bounce/Bounce.vue +87 -0
  123. package/DemoForOperator/Sound/Bounce/FreeMoveBuilder.js +146 -0
  124. package/DemoForOperator/Sound/Bounce/bgmusic.mp3 +0 -0
  125. package/DemoForOperator/Sound/Bounce/coin.mp3 +0 -0
  126. package/DemoForOperator/Sound/FocusMove/App.vue +134 -0
  127. package/DemoForOperator/Sound/FocusMove/Item.vue +43 -0
  128. package/DemoForOperator/Sound/FocusMove/move.mp3 +0 -0
  129. package/DemoForOperator/Sound/Rain/App.vue +11 -0
  130. package/DemoForOperator/Sound/Rain/Raining/Rain.vue +69 -0
  131. package/DemoForOperator/Sound/Rain/Raining/RainScene.vue +118 -0
  132. package/DemoForOperator/Sound/Sound/Sound.vue +24 -0
  133. package/DemoForOperator/Sound/Sound/index.js +4 -0
  134. package/DemoForOperator/Sound/Sound/useSound.js +112 -0
  135. package/DemoForOperator/Sprite/App.vue +33 -0
  136. package/DemoForOperator/Sprite/Sprite.vue +147 -0
  137. package/DemoForOperator/Stretch/App.vue +103 -0
  138. package/DemoForOperator/Stretch/Stretch/Item.vue +192 -0
  139. package/DemoForOperator/Stretch/Stretch/Stretch.vue +218 -0
  140. package/DemoForOperator/Swiper/App.vue +101 -0
  141. package/DemoForOperator/Swiper/Item.vue +56 -0
  142. package/DemoForOperator/Swiper/ParallaxSlide.vue +164 -0
  143. package/DemoForOperator/TabContent/App.vue +89 -0
  144. package/DemoForOperator/TabContent/ContentPage.vue +66 -0
  145. package/DemoForOperator/TabContent/Item.vue +85 -0
  146. package/DemoForOperator/TabContent/PageItem.vue +40 -0
  147. package/DemoForOperator/TabContent/TabContent/CreepFocus.vue +160 -0
  148. package/DemoForOperator/TabContent/TabContent/Item.vue +63 -0
  149. package/DemoForOperator/TabContent/TabContent/TabContent.vue +184 -0
  150. package/DemoForOperator/TabContent/TabContent/TabItem.vue +368 -0
  151. package/DemoForOperator/TabContent/TabContent/TabWidget.vue +243 -0
  152. package/DemoForOperator/TabContent/TabContent/Util.js +3 -0
  153. package/DemoForOperator/TabContent/TabContent/ViewSwiper.vue +110 -0
  154. package/DemoForOperator/TabContent/testData.js +241 -0
  155. package/DemoForOperator/TabContentVertical/App.vue +104 -0
  156. package/DemoForOperator/TabContentVertical/ContentPage.vue +67 -0
  157. package/DemoForOperator/TabContentVertical/Item.vue +94 -0
  158. package/DemoForOperator/TabContentVertical/PageItem.vue +40 -0
  159. package/DemoForOperator/TabContentVertical/TabContent/CreepFocus.vue +160 -0
  160. package/DemoForOperator/TabContentVertical/TabContent/Item.vue +63 -0
  161. package/DemoForOperator/TabContentVertical/TabContent/TabContent.vue +184 -0
  162. package/DemoForOperator/TabContentVertical/TabContent/TabItem.vue +368 -0
  163. package/DemoForOperator/TabContentVertical/TabContent/TabWidget.vue +259 -0
  164. package/DemoForOperator/TabContentVertical/TabContent/Util.js +3 -0
  165. package/DemoForOperator/TabContentVertical/TabContent/ViewSwiper.vue +110 -0
  166. package/DemoForOperator/TabContentVertical/assets/children_science.png +0 -0
  167. package/DemoForOperator/TabContentVertical/assets/documentary.png +0 -0
  168. package/DemoForOperator/TabContentVertical/assets/free.png +0 -0
  169. package/DemoForOperator/TabContentVertical/assets/game.png +0 -0
  170. package/DemoForOperator/TabContentVertical/assets/home_selected.png +0 -0
  171. package/DemoForOperator/TabContentVertical/assets/movie_ticket.png +0 -0
  172. package/DemoForOperator/TabContentVertical/assets/my_account.png +0 -0
  173. package/DemoForOperator/TabContentVertical/assets/opera.png +0 -0
  174. package/DemoForOperator/TabContentVertical/assets/sports.png +0 -0
  175. package/DemoForOperator/TabContentVertical/assets/tv_drama.png +0 -0
  176. package/DemoForOperator/TabContentVertical/assets/variety_show.png +0 -0
  177. package/DemoForOperator/TabContentVertical/assets/vip.png +0 -0
  178. package/DemoForOperator/TabContentVertical/testData.js +76 -0
  179. package/DemoForOperator/Vortex/App.vue +78 -0
  180. package/DemoForOperator/Vortex/Vortex/Vortex.vue +180 -0
  181. package/DemoForOperator/Vortex/Vortex/vortexIn.glsl +38 -0
  182. package/DemoForOperator/Vortex/Vortex/vortexOut.glsl +38 -0
  183. package/DemoForOperator/index.js +6 -0
  184. package/DemoForOperator/routeList.js +259 -0
  185. package/DemoHomepage/App.vue +50 -30
  186. package/DemoHomepage/components/Dialog.vue +1 -0
  187. package/DemoHomepage/components/Item.vue +11 -0
  188. package/DemoHomepage/components/TabFrame.vue +7 -0
  189. package/DemoHomepage/router.js +178 -81
  190. package/DemoHomepage/views/Homepage.vue +7 -2
  191. package/DivMetroPerformance/data.js +3 -3
  192. package/DriftScopeTest/App.vue +1 -1
  193. package/FilterDemo/AnimatePic.vue +1 -1
  194. package/FilterDemo/VideoLayer.vue +2 -2
  195. package/FullScreenFlex/TestFrame2.vue +1 -1
  196. package/GiftRain/App.vue +12 -12
  197. package/GiftRain/components/SpriteTranslate.vue +68 -48
  198. package/HashHistory/App.vue +2 -2
  199. package/HashHistory/router.js +1 -1
  200. package/JsvPreDownloader/App.vue +4 -4
  201. package/MediaDemo/components/frames/AudioFrame.vue +1 -1
  202. package/MediaDemo/components/frames/VideoFrame.vue +1 -1
  203. package/MetroWidgetDemos/MassiveItems/ContentItem.vue +1 -1
  204. package/MetroWidgetDemos/MassiveItems/data.js +1 -1
  205. package/MetroWidgetDemos/PerformanceTest/data.js +3 -3
  206. package/MetroWidgetDemos/RefreshDemo/assets/imageList.json +235 -235
  207. package/MetroWidgetDemos/SkeletonDiagram/assets/imageList.json +235 -235
  208. package/MetroWidgetDemos/TripleWidget/App.vue +7 -1
  209. package/MetroWidgetDemos/TripleWidget/Item.vue +16 -2
  210. package/MetroWidgetDemos/TripleWidget/SWidgetItem.vue +7 -1
  211. package/MetroWidgetDemos/TripleWidget/WidgetItem.vue +8 -2
  212. package/MetroWidgetDemos/focusableItemMetroWidget/WidgetItem.vue +3 -1
  213. package/MetroWidgetDemos/routeList.js +34 -17
  214. package/Poster3d/App.vue +69 -0
  215. package/Poster3d/Poster3d.vue +92 -0
  216. package/PosterPacker/App.vue +5 -5
  217. package/PosterPacker/tools/vortexPacker/Vortex.vue +1 -1
  218. package/QrcodeDemo/App.vue +1 -1
  219. package/Ripple/App.vue +1 -1
  220. package/ScaleDownNeon/App.vue +4 -4
  221. package/SceneTransition/App.vue +2 -2
  222. package/SceneTransition/maskConfig/config2.js +12 -12
  223. package/SceneTransition/maskConfig/config3.js +14 -14
  224. package/SprayView/App.vue +96 -51
  225. package/SpringFestival/App.vue +73 -0
  226. package/SpringFestival/SpringFestivalScene/ChunLian.vue +211 -0
  227. package/SpringFestival/SpringFestivalScene/FreeMoveBuilder.js +139 -0
  228. package/SpringFestival/SpringFestivalScene/LanternAnim.js +60 -0
  229. package/SpringFestival/SpringFestivalScene/Rain.vue +137 -0
  230. package/SpringFestival/SpringFestivalScene/Scene.vue +218 -0
  231. package/SpringFestival/SpringFestivalScene/imageConfig.js +87 -0
  232. package/SpringFestival/SpringFestivalScene/index.js +1 -0
  233. package/Swiper/App.vue +28 -29
  234. package/Swiper/Item.vue +19 -0
  235. package/SwiperTest/App.vue +9 -9
  236. package/TestNativeSharedView/AckEventDefine.ts +82 -0
  237. package/TestNativeSharedView/App.vue +4 -6
  238. package/TestNativeSharedView/JsvDemoTester.js +131 -0
  239. package/TextureAnimation/App.vue +16 -6
  240. package/TextureAnimation/App3.vue +100 -0
  241. package/TextureAnimation/utils/FrameCanvasStore.ts +68 -0
  242. package/TextureAnimation/utils/RotateFrame.vue +146 -0
  243. package/TextureAnimation/utils/circleHaloMask.png +0 -0
  244. package/TombSweepingDayTest/Raining/RainScene.vue +4 -4
  245. package/ViewOpacity/App.vue +21 -2
  246. package/package.json +1 -1
@@ -0,0 +1,48 @@
1
+ <!--
2
+ * @Author: ChenChanghua
3
+ * @Date: 2023-03-08 14:52:17
4
+ * @Description: file content
5
+ -->
6
+ <script setup>
7
+ import { ref } from "vue";
8
+
9
+ const props = defineProps({
10
+ data: Object,
11
+ onAction: Object,
12
+ query: Object,
13
+ });
14
+
15
+ const focused = ref(false);
16
+
17
+ // 注册回调
18
+ const onFocus = () => {
19
+ focused.value = true;
20
+ };
21
+ const onBlur = () => {
22
+ focused.value = false;
23
+ };
24
+ const onClick = () => {
25
+ console.log("item onclick ", props.data);
26
+ };
27
+ props.onAction.register("onFocus", onFocus);
28
+ props.onAction.register("onBlur", onBlur);
29
+ props.onAction.register("onClick", onClick);
30
+ </script>
31
+
32
+ <template>
33
+ <div
34
+ :style="{
35
+ width: data.width,
36
+ height: data.height,
37
+ backgroundColor: data.backgroundColor,
38
+ lineHeight: data.height,
39
+ textAlign: 'center',
40
+ fontSize: 30,
41
+ color: focused ? '#FF0000' : '#FFFFFF',
42
+ transition: 'transform 0.2s',
43
+ transform: focused ? 'scale3d(1.05, 1.05, 1)' : null,
44
+ }"
45
+ >
46
+ {{ data.content }}
47
+ </div>
48
+ </template>
@@ -0,0 +1,25 @@
1
+ <template>
2
+ <div :style="{ width: 1280, height: 720, backgroundColor: '#00000055' }"></div>
3
+ <Fireworks :top="500" :left="600" :srcConfig="config" />
4
+ </template>
5
+
6
+ <script setup>
7
+ import Fireworks from "./Fireworks.vue";
8
+
9
+ const config = {
10
+ group1_1: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group1_1.png",
11
+ group1_2: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group1_2.png",
12
+ group2_1: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group2_1.png",
13
+ group2_2: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group2_2.png",
14
+ group3_1: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group3_1.png",
15
+ group3_2: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group3_2.png",
16
+ group4_1: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group4_1.png",
17
+ group4_2: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group4_2.png",
18
+ group5_1: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group5_1.png",
19
+ group5_2: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/group5_2.png",
20
+ //弹药图片素材(请按需修改)
21
+ ammo: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/star2.png",
22
+ //精灵图素材
23
+ fireworkSpriteSrc: "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/firework1/fireworks.png",
24
+ };
25
+ </script>
@@ -0,0 +1,397 @@
1
+
2
+ <template>
3
+ <JsvPreload
4
+ :preloadList="preload_info"
5
+ :onPreloadDone="loadDone"
6
+ ></JsvPreload>
7
+
8
+ <JsvSpriteLoader
9
+ :imageUrl="fireworksPng"
10
+ :configUrl="fireworksJson"
11
+ :onConfigReady="preloadCallback"
12
+ :noNeedResource="false"
13
+ >
14
+ <div
15
+ v-show="myShow"
16
+ :style="{
17
+ top: props.top,
18
+ left: props.left,
19
+ transform: `scale3d(${80 / view_size.w},${160 / view_size.h},1)`,
20
+ }"
21
+ >
22
+ <div
23
+ :style="{
24
+ top: -170,
25
+ left: -45,
26
+ }"
27
+ >
28
+ <JsvSpriteAnim
29
+ :spriteInfo="sprite_info.info"
30
+ :loop="1"
31
+ :duration="1"
32
+ :imageUrl="fireworksPng"
33
+ ref="myRef"
34
+ >
35
+ </JsvSpriteAnim>
36
+ </div>
37
+ </div>
38
+ </JsvSpriteLoader>
39
+ <!-- FreeMove -->
40
+ <jsv-free-move-actor
41
+ v-if="isShow"
42
+ :top="props.top + 40"
43
+ :left="props.left + 15"
44
+ ref="actorRef"
45
+ :width="8"
46
+ :height="8"
47
+ >
48
+ <div
49
+ :style="{
50
+ width: 8,
51
+ height: 8,
52
+ backgroundImage: ammo,
53
+ }"
54
+ ></div>
55
+ </jsv-free-move-actor>
56
+ <!-- 粒子效果 -->
57
+ <div
58
+ v-if="isSpray"
59
+ :style="{
60
+ top: props.top - moveDistance + 20,
61
+ left: props.left,
62
+ width: 50,
63
+ height: 50,
64
+ }"
65
+ >
66
+ <jsv-spray
67
+ v-for="item in ImgData1"
68
+ :pointRes="`url(${item})`"
69
+ :sprayStyle="sprayOk"
70
+ :ignoreClip="true"
71
+ />
72
+ </div>
73
+ <div
74
+ v-if="isSpray1"
75
+ :style="{
76
+ top: props.top - moveDistance + 80,
77
+ left: props.left - 100,
78
+ width: 50,
79
+ height: 50,
80
+ }"
81
+ >
82
+ <jsv-spray
83
+ v-for="item in ImgData2"
84
+ :pointRes="`url(${item})`"
85
+ :sprayStyle="sprayOk1"
86
+ :ignoreClip="true"
87
+ />
88
+ </div>
89
+ <div
90
+ v-if="isSpray2"
91
+ :style="{
92
+ top: props.top - moveDistance + 80,
93
+ left: props.left + 100,
94
+ width: 50,
95
+ height: 50,
96
+ }"
97
+ >
98
+ <jsv-spray
99
+ v-for="item in ImgData3"
100
+ :pointRes="`url(${item})`"
101
+ :sprayStyle="sprayOk1"
102
+ :ignoreClip="true"
103
+ />
104
+ </div>
105
+ <div
106
+ v-if="isSpray3"
107
+ :style="{
108
+ top: props.top - moveDistance - 80,
109
+ left: props.left - 100,
110
+ width: 50,
111
+ height: 50,
112
+ }"
113
+ >
114
+ <jsv-spray
115
+ v-for="item in ImgData4"
116
+ :pointRes="`url(${item})`"
117
+ :sprayStyle="sprayOk1"
118
+ :ignoreClip="true"
119
+ />
120
+ </div>
121
+ <div
122
+ v-if="isSpray4"
123
+ :style="{
124
+ top: props.top - moveDistance - 80,
125
+ left: props.left + 100,
126
+ width: 50,
127
+ height: 50,
128
+ }"
129
+ >
130
+ <jsv-spray
131
+ v-for="item in ImgData5"
132
+ :pointRes="`url(${item})`"
133
+ :sprayStyle="sprayOk1"
134
+ :ignoreClip="true"
135
+ />
136
+ </div>
137
+ </template>
138
+
139
+ <script setup>
140
+ import {
141
+ JsvFreeMoveActor,
142
+ JsvSpriteAnim,
143
+ JsvSpray,
144
+ JsvPreload,
145
+ buildPreloadInfo,
146
+ JsvSpriteLoader,
147
+ } from "jsview";
148
+ import { _formatInfo } from "./SpriteDeal";
149
+ import { shallowRef, onMounted, onBeforeUnmount, watch } from "vue";
150
+
151
+ /**
152
+ * 组件属性定义
153
+ */
154
+ const props = defineProps({
155
+ /**
156
+ * 烟花中心顶部位置
157
+ * @type {Number}
158
+ * @required
159
+ * @default undefined
160
+ * @unit px
161
+ */
162
+ top: {
163
+ type: Number,
164
+ require: true
165
+ },
166
+
167
+ /**
168
+ * 烟花中心左侧位置
169
+ * @type {Number}
170
+ * @required
171
+ * @default undefined
172
+ * @unit px
173
+ */
174
+ left: {
175
+ type: Number,
176
+ require: true
177
+ },
178
+
179
+ /**
180
+ * 资源路径配置对象
181
+ * @type {Object}
182
+ * @required
183
+ * @property {String} group1_1 粒子效果组1-1图片路径
184
+ * @property {String} group1_2 粒子效果组1-2图片路径
185
+ * @property {String} group2_1 粒子效果组2-1图片路径
186
+ * @property {String} group2_2 粒子效果组2-2图片路径
187
+ * @property {String} group3_1 粒子效果组3-1图片路径
188
+ * @property {String} group3_2 粒子效果组3-2图片路径
189
+ * @property {String} group4_1 粒子效果组4-1图片路径
190
+ * @property {String} group4_2 粒子效果组4-2图片路径
191
+ * @property {String} group5_1 粒子效果组5-1图片路径
192
+ * @property {String} group5_2 粒子效果组5-2图片路径
193
+ * @property {String} ammo 弹药轨迹图片路径
194
+ * @property {String} fireworkSpriteSrc 烟花精灵图路径
195
+ */
196
+ srcConfig: {
197
+ type: Object,
198
+ require: true
199
+ }
200
+ });
201
+
202
+ //火花图片素材
203
+ const group1_1 = props.srcConfig.group1_1;
204
+ const group1_2 = props.srcConfig.group1_2;
205
+ const group2_1 = props.srcConfig.group2_1;
206
+ const group2_2 = props.srcConfig.group2_2;
207
+ const group3_1 = props.srcConfig.group3_1;
208
+ const group3_2 = props.srcConfig.group3_2;
209
+ const group4_1 = props.srcConfig.group4_1;
210
+ const group4_2 = props.srcConfig.group4_2;
211
+ const group5_1 = props.srcConfig.group5_1;
212
+ const group5_2 = props.srcConfig.group5_2;
213
+ //弹药图片素材(请按需修改)
214
+ const ammo = props.srcConfig.ammo;
215
+ //精灵图素材
216
+ const fireworksPng = props.srcConfig.fireworkSpriteSrc;
217
+ const fireworksJson = props.srcConfig.fireworkSpriteSrc + ".json";
218
+
219
+ //运动距离
220
+ let moveDistance = 260;
221
+ let sprite_info = shallowRef(null);
222
+ let view_size = shallowRef(null);
223
+ let isSpray = shallowRef(false);
224
+ let isSpray1 = shallowRef(false);
225
+ let isSpray2 = shallowRef(false);
226
+ let isSpray3 = shallowRef(false);
227
+ let isSpray4 = shallowRef(false);
228
+ //集中管理
229
+ const sprayArray = [isSpray1, isSpray2, isSpray3, isSpray4];
230
+ let isShow = shallowRef(true);
231
+ let actorRef = shallowRef(null);
232
+ let myShow = shallowRef(false);
233
+ let actorControl;
234
+ //随机顺序绽放函数
235
+ const spray = () => {
236
+ timer.id2 = setTimeout(() => {
237
+ let randomIndex = Math.floor(Math.random() * sprayArray.length);
238
+ sprayArray[randomIndex].value = true;
239
+ timer.id = setInterval(() => {
240
+ let remainingItems = sprayArray.filter((item) => !item.value);
241
+ if (remainingItems.length === 0) {
242
+ clearInterval(timer.id);
243
+ timer.id = -1;
244
+ } else {
245
+ randomIndex = Math.floor(Math.random() * remainingItems.length);
246
+ remainingItems[randomIndex].value = true;
247
+ }
248
+ }, 100);
249
+ }, 500);
250
+ };
251
+
252
+ //预加载
253
+ const preload_info = [
254
+ buildPreloadInfo(group1_1),
255
+ buildPreloadInfo(group1_2),
256
+ buildPreloadInfo(group2_1),
257
+ buildPreloadInfo(group2_2),
258
+ buildPreloadInfo(group3_1),
259
+ buildPreloadInfo(group3_2),
260
+ buildPreloadInfo(group4_1),
261
+ buildPreloadInfo(group4_2),
262
+ buildPreloadInfo(group5_1),
263
+ buildPreloadInfo(group5_2),
264
+ buildPreloadInfo(fireworksPng),
265
+ buildPreloadInfo(ammo),
266
+ ];
267
+ let readyNum = shallowRef(0);
268
+ const loadDone = (a) => {
269
+ readyNum.value++;
270
+ };
271
+ const preloadCallback = (config_json, resolve_set) => {
272
+ sprite_info.value = _formatInfo(config_json);
273
+ view_size.value = {
274
+ w: sprite_info.value.maxW,
275
+ h: sprite_info.value.maxH,
276
+ };
277
+ resolve_set(); // 通知loader数组设置完成
278
+ readyNum.value++;
279
+ };
280
+ //定时器
281
+ let timer = { id: -1, id2: -1 };
282
+ //ref
283
+ let myRef = shallowRef(null);
284
+
285
+ // 建议:做粒子效果的图的像素尽量不超过 40 * 40
286
+ const sprayOk = {
287
+ type: 0,
288
+ particleNum: 60,
289
+ deltaAngle: 180,
290
+ deltaWidth: 20,
291
+ deltaHeight: 40,
292
+ pointSizeMin: 30,
293
+ pointSizeMax: 50,
294
+ speedMin: 1,
295
+ speedMax: 7,
296
+ lifeMin: 500,
297
+ lifeMax: 800,
298
+ accelerateX: 0,
299
+ accelerateY: 0,
300
+ enableFade: false,
301
+ enableShrink: true,
302
+ };
303
+ const sprayOk1 = {
304
+ type: 0,
305
+ particleNum: 30,
306
+ deltaAngle: 180,
307
+ deltaWidth: 20,
308
+ deltaHeight: 40,
309
+ pointSizeMin: 30,
310
+ pointSizeMax: 50,
311
+ speedMin: 1,
312
+ speedMax: 7,
313
+ lifeMin: 1000,
314
+ lifeMax: 2000,
315
+ accelerateX: 0,
316
+ accelerateY: -40,
317
+ enableFade: false,
318
+ enableShrink: false,
319
+ };
320
+ //颜色搭配
321
+ const group1 = [group1_1, group1_2];
322
+ const group2 = [group2_1, group2_2];
323
+ const group3 = [group3_1, group3_2];
324
+ const group4 = [group4_1, group4_2];
325
+ const group5 = [group5_1, group5_2];
326
+ let ImgData1;
327
+ let ImgData2;
328
+ let ImgData3;
329
+ let ImgData4;
330
+ let ImgData5;
331
+ const allGroup = [group1, group2, group3, group4, group5];
332
+ //随机烟花颜色设定
333
+ const remainingGroups = [...allGroup];
334
+ for (let i = 1; i <= 5; i++) {
335
+ const randomIndex = Math.floor(Math.random() * remainingGroups.length);
336
+ const selectedGroup = remainingGroups[randomIndex];
337
+ switch (i) {
338
+ case 1:
339
+ ImgData1 = selectedGroup;
340
+ break;
341
+ case 2:
342
+ ImgData2 = selectedGroup;
343
+ break;
344
+ case 3:
345
+ ImgData3 = selectedGroup;
346
+ break;
347
+ case 4:
348
+ ImgData4 = selectedGroup;
349
+ break;
350
+ case 5:
351
+ ImgData5 = selectedGroup;
352
+ break;
353
+ }
354
+
355
+ remainingGroups.splice(randomIndex, 1);
356
+ }
357
+
358
+ watch(readyNum, (n, o) => {
359
+ if (o != 2 && n == 2) {
360
+ myShow.value = true;
361
+ timer.id2 = setTimeout(() => {
362
+ myRef.value.start();
363
+
364
+ actorControl.run((cmds) => [
365
+ cmds
366
+ .condition()
367
+ .onNextTick(2)
368
+ .then([
369
+ cmds.action().setSpeed(undefined, -9),
370
+ cmds.action(3).setAccel(undefined, 0.13),
371
+ ]),
372
+ cmds
373
+ .condition()
374
+ .reachPosition(undefined, -moveDistance)
375
+ .then([
376
+ cmds.action().stopMoving(),
377
+ () => {
378
+ isSpray.value = true;
379
+ isShow.value = false;
380
+ spray();
381
+ },
382
+ ]),
383
+ ]);
384
+ }, 0);
385
+ }
386
+ });
387
+
388
+ onMounted(() => {
389
+ actorControl = actorRef.value.control;
390
+ });
391
+ onBeforeUnmount(() => {
392
+ clearTimeout(timer.id2);
393
+ timer.id2 = -1;
394
+ });
395
+ </script>
396
+
397
+ <style scoped></style>
@@ -0,0 +1,30 @@
1
+ //精灵图信息函数
2
+ const _formatInfo = (action_json) => {
3
+ const info = {
4
+ frames: [],
5
+ meta: {
6
+ size: action_json.meta.size,
7
+ },
8
+ };
9
+ let frames_ref = info.frames;
10
+ let max_width = 0;
11
+ let max_height = 0;
12
+
13
+ for (let i = 0; i < action_json.frames.length; i++) {
14
+ const target = action_json.frames[i].spriteSourceSize;
15
+ frames_ref.push({
16
+ target,
17
+ source: action_json.frames[i].frame,
18
+ });
19
+ const sprite_with = target.x + target.w;
20
+ const sprite_height = target.y + target.h;
21
+ if (sprite_with > max_width) {
22
+ max_width = sprite_with;
23
+ }
24
+ if (sprite_height > max_height) {
25
+ max_height = sprite_height;
26
+ }
27
+ }
28
+ return { info, maxW: max_width, maxH: max_height };
29
+ };
30
+ export { _formatInfo }
@@ -0,0 +1,75 @@
1
+ <template>
2
+ <div :style="{ width: 1280, height: 720, backgroundColor: '#f5f57d' }"></div>
3
+ <jsv-focus-block
4
+ autoFocus
5
+ :onAction="{
6
+ onKeyDown,
7
+ }"
8
+ >
9
+ <FlipPage
10
+ ref="flipRef"
11
+ :layout="{
12
+ width: width,
13
+ height: height,
14
+ }"
15
+ :time="1"
16
+ :onAnimEnd="onAnimEnd"
17
+ :initShow="true"
18
+ >
19
+ <img
20
+ :src="`url(${imageUrl})`"
21
+ :style="{
22
+ width: width,
23
+ height: height,
24
+ }"
25
+ @load="onImgLoaded"
26
+ />
27
+ <div
28
+ :style="{
29
+ width: 1280,
30
+ height: 100,
31
+ backgroundColor: '#ffffff44',
32
+ }"
33
+ ></div>
34
+ <div
35
+ :style="{
36
+ width: width,
37
+ height: height,
38
+ fontSize: 50,
39
+ color: '#fff',
40
+ textAlign: 'center',
41
+ }"
42
+ >
43
+ 按OK键出场/入场
44
+ </div>
45
+ </FlipPage>
46
+ </jsv-focus-block>
47
+ </template>
48
+ <script setup>
49
+ import FlipPage from "./FlipPage/FlipPage.vue";
50
+ import { shallowRef } from "vue";
51
+
52
+ const flipRef = shallowRef();
53
+ const width = 1280;
54
+ const height = 720;
55
+ const imageUrl =
56
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/DemoForOperator/Genie/App/element_228542_icon_20230610184253.jpg";
57
+
58
+ let imgLoaded = false;
59
+ function onImgLoaded() {
60
+ imgLoaded = true;
61
+ }
62
+ const onAnimEnd = () => {
63
+ console.log("anim end");
64
+ };
65
+
66
+ function onKeyDown(ev) {
67
+ if (ev.keyCode == 13) {
68
+ if (imgLoaded) {
69
+ flipRef.value.switch();
70
+ }
71
+ return true;
72
+ }
73
+ return false;
74
+ }
75
+ </script>