@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,331 @@
1
+ //测试文本
2
+ let string = "# 袁隆平\n\n- **姓名**:袁隆平\n- **出生日期**:1930年9月7日\n- **籍贯**:江西省九江市德安县\n- **职业**:农业科学家、杂交水稻育种专家\n- **主要成就**:成功研究出杂交水稻技术,被誉为“杂交水稻之父”\n- **荣誉**:获得共和国勋章等多项国内外荣誉\n\n袁隆平是中国著名的农业科学家,他致力于杂交水稻的研究,为解决世界粮食问题作出了巨大贡献。\n为您推荐这些好看的影视\n 测试 一级标题\n# 一级标题\n 测试---二级标题\n## 二级标题 \n测试---三级标题\n### 三级标题 \n测试---四级标题\n#### 四级标题 \n测试---五级标题\n##### 五级标题 \n测试---六级级标题\n###### 六级标题 \n 测试---水平线\n--- \n测试---无序列表\n- 无序列表项 1 \n- 无序列表项 2\n- 无序列表项 3\n- 无序列表项 4\n测试---有序列表\n1. 有序列表项 1\n2. 有序列表项 2\n3. 有序列表项 3\n测试---引用\n> 这是个引用\n测试---长段落\n`新华社`北京4月1日电 4月1日,国家主席习近平同印度总统穆尔穆互致贺电,庆祝两国建交75周年\n习近平指出,中国和印度同为文明古国、发展中大国、“全球南方”重要成员,都处在各自现代化建设的关键时期。中印关系发展历程表明,做相互成就的伙伴、实现“龙象共舞”是双方的正确选择,完全符合两国和两国人民根本利益。双方应坚持从战略高度和长远角度看待和处理中印关系,共谋相邻大国和平共处、互信互利、共同发展的相处之道,共同推进世界多极化和国际关系民主化。\n"
3
+
4
+
5
+ function extractBracketsText(markdown) {
6
+ // 正则表达式:匹配 [文本](链接) 格式,捕获中括号内的文本
7
+ const regex = /$(.*?)$$(.*?)$/g;
8
+
9
+ const results = [];
10
+ let match;
11
+
12
+ // 循环提取所有匹配项的中括号内容
13
+ while ((match = regex.exec(markdown)) !== null) {
14
+ results.push(match); // 第一个捕获组(中括号内的文本)
15
+ }
16
+
17
+ return results; // 返回所有匹配的中括号文本数组
18
+ }
19
+ //api
20
+ //text
21
+ //img
22
+ //公式
23
+ export function TypeTransitionApi(string){
24
+ // img 图片
25
+ //gptText 文本
26
+ // div结构 水平线
27
+ if(/^-{3,}/gm.test(string)){
28
+ return 'horizontalLine'
29
+ }
30
+ return 'text' //默认
31
+
32
+
33
+ }
34
+ // md格式 替换 latex 正则
35
+ export function TextTransitionApi(string){
36
+ let tranSting = string
37
+ // 行内代码 、 代码块
38
+ // 水平线
39
+ tranSting = tranSting.replace(/^-{3,}$/gm, ''); //去掉标识
40
+ //加粗
41
+ tranSting = tranSting.replace(/(\*\*|__)(.*?)\1/g, '\\textb{$2}')
42
+ //斜体
43
+ tranSting = tranSting.replace(/(\*|_)(.*?)\1/g, '\\texti{$2}')
44
+ // 删除线
45
+ tranSting = tranSting.replace(/~~(.*?)~~/g, '\\textdecoration{line-through}{$1}')
46
+ //链接这是个[链接](https://example.com)\n
47
+ tranSting = tranSting.replace((/$([^$]+)\]$([^)]+)$/g,'\\textdecoration{underline}{\\textcolor{#FF0000}{$1}}'))
48
+ // tranSting = tranSting.replace(/$(.*?)$$(.*?)$/g, '\\textdecoration{underline}{\\textcolor{#FF0000}{$1}}')
49
+ // `` 行内代码块
50
+ tranSting = tranSting.replace(/`(.*?)`/g, '\\textcolor{#FF0000}{$1}')
51
+
52
+
53
+ // 行内代码
54
+ // .replace(/`(.*?)`/g, '<code>$1</code>')🚨
55
+
56
+ // 图片
57
+ // .replace(/!$(.*?)$$(.*?)$/g, '<img src="$2" alt="$1">')🚨
58
+
59
+ //////////////////////
60
+ //匹配头部 处理
61
+
62
+ // 标题:
63
+ if(/^######\s+(.+)/.test(string)){
64
+ tranSting = tranSting.replace(/^######\s+(.+)/g, '$1');
65
+ }else if(/^#####\s+(.+)/.test(string)){
66
+ tranSting = tranSting.replace(/^#####\s+(.+)/g, '$1');
67
+ }else if(/^####\s+(.+)/.test(string)){
68
+ tranSting = tranSting.replace(/^####\s+(.+)/g, '$1');
69
+ }else if(/^###\s+(.+)/.test(string)){
70
+ tranSting = tranSting.replace(/^###\s+(.+)/g, '$1');
71
+ }else if(/^##\s+(.+)/.test(string)){
72
+ tranSting = tranSting.replace(/^##\s+(.+)/g, '$1');
73
+ }else if(/^#\s+(.+)/.test(string)){
74
+ tranSting = tranSting.replace(/^#\s+(.+)/g, '$1');
75
+ }
76
+ else if (/^\s*[-*+]\s/.test(tranSting)) {
77
+ //无序列表 /●
78
+ // 无序列表
79
+ tranSting = tranSting.replace(/^\s*[-*+]\s+(.*)/, '● $1');
80
+ }else if (/^\s*\d+\.\s/.test(tranSting)) {
81
+ // 有序列表
82
+ tranSting = tranSting.replace(/^\s*(\d+)\.\s+(.*)/, '$1. $2');
83
+ }else if (tranSting.startsWith('> ')) {
84
+ // 引用块 ---- 引用 -- 两个空格
85
+ tranSting = tranSting.replace(/^> (.*)/, '▍ $1');
86
+ }else{
87
+ //段落 四个空格 //首行缩进
88
+ tranSting = ' ' + tranSting
89
+
90
+ }
91
+
92
+ return tranSting
93
+
94
+
95
+
96
+ }
97
+ // md格式 转 样式
98
+ export function StyleTransitionApi(string){
99
+ //特殊的标签进行处理
100
+ const em = 28
101
+ const color = '#ffffff'
102
+ //标题 -- 加粗 、字号、行高
103
+ if(/^######\s+(.+)/.test(string)){
104
+ //h6
105
+ return{
106
+ fontSize: Math.floor(0.8 * em),
107
+ fontWeight:"bold",
108
+ height:Math.floor(1.7*0.8 * em),
109
+ lineHeight:Math.floor(1.7*0.8 * em),
110
+ color:color,
111
+ }
112
+ }
113
+ if(/^#####\s+(.+)/.test(string)){
114
+ //h5
115
+ return{
116
+ fontSize: Math.floor(1 * em),
117
+ fontWeight:"bold",
118
+ height:Math.floor(1.6*1 * em),
119
+ lineHeight:Math.floor(1.6*1 * em),
120
+ color:color,
121
+ }
122
+ }
123
+ if(/^####\s+(.+)/.test(string)){
124
+ //h4
125
+ return{
126
+ fontSize: Math.floor(1.2 * em),
127
+ fontWeight:"bold",
128
+ height:Math.floor(1.5*1.2 * em),
129
+ lineHeight:Math.floor(1.5*1.2 * em),
130
+ color:color,
131
+ }
132
+ }
133
+ if(/^###\s+(.+)/.test(string)){
134
+ //h3
135
+ return{
136
+ fontSize: Math.floor(1.4 * em),
137
+ fontWeight:"bold",
138
+ height:Math.floor(1.4*1.4 * em),
139
+ lineHeight:Math.floor(1.4*1.4 * em),
140
+ color:color,
141
+ }
142
+ }
143
+ if(/^##\s+(.+)/.test(string)){
144
+ //h2
145
+ return{
146
+ fontSize: Math.floor(1.7 * em),
147
+ fontWeight:"bold",
148
+ height:Math.floor(1.3*1.7 * em),
149
+ lineHeight:Math.floor(1.3*1.7 * em),
150
+ color:color,
151
+ }
152
+ }
153
+ if(/^#\s+(.+)/.test(string)){
154
+ //h1
155
+ return{
156
+ fontSize: Math.floor(2 * em),
157
+ fontWeight:"bold",
158
+ height:Math.floor(1.2*2 * em),
159
+ lineHeight:Math.floor(1.2*2 * em),
160
+ color:color,
161
+ }
162
+ }
163
+ // 引用块 ---- 引用 -- 加背景颜色
164
+ if (string.startsWith('> ')) {
165
+ return{
166
+ fontSize: em,
167
+ color:'#cccccc',
168
+ lineHeight:Math.floor(1.6* em),
169
+ //缩进四个字符
170
+ }
171
+ }
172
+ //水平线 --- <hr>
173
+ if(/^-{3,}$/gm.test(string)){
174
+ //父 margin 15 0 32
175
+ return {
176
+ top:18,
177
+ height:4,
178
+ borderRadius:2,
179
+ backgroundColor:color,
180
+ }
181
+ }
182
+
183
+ //默认格式
184
+ return{
185
+ fontSize: em,
186
+ color:color,
187
+ lineHeight:Math.floor(1.6* em),
188
+ }
189
+
190
+
191
+
192
+ }
193
+
194
+ export function StyleTransitionApi2(string){
195
+ //特殊的标签进行处理
196
+ const em = 28
197
+ const color = '#ffffff'
198
+ //标题 -- 加粗 、字号、行高
199
+ if(/^######\s?(.?)/.test(string)){
200
+ //h6
201
+ return{
202
+ fontSize: Math.floor(0.8 * em),
203
+ fontWeight:"bold",
204
+ height:Math.floor(1.7*0.8 * em),
205
+ lineHeight:Math.floor(1.7*0.8 * em),
206
+ color:color,
207
+ }
208
+ }
209
+ if(/^#####\s?(.?)/.test(string)){
210
+ //h5
211
+ return{
212
+ fontSize: Math.floor(1 * em),
213
+ fontWeight:"bold",
214
+ height:Math.floor(1.6*1 * em),
215
+ lineHeight:Math.floor(1.6*1 * em),
216
+ color:color,
217
+ }
218
+ }
219
+ if(/^####\s?(.?)/.test(string)){
220
+ //h4
221
+ return{
222
+ fontSize: Math.floor(1.2 * em),
223
+ fontWeight:"bold",
224
+ height:Math.floor(1.5*1.2 * em),
225
+ lineHeight:Math.floor(1.5*1.2 * em),
226
+ color:color,
227
+ }
228
+ }
229
+ if(/^###\s?(.?)/.test(string)){
230
+ //h3
231
+ return{
232
+ fontSize: Math.floor(1.4 * em),
233
+ fontWeight:"bold",
234
+ height:Math.floor(1.4*1.4 * em),
235
+ lineHeight:Math.floor(1.4*1.4 * em),
236
+ color:color,
237
+ }
238
+ }
239
+ if(/^##\s?(.?)/.test(string)){
240
+ //h2
241
+ return{
242
+ fontSize: Math.floor(1.7 * em),
243
+ fontWeight:"bold",
244
+ height:Math.floor(1.3*1.7 * em),
245
+ lineHeight:Math.floor(1.3*1.7 * em),
246
+ color:color,
247
+ }
248
+ }
249
+ if(/^#\s?(.?)/.test(string)){
250
+ //h1
251
+ return{
252
+ fontSize: Math.floor(2 * em),
253
+ fontWeight:"bold",
254
+ height:Math.floor(1.2*2 * em),
255
+ lineHeight:Math.floor(1.2*2 * em),
256
+ color:color,
257
+ }
258
+ }
259
+ // 引用块 ---- 引用 -- 加背景颜色
260
+ if (string.startsWith('> ')) {
261
+ return{
262
+ fontSize: em,
263
+ color:'#cccccc',
264
+ lineHeight:Math.floor(1.6* em),
265
+ //缩进四个字符
266
+ }
267
+ }
268
+ //水平线 --- <hr>
269
+ if(/^-{3,}$/gm.test(string)){
270
+ //父 margin 15 0 32
271
+ return {
272
+ top:18,
273
+ height:4,
274
+ borderRadius:2,
275
+ backgroundColor:color,
276
+ }
277
+ }
278
+
279
+ //默认格式
280
+ return{
281
+ fontSize: em,
282
+ color:color,
283
+ lineHeight:Math.floor(1.6* em),
284
+ }
285
+
286
+
287
+
288
+ }
289
+
290
+
291
+ //api:未能开发:图片、表格 、代码块 、公式
292
+ export function splitWithNewlines(str) {
293
+ // 匹配所有换行符类型(\r\n, \n, \r)并保留
294
+ return str.split(/(\r\n|\n|\r)/)
295
+ .reduce((acc, part, i, arr) => {
296
+ // 将换行符与前一个元素合并
297
+ if (i % 2 === 0) {
298
+ const newline = arr[i + 1] || '';
299
+ acc.push(part + newline);
300
+ }
301
+ return acc;
302
+ }, []);
303
+ }
304
+
305
+ //长文本 分块函数
306
+ export function splitStringByLength(str) {
307
+ const result = [];
308
+ const chunkSize = 112;
309
+ const minLastChunk = 10;
310
+
311
+ // 遍历字符串按 150 长度分块
312
+ for (let i = 0; i < str.length; i += chunkSize) {
313
+ const chunk = str.slice(i, i + chunkSize);
314
+ result.push(chunk);
315
+ }
316
+
317
+ // 处理最后一块的逻辑
318
+ if (result.length > 1) {
319
+ const lastChunk = result[result.length - 1];
320
+ if (lastChunk.length < minLastChunk) {
321
+ result.pop(); // 移除最后一块
322
+ result[result.length - 1] += lastChunk; // 合并到前一块
323
+ }
324
+ }
325
+
326
+ return result;
327
+ }
328
+
329
+
330
+
331
+
@@ -0,0 +1,69 @@
1
+ <template>
2
+ <div
3
+ :style="{
4
+ width: 1280,
5
+ height: 720,
6
+ backgroundColor: '#000000aa',
7
+ }"
8
+ ></div>
9
+ <div
10
+ :style="{
11
+ top: 50,
12
+ width: 1280,
13
+ height: 100,
14
+ fontSize: 30,
15
+ color: '#ffffff',
16
+ textAlign: 'center',
17
+ }"
18
+ >
19
+ 按OK键爆炸效果
20
+ </div>
21
+ <jsv-focus-block
22
+ autoFocus
23
+ :onAction="{
24
+ onKeyDown,
25
+ }"
26
+ ></jsv-focus-block>
27
+ <DropParticle
28
+ :urlList="urlList"
29
+ :layout="{
30
+ width: 300,
31
+ height: 720,
32
+ }"
33
+ numLevel="high"
34
+ sprayLevel="middle"
35
+ />
36
+
37
+ <ExplodeParticle
38
+ ref="explodeRef"
39
+ :layout="{
40
+ left: 615,
41
+ top: 300,
42
+ width: 10,
43
+ height: 10,
44
+ }"
45
+ :urlList="urlList"
46
+ numLevel="high"
47
+ />
48
+ </template>
49
+
50
+ <script setup>
51
+ import DropParticle from "./Drop/DropParticle.vue";
52
+ import ExplodeParticle from "./Explode/ExplodeParticle.vue";
53
+ import { shallowRef } from "vue";
54
+
55
+ const star1 = "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/banger/redStar.png";
56
+ const star2 = "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/banger/yellowStar.png";
57
+ const star3 = "https://oss.image.qcast.cn/JsViewVideo/ImageTestSample/JsViewFrameworkDemo/banger/purpleStar.png";
58
+ const urlList = [star1, star2, star3];
59
+
60
+ const explodeRef = shallowRef();
61
+
62
+ function onKeyDown(ev) {
63
+ if (ev.keyCode == 13) {
64
+ explodeRef.value?.start();
65
+ return true;
66
+ }
67
+ return false;
68
+ }
69
+ </script>
@@ -0,0 +1,208 @@
1
+ <template>
2
+ <div
3
+ v-if="show"
4
+ :style="{
5
+ left: layout.left,
6
+ top: layout.top,
7
+ width: layout.width,
8
+ height: layout.height,
9
+ overflow: 'hidden',
10
+ }"
11
+ >
12
+ <div
13
+ v-for="(item, index) in list1"
14
+ :key="`item_${index}`"
15
+ :style="{
16
+ top: item.pos,
17
+ }"
18
+ >
19
+ <jsv-spray :pointRes="`url(${item.url})`" :sprayStyle="item.config" />
20
+ </div>
21
+ <div v-if="showSceond">
22
+ <div
23
+ v-for="(item, index) in list2"
24
+ :key="`item_${index}`"
25
+ :style="{
26
+ top: item.pos,
27
+ }"
28
+ >
29
+ <jsv-spray :pointRes="`url(${item.url})`" :sprayStyle="item.config" />
30
+ </div>
31
+ </div>
32
+ <div v-if="showThird">
33
+ <div
34
+ v-for="(item, index) in list3"
35
+ :key="`item_${index}`"
36
+ :style="{
37
+ top: item.pos,
38
+ }"
39
+ >
40
+ <jsv-spray :pointRes="`url(${item.url})`" :sprayStyle="item.config" />
41
+ </div>
42
+ </div>
43
+ </div>
44
+ </template>
45
+
46
+ <script setup>
47
+ import { JsvSpray } from "jsview";
48
+ import { ref, onBeforeUnmount, onMounted } from "vue";
49
+
50
+ const props = defineProps({
51
+ /**
52
+ * 粒子图片资源URL列表
53
+ * @type {Array}
54
+ * @required
55
+ */
56
+ urlList: {
57
+ type: Array,
58
+ required: true,
59
+ },
60
+ /**
61
+ * 是否自动开始动画
62
+ * @type {Boolean}
63
+ * @default true
64
+ */
65
+ autoStart: {
66
+ type: Boolean,
67
+ default: true,
68
+ },
69
+ /**
70
+ * 粒子容器布局配置
71
+ * @type {Object}
72
+ * @required
73
+ * @property {string} left - CSS left值
74
+ * @property {string} top - CSS top值
75
+ * @property {string} width - 容器宽度
76
+ * @property {string} height - 容器高度
77
+ */
78
+ layout: {
79
+ type: Object,
80
+ required: true,
81
+ },
82
+ /**
83
+ * 粒子数量级别
84
+ * @type {'low'|'middle'|'high'}
85
+ * @default 'middle'
86
+ */
87
+ numLevel: {
88
+ type: String,
89
+ default: "middle",
90
+ },
91
+ /**
92
+ * 粒子生成速度级别
93
+ * @type {'low'|'middle'|'high'}
94
+ * @default 'middle'
95
+ */
96
+ sprayLevel: {
97
+ type: String,
98
+ default: "middle",
99
+ },
100
+ });
101
+
102
+ //获取一个随机顺序
103
+ function getRandomOrder(numbers) {
104
+ let currentIndex = numbers.length,
105
+ temporaryValue,
106
+ randomIndex;
107
+ // 从数组的最后一个元素开始,向前遍历
108
+ while (currentIndex !== 0) {
109
+ // 选取一个随机索引
110
+ randomIndex = Math.floor(Math.random() * currentIndex);
111
+ currentIndex -= 1;
112
+
113
+ // 交换当前索引和随机索引处的元素
114
+ temporaryValue = numbers[currentIndex];
115
+ numbers[currentIndex] = numbers[randomIndex];
116
+ numbers[randomIndex] = temporaryValue;
117
+ }
118
+
119
+ return numbers;
120
+ }
121
+
122
+ const levelToIndex = (level) => {
123
+ switch (level) {
124
+ case "low":
125
+ return 0;
126
+ case "high":
127
+ return 2;
128
+ default:
129
+ return 1;
130
+ }
131
+ };
132
+ const levelConfig = {
133
+ addSpeed: [0.001, 0.01, 0.1],
134
+ number: [10, 50, 100],
135
+ };
136
+
137
+ //目前版本的粒子生成有问题, 会在一开始就集中出现, 所以要随机拉开几个JsvSpray的位置
138
+ const positionRange = [-50, -100];
139
+ const step = (positionRange[1] - positionRange[0]) / props.urlList.length;
140
+ const urls = getRandomOrder(props.urlList);
141
+ const sprayInfos = [];
142
+ for (let i = 0; i < urls.length; ++i) {
143
+ sprayInfos.push({
144
+ url: urls[i],
145
+ pos: positionRange[0] + step * i,
146
+ config: {
147
+ type: 1,
148
+ particleNum: Math.round(
149
+ levelConfig.number[levelToIndex(props.numLevel)] / props.urlList.length
150
+ ),
151
+ deltaAngle: 0,
152
+ deltaWidth: Math.round(props.layout.width / 2),
153
+ deltaHeight: 1,
154
+ pointSizeMin: 90,
155
+ pointSizeMax: 120,
156
+ speedMin: -10,
157
+ speedMax: -15,
158
+ lifeMin: 3500 + i * 200,
159
+ lifeMax: 4000 + i * 200,
160
+ accelerateX: 0,
161
+ accelerateY: 0,
162
+ particleAddSpeed: levelConfig.addSpeed[levelToIndex(props.sprayLevel)],
163
+ angularVelocityMin: 10,
164
+ angularVelocityMax: 15,
165
+ enableFade: false,
166
+ enableShrink: false,
167
+ },
168
+ });
169
+ }
170
+
171
+ //粒子数量少的时候, 添加有bug, 为了规避此处分成三拨开始
172
+ let showSceond = ref(false);
173
+ let showThird = ref(false);
174
+
175
+ let list1 = sprayInfos.slice(0, 1);
176
+ let list2 = sprayInfos.slice(1, 3);
177
+ let list3 = sprayInfos.slice(3);
178
+
179
+ let show = ref(false);
180
+ let timeoutHandler = -1;
181
+ /**
182
+ * 启动粒子动画
183
+ * @expose 通过defineExpose暴露给父组件调用
184
+ */
185
+ function start() {
186
+ show.value = true;
187
+ timeoutHandler = setTimeout(() => {
188
+ showSceond.value = true;
189
+ timeoutHandler = setTimeout(() => {
190
+ showThird.value = true;
191
+ }, 700);
192
+ }, 700);
193
+ }
194
+
195
+ onMounted(() => {
196
+ if (props.autoStart) {
197
+ start();
198
+ }
199
+ });
200
+
201
+ onBeforeUnmount(() => {
202
+ clearTimeout(timeoutHandler);
203
+ });
204
+
205
+ defineExpose({
206
+ start,
207
+ });
208
+ </script>