@shijiu/jsview-vue-samples 2.2.426-test.0 → 2.3.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 (170) 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 +79 -0
  14. package/DashPath/AppForOperator.vue +35 -0
  15. package/DashPath/DashPath.vue +118 -0
  16. package/DemoForOperator/AnimPic/AnimPic.vue +47 -0
  17. package/DemoForOperator/AnimPic/App.vue +28 -0
  18. package/DemoForOperator/Banger/App.vue +26 -0
  19. package/DemoForOperator/Banger/Banger/Banger.vue +252 -0
  20. package/DemoForOperator/Banger/Banger/Maroon.vue +123 -0
  21. package/DemoForOperator/Banger/Banger/MaroonLoader.vue +78 -0
  22. package/DemoForOperator/Banger/Banger/SpriteDeal.js +30 -0
  23. package/DemoForOperator/Bounce/App.vue +43 -0
  24. package/DemoForOperator/Bounce/Bounce.vue +49 -0
  25. package/DemoForOperator/Bounce/FreeMoveBuilder.js +139 -0
  26. package/DemoForOperator/ChunLian/App.vue +47 -0
  27. package/DemoForOperator/ChunLian/Couplets.vue +248 -0
  28. package/DemoForOperator/EpisodeList/App.vue +80 -0
  29. package/DemoForOperator/EpisodeList/EpisodeList/Controller.vue +113 -0
  30. package/DemoForOperator/EpisodeList/EpisodeList/EpisodeList.vue +176 -0
  31. package/DemoForOperator/EpisodeList/GroupItem.vue +65 -0
  32. package/DemoForOperator/EpisodeList/ListItem.vue +48 -0
  33. package/DemoForOperator/Firework1/App.vue +25 -0
  34. package/DemoForOperator/Firework1/Fireworks.vue +358 -0
  35. package/DemoForOperator/Firework1/SpriteDeal.js +30 -0
  36. package/DemoForOperator/FlipPage/App.vue +75 -0
  37. package/DemoForOperator/FlipPage/FlipPage/FlipPage.vue +150 -0
  38. package/DemoForOperator/FlipPage/FlipPage/flipIn.glsl +41 -0
  39. package/DemoForOperator/FlipPage/FlipPage/flipOut.glsl +41 -0
  40. package/DemoForOperator/Focus/Alpha/AlphaFocusBox.vue +70 -0
  41. package/DemoForOperator/Focus/Alpha/AlphaPage.vue +40 -0
  42. package/DemoForOperator/Focus/Alpha/Item.vue +64 -0
  43. package/DemoForOperator/Focus/App.vue +124 -0
  44. package/DemoForOperator/Focus/CommonPageSetting.js +30 -0
  45. package/DemoForOperator/Focus/Item.vue +46 -0
  46. package/DemoForOperator/Focus/Light/Item.vue +67 -0
  47. package/DemoForOperator/Focus/Light/LightFocusBox.vue +46 -0
  48. package/DemoForOperator/Focus/Light/LightPage.vue +43 -0
  49. package/DemoForOperator/Focus/Light/utils/FrameCanvasStore.ts +68 -0
  50. package/DemoForOperator/Focus/Light/utils/RotateFrame.vue +146 -0
  51. package/DemoForOperator/Focus/Light/utils/circleHaloMask.png +0 -0
  52. package/DemoForOperator/Focus/Normal/Item.vue +64 -0
  53. package/DemoForOperator/Focus/Normal/NormalFocusBox.vue +53 -0
  54. package/DemoForOperator/Focus/Normal/NormalPage.vue +41 -0
  55. package/DemoForOperator/Focus/SwipeLight/Item.vue +73 -0
  56. package/DemoForOperator/Focus/SwipeLight/SwipeLightBox.vue +62 -0
  57. package/DemoForOperator/Focus/SwipeLight/SwipeLightPage.vue +44 -0
  58. package/DemoForOperator/FullscreenIn/App.vue +105 -0
  59. package/DemoForOperator/FullscreenIn/FullscreenPoster.vue +41 -0
  60. package/DemoForOperator/FullscreenIn/Item.vue +50 -0
  61. package/DemoForOperator/Genie/App.vue +78 -0
  62. package/DemoForOperator/Genie/geniePakcer/Genie.vue +699 -0
  63. package/DemoForOperator/Genie/geniePakcer/genieBottom.glsl +49 -0
  64. package/DemoForOperator/Genie/geniePakcer/genieLeft.glsl +50 -0
  65. package/DemoForOperator/Genie/geniePakcer/genieRight.glsl +57 -0
  66. package/DemoForOperator/Genie/geniePakcer/genieTop.glsl +50 -0
  67. package/DemoForOperator/GrayFilter/App.vue +51 -0
  68. package/DemoForOperator/GrayFilter/GrayFilter.vue +38 -0
  69. package/DemoForOperator/Jigsaw/App.vue +45 -0
  70. package/DemoForOperator/Jigsaw/JigsawFull.vue +100 -0
  71. package/DemoForOperator/Jigsaw/JigsawSingle.vue +86 -0
  72. package/DemoForOperator/Particle/App.vue +69 -0
  73. package/DemoForOperator/Particle/Drop/DropParticle.vue +176 -0
  74. package/DemoForOperator/Particle/Explode/ExplodeParticle.vue +99 -0
  75. package/DemoForOperator/PosterAnim/App.vue +125 -0
  76. package/DemoForOperator/PosterAnim/Bounce/BouncePage.vue +54 -0
  77. package/DemoForOperator/PosterAnim/Bounce/Item.vue +85 -0
  78. package/DemoForOperator/PosterAnim/Breath/BreathPage.vue +47 -0
  79. package/DemoForOperator/PosterAnim/Breath/Item.vue +58 -0
  80. package/DemoForOperator/PosterAnim/CommonPageSetting.js +30 -0
  81. package/DemoForOperator/PosterAnim/Item.vue +46 -0
  82. package/DemoForOperator/PosterAnim/PosterAnim.js +58 -0
  83. package/DemoForOperator/PosterAnim/Scale/Item.vue +72 -0
  84. package/DemoForOperator/PosterAnim/Scale/ScalePage.vue +48 -0
  85. package/DemoForOperator/PosterAnim/Shake/Item.vue +85 -0
  86. package/DemoForOperator/PosterAnim/Shake/ShakePage.vue +53 -0
  87. package/DemoForOperator/PosterOverflow/App.vue +116 -0
  88. package/DemoForOperator/PosterOverflow/Item.vue +67 -0
  89. package/DemoForOperator/PosterOverflow/PosterOverflow.vue +23 -0
  90. package/DemoForOperator/Ripple/App.vue +54 -0
  91. package/DemoForOperator/Ripple/Ripple.vue +50 -0
  92. package/DemoForOperator/ScalePoster/App.vue +4 -0
  93. package/DemoForOperator/ScalePoster/ScalePoster.vue +0 -0
  94. package/DemoForOperator/Sprite/App.vue +33 -0
  95. package/DemoForOperator/Sprite/Sprite.vue +90 -0
  96. package/DemoForOperator/Stretch/App.vue +103 -0
  97. package/DemoForOperator/Stretch/Stretch/Item.vue +192 -0
  98. package/DemoForOperator/Stretch/Stretch/Stretch.vue +168 -0
  99. package/DemoForOperator/TabContent/App.vue +89 -0
  100. package/DemoForOperator/TabContent/ContentPage.vue +66 -0
  101. package/DemoForOperator/TabContent/Item.vue +85 -0
  102. package/DemoForOperator/TabContent/PageItem.vue +40 -0
  103. package/DemoForOperator/TabContent/TabContent/CreepFocus.vue +160 -0
  104. package/DemoForOperator/TabContent/TabContent/Item.vue +63 -0
  105. package/DemoForOperator/TabContent/TabContent/TabContent.vue +146 -0
  106. package/DemoForOperator/TabContent/TabContent/TabItem.vue +368 -0
  107. package/DemoForOperator/TabContent/TabContent/TabWidget.vue +243 -0
  108. package/DemoForOperator/TabContent/TabContent/Util.js +3 -0
  109. package/DemoForOperator/TabContent/TabContent/ViewSwiper.vue +110 -0
  110. package/DemoForOperator/TabContent/testData.js +241 -0
  111. package/DemoForOperator/Vortex/App.vue +78 -0
  112. package/DemoForOperator/Vortex/Vortex/Vortex.vue +154 -0
  113. package/DemoForOperator/Vortex/Vortex/vortexIn.glsl +38 -0
  114. package/DemoForOperator/Vortex/Vortex/vortexOut.glsl +38 -0
  115. package/DemoForOperator/index.js +6 -0
  116. package/DemoForOperator/routeList.js +142 -0
  117. package/DemoHomepage/App.vue +50 -30
  118. package/DemoHomepage/components/Dialog.vue +1 -0
  119. package/DemoHomepage/components/TabFrame.vue +7 -0
  120. package/DemoHomepage/router.js +104 -81
  121. package/DemoHomepage/views/Homepage.vue +7 -2
  122. package/DivMetroPerformance/data.js +3 -3
  123. package/DriftScopeTest/App.vue +1 -1
  124. package/FilterDemo/AnimatePic.vue +1 -1
  125. package/FilterDemo/VideoLayer.vue +2 -2
  126. package/FullScreenFlex/TestFrame2.vue +1 -1
  127. package/GiftRain/App.vue +12 -12
  128. package/JsvPreDownloader/App.vue +4 -4
  129. package/MediaDemo/components/frames/AudioFrame.vue +1 -1
  130. package/MediaDemo/components/frames/VideoFrame.vue +1 -1
  131. package/MetroWidgetDemos/MassiveItems/ContentItem.vue +1 -1
  132. package/MetroWidgetDemos/MassiveItems/data.js +1 -1
  133. package/MetroWidgetDemos/PerformanceTest/data.js +3 -3
  134. package/MetroWidgetDemos/RefreshDemo/assets/imageList.json +235 -235
  135. package/MetroWidgetDemos/SkeletonDiagram/assets/imageList.json +235 -235
  136. package/MetroWidgetDemos/focusableItemMetroWidget/WidgetItem.vue +3 -1
  137. package/MetroWidgetDemos/routeList.js +17 -17
  138. package/Poster3d/App.vue +69 -0
  139. package/Poster3d/Poster3d.vue +92 -0
  140. package/PosterPacker/App.vue +3 -3
  141. package/PosterPacker/tools/vortexPacker/Vortex.vue +1 -1
  142. package/QrcodeDemo/App.vue +1 -1
  143. package/Ripple/App.vue +1 -1
  144. package/ScaleDownNeon/App.vue +4 -4
  145. package/SceneTransition/App.vue +2 -2
  146. package/SceneTransition/maskConfig/config2.js +12 -12
  147. package/SceneTransition/maskConfig/config3.js +14 -14
  148. package/SprayView/App.vue +96 -51
  149. package/SpringFestival/App.vue +73 -0
  150. package/SpringFestival/SpringFestivalScene/ChunLian.vue +211 -0
  151. package/SpringFestival/SpringFestivalScene/FreeMoveBuilder.js +139 -0
  152. package/SpringFestival/SpringFestivalScene/LanternAnim.js +60 -0
  153. package/SpringFestival/SpringFestivalScene/Rain.vue +137 -0
  154. package/SpringFestival/SpringFestivalScene/Scene.vue +218 -0
  155. package/SpringFestival/SpringFestivalScene/imageConfig.js +87 -0
  156. package/SpringFestival/SpringFestivalScene/index.js +1 -0
  157. package/Swiper/App.vue +28 -29
  158. package/Swiper/Item.vue +19 -0
  159. package/SwiperTest/App.vue +9 -9
  160. package/TestNativeSharedView/AckEventDefine.ts +82 -0
  161. package/TestNativeSharedView/App.vue +4 -6
  162. package/TestNativeSharedView/JsvDemoTester.js +131 -0
  163. package/TextureAnimation/App.vue +16 -6
  164. package/TextureAnimation/App3.vue +100 -0
  165. package/TextureAnimation/utils/FrameCanvasStore.ts +68 -0
  166. package/TextureAnimation/utils/RotateFrame.vue +146 -0
  167. package/TextureAnimation/utils/circleHaloMask.png +0 -0
  168. package/TombSweepingDayTest/Raining/RainScene.vue +4 -4
  169. package/ViewOpacity/App.vue +2 -2
  170. package/package.json +1 -1
@@ -0,0 +1,65 @@
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
+ /* 固定格式 {width: Number, hieght: Number, from: Number, to: Number} */
11
+ data: Object,
12
+ onAction: Object,
13
+ query: Object,
14
+ });
15
+
16
+ const focused = ref(false);
17
+ const gazed = ref(false);
18
+
19
+ // 注册回调
20
+ const onFocus = () => {
21
+ focused.value = true;
22
+ };
23
+ const onBlur = () => {
24
+ focused.value = false;
25
+ };
26
+ const onGaze = () => {
27
+ gazed.value = true;
28
+ };
29
+ const onIgnore = () => {
30
+ gazed.value = false;
31
+ };
32
+ const onClick = () => {
33
+ console.log("item onclick ", props.data);
34
+ };
35
+ props.onAction.register("onFocus", onFocus);
36
+ props.onAction.register("onBlur", onBlur);
37
+ props.onAction.register("onClick", onClick);
38
+ props.onAction.register("onGaze", onGaze);
39
+ props.onAction.register("onIgnore", onIgnore);
40
+ </script>
41
+
42
+ <template>
43
+ <div
44
+ :style="{
45
+ width: data.width,
46
+ height: data.height,
47
+ lineHeight: data.height,
48
+ textAlign: 'center',
49
+ backgroundColor: '#6789fd',
50
+ fontSize: 30,
51
+ color: gazed ? '#ffffff' : '#aaaaaa',
52
+ }"
53
+ >
54
+ {{ data.from + "-" + data.to }}
55
+ </div>
56
+ <div
57
+ v-if="focused"
58
+ :style="{
59
+ top: data.height - 3,
60
+ width: data.width,
61
+ height: 3,
62
+ backgroundColor: '#0000ff',
63
+ }"
64
+ ></div>
65
+ </template>
@@ -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://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/DemoForOperator/AnimPic/App/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,358 @@
1
+ <!--
2
+ * 【模块 export 内容】
3
+ * Fireworks:放烟花组件
4
+ * props说明:
5
+ * left {Number} 烟花Left位置
6
+ * top {Number} 烟花Top位置
7
+ *
8
+ -->
9
+ <template>
10
+ <JsvPreload
11
+ :preloadList="preload_info"
12
+ :onPreloadDone="loadDone"
13
+ ></JsvPreload>
14
+
15
+ <JsvSpriteLoader
16
+ :imageUrl="fireworksPng"
17
+ :configUrl="fireworksJson"
18
+ :onConfigReady="preloadCallback"
19
+ :noNeedResource="false"
20
+ >
21
+ <div
22
+ v-show="myShow"
23
+ :style="{
24
+ top: props.top,
25
+ left: props.left,
26
+ transform: `scale3d(${80 / view_size.w},${160 / view_size.h},1)`,
27
+ }"
28
+ >
29
+ <div
30
+ :style="{
31
+ top: -170,
32
+ left: -45,
33
+ }"
34
+ >
35
+ <JsvSpriteAnim
36
+ :spriteInfo="sprite_info.info"
37
+ :loop="1"
38
+ :duration="1"
39
+ :imageUrl="fireworksPng"
40
+ ref="myRef"
41
+ >
42
+ </JsvSpriteAnim>
43
+ </div>
44
+ </div>
45
+ </JsvSpriteLoader>
46
+ <!-- FreeMove -->
47
+ <jsv-free-move-actor
48
+ v-if="isShow"
49
+ :top="props.top + 40"
50
+ :left="props.left + 15"
51
+ ref="actorRef"
52
+ :width="8"
53
+ :height="8"
54
+ >
55
+ <div
56
+ :style="{
57
+ width: 8,
58
+ height: 8,
59
+ backgroundImage: ammo,
60
+ }"
61
+ ></div>
62
+ </jsv-free-move-actor>
63
+ <!-- 粒子效果 -->
64
+ <div
65
+ v-if="isSpray"
66
+ :style="{
67
+ top: props.top - moveDistance + 20,
68
+ left: props.left,
69
+ width: 50,
70
+ height: 50,
71
+ }"
72
+ >
73
+ <jsv-spray
74
+ v-for="item in ImgData1"
75
+ :pointRes="`url(${item})`"
76
+ :sprayStyle="sprayOk"
77
+ :ignoreClip="true"
78
+ />
79
+ </div>
80
+ <div
81
+ v-if="isSpray1"
82
+ :style="{
83
+ top: props.top - moveDistance + 80,
84
+ left: props.left - 100,
85
+ width: 50,
86
+ height: 50,
87
+ }"
88
+ >
89
+ <jsv-spray
90
+ v-for="item in ImgData2"
91
+ :pointRes="`url(${item})`"
92
+ :sprayStyle="sprayOk1"
93
+ :ignoreClip="true"
94
+ />
95
+ </div>
96
+ <div
97
+ v-if="isSpray2"
98
+ :style="{
99
+ top: props.top - moveDistance + 80,
100
+ left: props.left + 100,
101
+ width: 50,
102
+ height: 50,
103
+ }"
104
+ >
105
+ <jsv-spray
106
+ v-for="item in ImgData3"
107
+ :pointRes="`url(${item})`"
108
+ :sprayStyle="sprayOk1"
109
+ :ignoreClip="true"
110
+ />
111
+ </div>
112
+ <div
113
+ v-if="isSpray3"
114
+ :style="{
115
+ top: props.top - moveDistance - 80,
116
+ left: props.left - 100,
117
+ width: 50,
118
+ height: 50,
119
+ }"
120
+ >
121
+ <jsv-spray
122
+ v-for="item in ImgData4"
123
+ :pointRes="`url(${item})`"
124
+ :sprayStyle="sprayOk1"
125
+ :ignoreClip="true"
126
+ />
127
+ </div>
128
+ <div
129
+ v-if="isSpray4"
130
+ :style="{
131
+ top: props.top - moveDistance - 80,
132
+ left: props.left + 100,
133
+ width: 50,
134
+ height: 50,
135
+ }"
136
+ >
137
+ <jsv-spray
138
+ v-for="item in ImgData5"
139
+ :pointRes="`url(${item})`"
140
+ :sprayStyle="sprayOk1"
141
+ :ignoreClip="true"
142
+ />
143
+ </div>
144
+ </template>
145
+
146
+ <script setup>
147
+ import {
148
+ JsvFreeMoveActor,
149
+ JsvSpriteAnim,
150
+ JsvSpray,
151
+ JsvPreload,
152
+ buildPreloadInfo,
153
+ JsvSpriteLoader,
154
+ } from "jsview";
155
+ import { _formatInfo } from "./SpriteDeal";
156
+ import { shallowRef, onMounted, onBeforeUnmount, watch } from "vue";
157
+ const props = defineProps({
158
+ top: { type: Number, require: true },
159
+ left: { type: Number, require: true },
160
+ srcConfig: { type: Object, require: true },
161
+ });
162
+
163
+ //火花图片素材
164
+ const group1_1 = props.srcConfig.group1_1;
165
+ const group1_2 = props.srcConfig.group1_2;
166
+ const group2_1 = props.srcConfig.group2_1;
167
+ const group2_2 = props.srcConfig.group2_2;
168
+ const group3_1 = props.srcConfig.group3_1;
169
+ const group3_2 = props.srcConfig.group3_2;
170
+ const group4_1 = props.srcConfig.group4_1;
171
+ const group4_2 = props.srcConfig.group4_2;
172
+ const group5_1 = props.srcConfig.group5_1;
173
+ const group5_2 = props.srcConfig.group5_2;
174
+ //弹药图片素材(请按需修改)
175
+ const ammo = props.srcConfig.ammo;
176
+ //精灵图素材
177
+ const fireworksPng = props.srcConfig.fireworkSpriteSrc;
178
+ const fireworksJson = props.srcConfig.fireworkSpriteSrc + ".json";
179
+
180
+ //运动距离
181
+ let moveDistance = 260;
182
+ let sprite_info = shallowRef(null);
183
+ let view_size = shallowRef(null);
184
+ let isSpray = shallowRef(false);
185
+ let isSpray1 = shallowRef(false);
186
+ let isSpray2 = shallowRef(false);
187
+ let isSpray3 = shallowRef(false);
188
+ let isSpray4 = shallowRef(false);
189
+ //集中管理
190
+ const sprayArray = [isSpray1, isSpray2, isSpray3, isSpray4];
191
+ let isShow = shallowRef(true);
192
+ let actorRef = shallowRef(null);
193
+ let myShow = shallowRef(false);
194
+ let actorControl;
195
+ //随机顺序绽放函数
196
+ const spray = () => {
197
+ timer.id2 = setTimeout(() => {
198
+ let randomIndex = Math.floor(Math.random() * sprayArray.length);
199
+ sprayArray[randomIndex].value = true;
200
+ timer.id = setInterval(() => {
201
+ let remainingItems = sprayArray.filter((item) => !item.value);
202
+ if (remainingItems.length === 0) {
203
+ clearInterval(timer.id);
204
+ timer.id = -1;
205
+ } else {
206
+ randomIndex = Math.floor(Math.random() * remainingItems.length);
207
+ remainingItems[randomIndex].value = true;
208
+ }
209
+ }, 100);
210
+ }, 500);
211
+ };
212
+
213
+ //预加载
214
+ const preload_info = [
215
+ buildPreloadInfo(group1_1),
216
+ buildPreloadInfo(group1_2),
217
+ buildPreloadInfo(group2_1),
218
+ buildPreloadInfo(group2_2),
219
+ buildPreloadInfo(group3_1),
220
+ buildPreloadInfo(group3_2),
221
+ buildPreloadInfo(group4_1),
222
+ buildPreloadInfo(group4_2),
223
+ buildPreloadInfo(group5_1),
224
+ buildPreloadInfo(group5_2),
225
+ buildPreloadInfo(fireworksPng),
226
+ buildPreloadInfo(ammo),
227
+ ];
228
+ let readyNum = shallowRef(0);
229
+ const loadDone = (a) => {
230
+ readyNum.value++;
231
+ };
232
+ const preloadCallback = (config_json, resolve_set) => {
233
+ sprite_info.value = _formatInfo(config_json);
234
+ view_size.value = {
235
+ w: sprite_info.value.maxW,
236
+ h: sprite_info.value.maxH,
237
+ };
238
+ resolve_set(); // 通知loader数组设置完成
239
+ readyNum.value++;
240
+ };
241
+ //定时器
242
+ let timer = { id: -1, id2: -1 };
243
+ //ref
244
+ let myRef = shallowRef(null);
245
+
246
+ // 建议:做粒子效果的图的像素尽量不超过 40 * 40
247
+ const sprayOk = {
248
+ type: 0,
249
+ particleNum: 60,
250
+ deltaAngle: 180,
251
+ deltaWidth: 20,
252
+ deltaHeight: 40,
253
+ pointSizeMin: 30,
254
+ pointSizeMax: 50,
255
+ speedMin: 1,
256
+ speedMax: 7,
257
+ lifeMin: 500,
258
+ lifeMax: 800,
259
+ accelerateX: 0,
260
+ accelerateY: 0,
261
+ enableFade: false,
262
+ enableShrink: true,
263
+ };
264
+ const sprayOk1 = {
265
+ type: 0,
266
+ particleNum: 30,
267
+ deltaAngle: 180,
268
+ deltaWidth: 20,
269
+ deltaHeight: 40,
270
+ pointSizeMin: 30,
271
+ pointSizeMax: 50,
272
+ speedMin: 1,
273
+ speedMax: 7,
274
+ lifeMin: 1000,
275
+ lifeMax: 2000,
276
+ accelerateX: 0,
277
+ accelerateY: -40,
278
+ enableFade: false,
279
+ enableShrink: false,
280
+ };
281
+ //颜色搭配
282
+ const group1 = [group1_1, group1_2];
283
+ const group2 = [group2_1, group2_2];
284
+ const group3 = [group3_1, group3_2];
285
+ const group4 = [group4_1, group4_2];
286
+ const group5 = [group5_1, group5_2];
287
+ let ImgData1;
288
+ let ImgData2;
289
+ let ImgData3;
290
+ let ImgData4;
291
+ let ImgData5;
292
+ const allGroup = [group1, group2, group3, group4, group5];
293
+ //随机烟花颜色设定
294
+ const remainingGroups = [...allGroup];
295
+ for (let i = 1; i <= 5; i++) {
296
+ const randomIndex = Math.floor(Math.random() * remainingGroups.length);
297
+ const selectedGroup = remainingGroups[randomIndex];
298
+ switch (i) {
299
+ case 1:
300
+ ImgData1 = selectedGroup;
301
+ break;
302
+ case 2:
303
+ ImgData2 = selectedGroup;
304
+ break;
305
+ case 3:
306
+ ImgData3 = selectedGroup;
307
+ break;
308
+ case 4:
309
+ ImgData4 = selectedGroup;
310
+ break;
311
+ case 5:
312
+ ImgData5 = selectedGroup;
313
+ break;
314
+ }
315
+
316
+ remainingGroups.splice(randomIndex, 1);
317
+ }
318
+
319
+ watch(readyNum, (n, o) => {
320
+ if (o != 2 && n == 2) {
321
+ myShow.value = true;
322
+ timer.id2 = setTimeout(() => {
323
+ myRef.value.start();
324
+
325
+ actorControl.run((cmds) => [
326
+ cmds
327
+ .condition()
328
+ .onNextTick(2)
329
+ .then([
330
+ cmds.action().setSpeed(undefined, -9),
331
+ cmds.action(3).setAccel(undefined, 0.13),
332
+ ]),
333
+ cmds
334
+ .condition()
335
+ .reachPosition(undefined, -moveDistance)
336
+ .then([
337
+ cmds.action().stopMoving(),
338
+ () => {
339
+ isSpray.value = true;
340
+ isShow.value = false;
341
+ spray();
342
+ },
343
+ ]),
344
+ ]);
345
+ }, 0);
346
+ }
347
+ });
348
+
349
+ onMounted(() => {
350
+ actorControl = actorRef.value.control;
351
+ });
352
+ onBeforeUnmount(() => {
353
+ clearTimeout(timer.id2);
354
+ timer.id2 = -1;
355
+ });
356
+ </script>
357
+
358
+ <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>