@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
package/Swiper/App.vue CHANGED
@@ -7,6 +7,7 @@
7
7
  <script setup>
8
8
  import { JsvSwiper, useFocusHub, EdgeDirection } from "jsview";
9
9
  import { onMounted } from "vue";
10
+ import Item from "./Item.vue"
10
11
 
11
12
  const focusHub = useFocusHub();
12
13
 
@@ -16,13 +17,19 @@ function randomColor() {
16
17
  "#" + new Array(6 - randomColor.length).fill("0").join("") + randomColor
17
18
  );
18
19
  }
20
+ const imgSrcList = [
21
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/Swiper/App/element_228543_img_20230610184253.png",
22
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/Swiper/App/element_228544_img_20230610184145.png",
23
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/Swiper/App/element_228545_img_20230610184110.png",
24
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/Swiper/App/element_228542_img_20230610184253.png",
25
+ ];
19
26
  let data = [];
20
27
  for (let i = 0; i < 10; i++) {
21
28
  data.push({
22
29
  width: 400,
23
30
  height: 300,
24
31
  index: i,
25
- backgroundColor: randomColor(),
32
+ src: imgSrcList[i % imgSrcList.length],
26
33
  });
27
34
  }
28
35
 
@@ -59,14 +66,23 @@ onMounted(() => {
59
66
  </script>
60
67
 
61
68
  <template>
62
- <div>
69
+ <div :style="{width: 1280, height: 720, backgroundColor:'#F5F5DC'}"></div>
70
+ <div :style="{
71
+ width: 1280,
72
+ height: 100,
73
+ fontSize: 30,
74
+ textAlign: 'center',
75
+ lineHeight: 100,
76
+ color: '#000000'
77
+ }">
78
+ 上下键切换获焦的轮播图, 左右键切换轮播图显示海报, 失焦轮播图自动轮播
79
+ </div>
80
+ <div :style="{left: (1280 - 400) / 2, top: 100}">
63
81
  <jsv-swiper
64
82
  name="mySwiper1"
65
83
  ref="mySwiper1"
66
84
  :totalFrame="data.length"
67
85
  :layoutInfo="{
68
- left: 50,
69
- top: 50,
70
86
  width: 400,
71
87
  height: 200,
72
88
  }"
@@ -80,17 +96,7 @@ onMounted(() => {
80
96
  :onEdge="swiper1.onEdge"
81
97
  >
82
98
  <template #itemView="{ dataIndex, focused }">
83
- <div
84
- :style="{
85
- width: data[dataIndex].width,
86
- height: data[dataIndex].height,
87
- backgroundColor: data[dataIndex].backgroundColor,
88
- fontSize: 40,
89
- color: focused ? '#FF0000' : '#FFFFFF',
90
- }"
91
- >
92
- {{ data[dataIndex].index }}
93
- </div>
99
+ <item :data="data[dataIndex]" :focused="focused"/>
94
100
  </template>
95
101
  </jsv-swiper>
96
102
 
@@ -99,7 +105,6 @@ onMounted(() => {
99
105
  ref="mySwiper2"
100
106
  :totalFrame="data.length"
101
107
  :layoutInfo="{
102
- left: 50,
103
108
  top: 300,
104
109
  width: 400,
105
110
  height: 200,
@@ -118,30 +123,24 @@ onMounted(() => {
118
123
  :smoothTranslate="true"
119
124
  >
120
125
  <template #itemView="{ dataIndex, focused }">
121
- <div
122
- :style="{
123
- width: data[dataIndex].width,
124
- height: data[dataIndex].height,
125
- backgroundColor: data[dataIndex].backgroundColor,
126
- fontSize: 40,
127
- color: focused ? '#FF0000' : '#FFFFFF',
128
- }"
129
- >
130
- {{ data[dataIndex].index }}
131
- </div>
126
+ <item :data="data[dataIndex]" :focused="focused"/>
132
127
  </template>
133
128
  <template #indicatorDot="{ dataIndex, currentIndex }">
134
129
  <div
135
130
  :style="{
136
131
  width: 20,
137
132
  height: 20,
133
+ color: '#ffffff',
134
+ lineHeight: 20,
135
+ textAlign: 'center',
138
136
  backgroundColor:
139
137
  dataIndex == currentIndex
140
138
  ? 'rgba(100, 100, 100, 0.7)'
141
139
  : '#ff0000',
142
- borderRadius: 10,
143
140
  }"
144
- ></div>
141
+ >
142
+ {{ dataIndex }}
143
+ </div>
145
144
  </template>
146
145
  </jsv-swiper>
147
146
  </div>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <div
3
+ :style="{
4
+ width: data.width,
5
+ height: data.height,
6
+ backgroundImage: data.src,
7
+ fontSize: 40,
8
+ color: focused ? '#FF0000' : '#FFFFFF',
9
+ }"
10
+ >
11
+ {{ "海报" + data.index }}
12
+ </div>
13
+ </template>
14
+ <script setup>
15
+ const props = defineProps({
16
+ data: Object,
17
+ focused: Boolean,
18
+ });
19
+ </script>
@@ -44,39 +44,39 @@ const layoutInfo = {
44
44
  const items = reactive([
45
45
  {
46
46
  image:
47
- "https://pic.meetao.com/images/admin/2531edf0b7e34c299892ceace72b2c81.jpg",
47
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/2531edf0b7e34c299892ceace72b2c81.jpg",
48
48
  },
49
49
  {
50
50
  image:
51
- "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/TabUi/rBAQvWLWXvKAdqZ5AAB5Ot8fJhc62.webp",
51
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/rBAQvWLWXvKAdqZ5AAB5Ot8fJhc62.webp",
52
52
  },
53
53
  {
54
54
  image:
55
- "https://pic.meetao.com/images/admin/bc28dfc4a9ae470e86eed8f743a3d97a.png",
55
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/bc28dfc4a9ae470e86eed8f743a3d97a.png",
56
56
  },
57
57
  {
58
58
  image:
59
- "https://pic.meetao.com/images/admin/1070701b82e8416d940c558f5fb61ad2.jpg",
59
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/1070701b82e8416d940c558f5fb61ad2.jpg",
60
60
  },
61
61
  {
62
62
  image:
63
- "https://pic.meetao.com/images/admin/5a454819dabd469991c62c72e348c49b.jpg",
63
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/5a454819dabd469991c62c72e348c49b.jpg",
64
64
  },
65
65
  {
66
66
  image:
67
- "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/TabUi/rBAQvWNpwcGAM-w1AACsNFeB3SQ56.webp",
67
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/rBAQvWNpwcGAM-w1AACsNFeB3SQ56.webp",
68
68
  },
69
69
  {
70
70
  image:
71
- "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/TabUi/rBAQvWNpw9GAbOL_AABn2OGO6UY97.webp",
71
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/rBAQvWNpw9GAbOL_AABn2OGO6UY97.webp",
72
72
  },
73
73
  {
74
74
  image:
75
- "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/TabUi/rBAQvWLWWFGAfDz4AAB_dMtnwC831.webp",
75
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/rBAQvWLWWFGAfDz4AAB_dMtnwC831.webp",
76
76
  },
77
77
  {
78
78
  image:
79
- "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/TabUi/rBAQvWNpxACASppDAACKmP9qkQ020.webp",
79
+ "https://cdn.release.qcast.cn/JsViewFrameworkTester/JsViewVueSampleResources/SwiperTest/App/rBAQvWNpxACASppDAACKmP9qkQ020.webp",
80
80
  },
81
81
  ]);
82
82
 
@@ -0,0 +1,82 @@
1
+ export class AckEventDefine {
2
+ // Category
3
+ static CATEGORY_JSC: number = 1;
4
+ static CATEGORY_VIEW: number = 2;
5
+ static CATEGORY_EXCEPTION: number = 3;
6
+
7
+ // Type of jsc
8
+ // Content lifeCycle: event格式:
9
+ // {
10
+ // "act": string类型,当前动作,
11
+ // JsContext重载启动时(reload动作,或者loadUrl动作, 以及closeView时): "reset"
12
+ // js启动过程事件: 按顺序
13
+ // "systemJsLoaded": 系统js加载完成
14
+ // "engineJsRead": Engine Js 完成下载
15
+ // "engineJsLoaded": Engine Js 完成eval
16
+ // "mainJsRead": Main Js 完成下载
17
+ // "mainJsLoaded": Main Js 完成 eval
18
+ // "appJsStart": 开始运行框架的主入口处理
19
+ // "contextId": int类型,发生事件对应的context id,当url切换或者reload时,contentId会发生变化
20
+ // }
21
+ static TYPE_JS_CONTEXT_LIFECYCLE: number = 1;
22
+
23
+ // Content permission: event格式:
24
+ // {
25
+ // "contextId": int类型,发生事件对应的context id,当url切换或者reload时,contentId会发生变化
26
+ // "authDone": int类型 是否完成校验, 0: 还未进行校验, 1: 已完成校验
27
+ // ================== 授权做完后的信息 ====================
28
+ // success(bool): 当次授权校验是否通过
29
+ // showAlert(bool): APP界面右下角展示未授权提示,满足下面条件之一时会展示
30
+ // 1. app运行的main.js是未进行签名(签名参考src/appConfig/中的描述)的,提示"npm start 调试模式"
31
+ // 2. 仅在在线授权服务器无法达到, 并且达到允许次数时生效(每日累计1次, 最多累计30天), 提示"抢先版内核"
32
+ // 3. 远程授权api返回结果为未授权时
33
+ // 4. 本地有授权文件,但授权文件不合法或者过期
34
+ // errorCount(int): 在线授权api访问失败(网络不通)的累计次数, api访问到并拿到结果后清0
35
+ // checkType(int): 授权的校验方式, 1: 调试模式, 2: 本地文件校验的方式, 3: 在线校验方式
36
+ // customDescribe: 授权的描述, 许可范围等描述
37
+ // errorCode: 授权失败的错误码
38
+ // -1: apk签名不匹配(仅离线校验时)
39
+ // -2: js的app name未登记
40
+ // -3: js的app签名和app name登记信息不匹配
41
+ // -4: permission.js文件过期
42
+ // -5: core版本不匹配
43
+ // -6: 分支名不匹配
44
+ // -7: 在线鉴权时未通过的统一错误码(后台详细错误码搭建中...)
45
+ // -8: 页面为npm start的调试模式(开发人员调试时才会出现此状态)
46
+ // -101: 本地permission.js文件格式错误
47
+ // -102: permission.js文件授权信息中core版本无法正确解析为数字错误
48
+ // -103: permission.js文件授权信息中的日期格式错误
49
+ // -105: 在线鉴权api请求失败错误
50
+ // playerMaxVer(int): 播放器授权的最高版本(0000 00000) 前4位为渠道号,后5位为版本号
51
+ // }
52
+ static TYPE_JS_CONTEXT_PERMISSION: number = 2;
53
+
54
+ // Type of view
55
+ // Shared view layout: event格式:
56
+ // {
57
+ // "x": int类型,对应view更新到了x位置,
58
+ // "y": int类型,对应view更新到了y位置,
59
+ // "width": int类型,对应view宽度更新后的值,
60
+ // "height": int类型,对应view高度更新后的值,
61
+ // "mat4": native指针类型, view的位置信息的matrix,
62
+ // "visible": int类型, view是否可见,(0:不可见, 1:可见)
63
+ // "order": int类型, 本NativeSharedView的相对图层
64
+ // "dw": int类型,Design map width,用于换算x,y,width,height
65
+ // }
66
+ static TYPE_SHARED_VIEW_LAYOUT: number = 1;
67
+
68
+ // app view aspect ratio change: event格式:
69
+ // {
70
+ // "width": int类型,横轴比例,对应"16/9"中的16,
71
+ // "height": int类型,纵轴比例,对应"16/9"中的9,
72
+ // }
73
+ static TYPE_APP_ASPECT_RATIO_CHANGE: number = 2;
74
+
75
+ // Type of exception
76
+ // Unhandled exit action: event格式:
77
+ // {
78
+ // "reason": string类型,触发离开动作的触发器,例如: "backKey",
79
+ // "comment": string类型, 当BackKey场景, 为"keyDown"和"keyUp"
80
+ // }
81
+ static TYPE_EXCEPTION_UNHANDLED_EXIT_ACTION: number = 1;
82
+ }
@@ -1,11 +1,9 @@
1
1
  <script setup>
2
+ import { JsvNativeSharedDiv, JsvFocusBlock, jJsvRuntimeBridge } from "jsview";
2
3
  import {
3
- JsvNativeSharedDiv,
4
- JsvFocusBlock,
5
- jJsvRuntimeBridge,
6
4
  enableNativeViewListener,
7
5
  disableNativeViewListener,
8
- } from "jsview";
6
+ } from "./JsvDemoTester";
9
7
  import { onBeforeUnmount, onMounted, reactive, watch, shallowRef } from "vue";
10
8
 
11
9
  let state = reactive({
@@ -26,8 +24,8 @@ let _Index = 0;
26
24
  //给两个div给定不同的响应式变量
27
25
  let view1 = shallowRef("null");
28
26
  let view2 = shallowRef("null");
29
- let view1Dsp = shallowRef("null");
30
- let view2Dsp = shallowRef("null");
27
+ let view1Dsp = shallowRef({ x: 0, y: 0, width: 0, height: 0 });
28
+ let view2Dsp = shallowRef({ x: 0, y: 0, width: 0, height: 0 });
31
29
  let isShow = shallowRef(false);
32
30
  let isStop = shallowRef(false);
33
31
  //创造出需要的四个属性的对象
@@ -0,0 +1,131 @@
1
+ import "./AckEventDefine"
2
+ import { AckEventDefine } from "./AckEventDefine";
3
+
4
+ let interfaceLoaded = false;
5
+ let idGeneratoer = 1;
6
+ let idObjectMap = {};
7
+
8
+ let TesterApis = {
9
+ "android": {
10
+ prepareApi: (resolve, reject) => {
11
+ let cb = () => {
12
+ // dynamic加载完成
13
+ if (window.jJsvDemoTester) {
14
+ console.log("window.jJsvDemoTester ready")
15
+ } else {
16
+ console.log("window.jJsvDemoTester failed")
17
+ }
18
+
19
+ console.log("remove cb=" + cb);
20
+
21
+ // 移除回调
22
+ window.JsView.removeEventListener(cb);
23
+
24
+ // 无论成功失败,暂且都论为加载完成
25
+ interfaceLoaded = true;
26
+ resolve();
27
+ };
28
+ window.JsView.addEventListener("__DemoTesterReady", cb);
29
+ window.JsView.ensureTesterUtils();
30
+ },
31
+ eventParser: (ret, reactive_ref) => {
32
+ // 返回是 .info 为android的bundle格式
33
+ let new_value = ret.info
34
+ .replace(/(\w+)\=/g, '"$1":')
35
+ .replace(/'/g, '"')
36
+ .replace(/^Bundle\[/, "")
37
+ .replace(/\]$/, "");
38
+ reactive_ref.value = new_value;
39
+ },
40
+ listenerToAckEvent: (nativeViewId, listenerId, callback) => {
41
+ // android
42
+ let eventName = "__enableNativeViewListener_" + listenerId;
43
+ window.JsView?.addEventListener(eventName, callback);
44
+ window.jJsvDemoTester?.enableNativeViewListener(nativeViewId, listenerId, eventName);
45
+ },
46
+ expireListener: (listenerId, callback) => {
47
+ window.JsView?.removeEventListener(callback);
48
+ window.jJsvDemoTester?.disableNativeViewListener(listenerId);
49
+ }
50
+ },
51
+ "pc-wasm": {
52
+ prepareApi: (resolve, reject) => {
53
+ // pc-wasm场景
54
+ interfaceLoaded = true;
55
+ resolve(); // 非JsView场景,默认为完成状态
56
+ },
57
+ eventParser: (ret, reactive_ref) => {
58
+ // ret为普通的json格式
59
+ reactive_ref.value = ret;
60
+ },
61
+ listenerToAckEvent: (nativeViewId, listenerId, callback) => {
62
+ // pc wasm
63
+ window.JsvCoreApi.WasmExt.listenerToAckEvent(
64
+ AckEventDefine.CATEGORY_VIEW,
65
+ AckEventDefine.TYPE_SHARED_VIEW_LAYOUT,
66
+ nativeViewId,
67
+ callback
68
+ );
69
+ },
70
+ expireListener: (listenerId, callback) => {
71
+ window.JsvCoreApi.WasmExt.recycleAckListener(callback);
72
+ }
73
+ }
74
+ }
75
+
76
+
77
+ const ensureInterface = () => {
78
+ return new Promise((resolve, reject) => {
79
+ if (interfaceLoaded) {
80
+ // 已经加载完成
81
+ resolve();
82
+ return;
83
+ }
84
+ TesterApis[window.JsvCoreApi.Platform].prepareApi(resolve, reject);
85
+ });
86
+ }
87
+
88
+ const enableNativeViewListener = (nativeViewId, reactive_ref) => {
89
+ let listenerId = idGeneratoer;
90
+ idGeneratoer++;
91
+ idObjectMap[listenerId] = {
92
+ eventCallback: (event_info) => {
93
+ TesterApis[window.JsvCoreApi.Platform].eventParser(event_info, reactive_ref);
94
+ console.log(`JsvDemoTester nativeView viewid=${nativeViewId} info=${reactive_ref.value}`);
95
+ }
96
+ };
97
+
98
+ (async () => {
99
+ await ensureInterface();
100
+
101
+ if (idObjectMap.hasOwnProperty(listenerId)) {
102
+ TesterApis[window.JsvCoreApi.Platform]
103
+ .listenerToAckEvent(
104
+ nativeViewId,
105
+ listenerId,
106
+ idObjectMap[listenerId].eventCallback);
107
+ }
108
+ })();
109
+
110
+ return listenerId; // 用于 disableNativeViewListener() 调用
111
+ }
112
+
113
+ const disableNativeViewListener = (listenerId) => {
114
+ (async () => {
115
+ await ensureInterface();
116
+
117
+ if (idObjectMap.hasOwnProperty(listenerId)) {
118
+ TesterApis[window.JsvCoreApi.Platform].expireListener(
119
+ listenerId, idObjectMap[listenerId].eventCallback
120
+ );
121
+ delete idObjectMap[listenerId];
122
+ } else {
123
+ console.warn("disableNativeViewListener id gone");
124
+ }
125
+ })();
126
+ }
127
+
128
+ export {
129
+ enableNativeViewListener,
130
+ disableNativeViewListener,
131
+ }
@@ -1,8 +1,13 @@
1
1
  <script setup>
2
- import { jJsvRuntimeBridge, getKeyFramesGroup, JsvTextureAnim } from "jsview";
2
+ import {
3
+ jJsvRuntimeBridge,
4
+ getKeyFramesGroup,
5
+ JsvTextureAnim,
6
+ DefaultKeyCodeMap,
7
+ } from "jsview";
3
8
  import img from "./assets/borderOpacity.png";
4
9
  import swipLight from "./assets/swipLight.png";
5
- import { onMounted, onBeforeUnmount } from "vue";
10
+ import { onMounted, onBeforeUnmount, shallowRef } from "vue";
6
11
  import { useRouter } from "vue-router";
7
12
  const router = useRouter();
8
13
  const styleShell = getKeyFramesGroup();
@@ -13,6 +18,9 @@ const borderRadius = 40;
13
18
  const repeat = -1;
14
19
  const duration = 3000;
15
20
 
21
+ let sTranslateTextureRef = shallowRef(null);
22
+ let sTranslateTextureTrigger = shallowRef(1);
23
+
16
24
  const translateAnim =
17
25
  "{from {transform: translate3d(-100%, -50%, 0);} to {transform: translate3d(100%, 50%, 0);}}";
18
26
  const rotateAnim =
@@ -30,6 +38,9 @@ const onKeyDown = (ev) => {
30
38
  // 8:Backspace, 27:Escape, 10000:盒子返回键
31
39
  if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
32
40
  router?.go(-1); // 有router时,是从DemoHomepage进入,回退
41
+ } else if (ev.keyCode == DefaultKeyCodeMap.Ok) {
42
+ sTranslateTextureRef.value.start();
43
+ sTranslateTextureTrigger.value = sTranslateTextureTrigger.value + 1;
33
44
  }
34
45
  return true;
35
46
  };
@@ -68,6 +79,7 @@ onBeforeUnmount(() => {
68
79
  }"
69
80
  />
70
81
  <jsv-texture-anim
82
+ ref="sTranslateTextureRef"
71
83
  :src="img"
72
84
  :width="300"
73
85
  :height="150"
@@ -75,18 +87,16 @@ onBeforeUnmount(() => {
75
87
  :duration="duration"
76
88
  :transform="null"
77
89
  :borderRadius="borderRadius"
78
- :repeat="repeat"
79
90
  :autoStart="true"
80
91
  ></jsv-texture-anim>
81
92
  <div
93
+ :key="sTranslateTextureTrigger"
82
94
  :style="{
83
95
  width: 300,
84
96
  height: 150,
85
97
  backgroundColor: 'rgba(255,0,0,0.5)',
86
98
  transform: null,
87
- animation: `texture-anim-translate ${
88
- duration / 1000
89
- }s linear infinite`,
99
+ animation: `texture-anim-translate ${duration / 1000}s linear 1`,
90
100
  }"
91
101
  />
92
102
  </div>
@@ -0,0 +1,100 @@
1
+ <script setup>
2
+ import { ref, shallowRef, onBeforeUnmount } from "vue";
3
+ import { useRouter } from "vue-router";
4
+ import img from "./assets/blackWhiteTurntable.png";
5
+ import img2 from "./assets/light.png";
6
+ import { getDataUrl } from "../CommonUtils/ResourceData";
7
+ import RotateFrame from "./utils/RotateFrame.vue";
8
+ //无网络环境下使用
9
+ const DemoResourceBase = getDataUrl();
10
+
11
+ const getRandom = (start, end) => {
12
+ return Math.round(Math.random() * (end - start) + start);
13
+ };
14
+
15
+ const router = useRouter();
16
+ const width = ref(300);
17
+ const height = ref(200);
18
+ const left = ref(50);
19
+ const top = ref(80);
20
+
21
+ const targetBorderRadius = 35;
22
+ const targetLineWidth = 2;
23
+ const texCoord = {
24
+ width: 400,
25
+ height: 400,
26
+ };
27
+
28
+ /**
29
+ * 其他回调处理
30
+ */
31
+ const onKeyDown = (ev) => {
32
+ // 8:Backspace, 27:Escape, 10000:盒子返回键
33
+ if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
34
+ router?.go(-1); // 有router时,是从DemoHomepage进入,回退
35
+ } else if (ev.keyCode == 13) {
36
+ left.value = getRandom(50, 400);
37
+ top.value = getRandom(80, 200);
38
+ width.value = getRandom(100, 300);
39
+ height.value = getRandom(100, 300);
40
+ }
41
+ return true;
42
+ };
43
+
44
+ onBeforeUnmount(() => {});
45
+ </script>
46
+ <template>
47
+ <jsv-focus-block
48
+ autoFocus
49
+ :onKeyDown="onKeyDown"
50
+ :style="{
51
+ width: 1280,
52
+ height: 720,
53
+ backgroundColor: 'rgba(0,0,0,0.7)',
54
+ }"
55
+ >
56
+ <div
57
+ :style="{
58
+ textAlign: 'center',
59
+ fontSize: 30,
60
+ lineHeight: 50,
61
+ color: '#ffffff',
62
+ left: 140,
63
+ top: 20,
64
+ width: 1000,
65
+ height: 50,
66
+ backgroundColor: 'rgba(27,38,151,0.8)',
67
+ }"
68
+ >
69
+ .9型的旋转焦点框,OK键进行随机位置+尺寸变换
70
+ </div>
71
+ <div>
72
+ <div
73
+ :style="{
74
+ left: left,
75
+ top: top,
76
+ width: width,
77
+ height: height,
78
+ backgroundColor: 'rgba(0, 255, 0, 0.7)',
79
+ borderRadius: targetBorderRadius,
80
+ fontSize: 30,
81
+ lineHeight: height,
82
+ textAlign: 'center',
83
+ }"
84
+ >
85
+ {{ "带光晕的焦点框" }}
86
+ </div>
87
+ <rotate-frame
88
+ :imageUrl="img"
89
+ :left="left"
90
+ :top="top"
91
+ :width="width"
92
+ :height="height"
93
+ :maxViewSize="texCoord"
94
+ :borderRadius="targetBorderRadius"
95
+ :lineWidth="targetLineWidth"
96
+ :withHalo="true"
97
+ />
98
+ </div>
99
+ </jsv-focus-block>
100
+ </template>
@@ -0,0 +1,68 @@
1
+ import {
2
+ JsvTextureStoreApi,
3
+ } from "jsview";
4
+
5
+ declare interface CacheInfoType {
6
+ borderRadius: number;
7
+ lineWidth: number;
8
+ canvasSourceId: String;
9
+ borderOutset: number;
10
+ canvasWidth: number;
11
+ }
12
+
13
+ let sCurrentCacheList: Array<CacheInfoType> = [];
14
+
15
+ function checkCache(border_radius: number, line_width: number): CacheInfoType | null {
16
+ for (let cache_item of sCurrentCacheList) {
17
+ if (cache_item.borderRadius == border_radius && cache_item.lineWidth == line_width) {
18
+ return cache_item;
19
+ }
20
+ }
21
+ return null;
22
+ }
23
+
24
+ function BuildFrame(border_radius: number, line_width: number): CacheInfoType {
25
+ let frame_cache: CacheInfoType | null;
26
+
27
+ frame_cache = checkCache(border_radius, line_width);
28
+ if (frame_cache != null) {
29
+ return frame_cache;
30
+ }
31
+
32
+ let sampleImageWidth = (border_radius + line_width + 3) * 2;
33
+ let canvasRef = JsvTextureStoreApi.canvasTexture(
34
+ sampleImageWidth,
35
+ sampleImageWidth
36
+ ); // 创建画布
37
+
38
+ let circleInnerDiameter = border_radius * 2; // 环形内直径, 为所要包括图形的borderRadius的一倍
39
+ let circleLineWidth = line_width; // 线宽
40
+ let circleRadius = Math.floor(circleInnerDiameter / 2 + circleLineWidth / 2); // 绘制线是圆圈的轨迹中线
41
+ let customPath = canvasRef.circlePath(
42
+ Math.floor(sampleImageWidth / 2),
43
+ Math.floor(sampleImageWidth / 2),
44
+ circleRadius
45
+ ); // 创建圆环绘制路径,圆形在画布的中心点位置
46
+ canvasRef.drawColor("rgba(0,0,0,0)"); // 画布绘制半透明底色
47
+ customPath!.stroke(circleLineWidth, "#000000FF"); // 以给定线宽绘制圆环
48
+ let source_id = canvasRef.commit(); // texture和div的textureStore绑定
49
+
50
+ frame_cache = {
51
+ canvasWidth: sampleImageWidth,
52
+ borderRadius: border_radius,
53
+ lineWidth: line_width,
54
+ canvasSourceId: source_id,
55
+ borderOutset: Math.floor((sampleImageWidth - circleInnerDiameter) / 2), // (画布 - 圆环内直径) / 2
56
+ };
57
+
58
+ // 永远保存,不删除,界面上理论上不会有太多种转框,所以只存不清理
59
+ sCurrentCacheList.push(frame_cache);
60
+
61
+ console.log("Rotate frame cache increase to " + sCurrentCacheList.length);
62
+
63
+ return frame_cache;
64
+ }
65
+
66
+ export {
67
+ BuildFrame,
68
+ }