@shijiu/jsview-vue-samples 2.3.151-test.0 → 2.3.728-alpha.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 (244) hide show
  1. package/ABImageAlt/App.vue +114 -0
  2. package/ABImageAlt/Item.vue +133 -0
  3. package/{MetroWidgetDemos/SkeletonDiagram/assets/imageList.json → ABImageAlt/assets/imageList.js} +9 -1
  4. package/ABImageAlt/data.js +17 -0
  5. package/AI_Check_Rules.txt +5 -0
  6. package/AnimPicture/App.vue +20 -10
  7. package/ApicSwitch/App.vue +90 -0
  8. package/ApicSwitch/TabItem.vue +65 -0
  9. package/ApicSwitch/WebpShow.vue +24 -0
  10. package/ApicSwitch/data.js +50 -0
  11. package/Basic/AI_skills_update.md +1 -0
  12. package/Basic/components/div/ColorFormatTest.vue +93 -0
  13. package/Basic/components/div/DivRadius.vue +97 -15
  14. package/Basic/components/div/DivTag3Group.vue +30 -0
  15. package/Basic/components/img/ImageType.vue +65 -0
  16. package/Basic/components/panel/Panel2.vue +13 -1
  17. package/Basic/components/text/TextAlign.vue +7 -1
  18. package/BlobLoadTest/App.vue +201 -0
  19. package/BreakLinesApi/App.vue +82 -0
  20. package/CanvasDrawChart/App.vue +11 -0
  21. package/CanvasDrawChart/Graph1.vue +104 -0
  22. package/CanvasDrawChart/Graph2.vue +115 -0
  23. package/DemoForOperator/Blur/Blur.vue +1 -1
  24. package/DemoForOperator/Blur/BlurInOut/BlurInOut.vue +49 -23
  25. package/DemoForOperator/Blur/BlurInOut/StaticBgSlide.vue +1 -1
  26. package/DemoForOperator/Blur/BlurPopup/BlurPopup.vue +156 -20
  27. package/DemoForOperator/BookFlip/App.vue +1 -1
  28. package/DemoForOperator/Bounce/FreeMoveBuilder.js +1 -1
  29. package/DemoForOperator/Firework1/App.vue +12 -1
  30. package/DemoForOperator/Firework1/Fireworks.vue +18 -0
  31. package/DemoForOperator/FlipPage/FlipPage/FlipPage.vue +1 -0
  32. package/DemoForOperator/Focus/Alpha/Item.vue +1 -0
  33. package/DemoForOperator/Focus/Light/Item.vue +1 -0
  34. package/DemoForOperator/Focus/Normal/Item.vue +1 -0
  35. package/DemoForOperator/Genie/App.vue +20 -6
  36. package/DemoForOperator/Genie/App2.vue +61 -0
  37. package/DemoForOperator/Genie/geniePakcer/GenieImage.vue +298 -0
  38. package/DemoForOperator/Genie/geniePakcer/GenieSlot.vue +292 -0
  39. package/DemoForOperator/Genie/geniePakcer/GenieTools.ts +463 -0
  40. package/DemoForOperator/Jigsaw/JigsawFull.vue +12 -7
  41. package/DemoForOperator/Jigsaw/JigsawSingle.vue +13 -7
  42. package/DemoForOperator/LongChatBox/App.vue +13 -13
  43. package/DemoForOperator/LongChatBox/Bubble.vue +78 -66
  44. package/DemoForOperator/LongChatBox/LongChat.vue +67 -36
  45. package/DemoForOperator/LongChatBox/testData.js +7 -44
  46. package/DemoForOperator/Sound/Bounce/FreeMoveBuilder.js +1 -1
  47. package/DemoForOperator/routeList.js +8 -2
  48. package/DemoHomepage/App.vue +74 -1
  49. package/DemoHomepage/components/BodyFrame.vue +5 -0
  50. package/DemoHomepage/components/TabFrame.vue +1 -1
  51. package/DemoHomepage/router.js +749 -165
  52. package/DemoHomepage/views/Homepage.vue +60 -2
  53. package/DemoHomepage/watchTest.vue +50 -0
  54. package/DomRenderer/App.vue +133 -0
  55. package/FilterDemo/AnimatePic.vue +63 -17
  56. package/FilterDemo/App.vue +3 -3
  57. package/FlexCellDemo/AI_skills_update.md +4 -0
  58. package/FlexCellDemo/TestFrame1.vue +12 -2
  59. package/FlexCellDemo/TestFrame2.vue +10 -1
  60. package/FlexCellDemo/TestFrame3.vue +114 -59
  61. package/FpsLimit/App.vue +102 -0
  62. package/FreeMove/App.vue +24 -279
  63. package/FreeMove/TestScene1.vue +260 -0
  64. package/FreeMove/TestScene3.vue +431 -0
  65. package/FreeMoveChildAttract/App.vue +18 -8
  66. package/FreeMoveLink/App.vue +51 -22
  67. package/Hover/App.vue +144 -0
  68. package/HttpRequestSSE/SSEReader.js +200 -0
  69. package/ImpactStop/App.vue +2 -2
  70. package/Input/FullKeyboard.vue +3 -3
  71. package/Input/InputPanel.vue +63 -3
  72. package/JsvLine/App.vue +53 -38
  73. package/LatexDemo/App.vue +3 -1
  74. package/LatexFormula/App.vue +196 -0
  75. package/LongImage/App.vue +1 -1
  76. package/LongImage/LongImageScroll.vue +111 -46
  77. package/LongImage/Scroll.vue +28 -9
  78. package/LongText/LongTextScroll.vue +14 -1
  79. package/Markdown/App.vue +36 -0
  80. package/Markdown/Bubble.vue +109 -0
  81. package/Markdown/LongChat.vue +216 -0
  82. package/Markdown/data.js +633 -0
  83. package/MetroWidgetDemos/AI_skills_update.md +2 -0
  84. package/MetroWidgetDemos/EpgFlowListType/App.vue +206 -0
  85. package/MetroWidgetDemos/EpgFlowListType/components/ContentCard.vue +105 -0
  86. package/MetroWidgetDemos/EpgFlowListType/components/FloorSection.vue +131 -0
  87. package/MetroWidgetDemos/EpgFlowListType/components/LeftTabItem.vue +41 -0
  88. package/MetroWidgetDemos/EpgFlowListType/data.js +78 -0
  89. package/MetroWidgetDemos/ListExpand/ChildItem.vue +130 -0
  90. package/MetroWidgetDemos/ListExpand/ExpandItem.vue +375 -0
  91. package/MetroWidgetDemos/ListExpand/ExpandItem1.vue +403 -0
  92. package/MetroWidgetDemos/ListExpand/assets/arrow-down.png +0 -0
  93. package/MetroWidgetDemos/ListExpand/assets/up-arrow.png +0 -0
  94. package/MetroWidgetDemos/ListExpand/components/WidgetListHandler.vue +150 -0
  95. package/MetroWidgetDemos/ListExpand/index.vue +88 -0
  96. package/MetroWidgetDemos/ListExpand/list.js +2421 -0
  97. package/MetroWidgetDemos/RefreshDemo/App.vue +14 -1
  98. package/MetroWidgetDemos/RenderAccelerate/App.vue +142 -0
  99. package/MetroWidgetDemos/RenderAccelerate/AppPage.vue +78 -0
  100. package/MetroWidgetDemos/RenderAccelerate/AppTab.vue +62 -0
  101. package/MetroWidgetDemos/RenderAccelerate/ContentItem.vue +409 -0
  102. package/MetroWidgetDemos/RenderAccelerate/Item.vue +67 -0
  103. package/MetroWidgetDemos/RenderAccelerate/TabItem.vue +100 -0
  104. package/MetroWidgetDemos/RenderAccelerate/ViewSwiper.vue +215 -0
  105. package/MetroWidgetDemos/RenderAccelerate/WidgetItem.vue +107 -0
  106. package/MetroWidgetDemos/SkeletonDiagram/App.vue +35 -8
  107. package/MetroWidgetDemos/SkeletonDiagram/Item.vue +11 -2
  108. package/MetroWidgetDemos/SkeletonDiagram/assets/imageList.js +245 -0
  109. package/MetroWidgetDemos/SkeletonDiagram/data.js +3 -3
  110. package/MetroWidgetDemos/SpatialNav/App.vue +177 -0
  111. package/MetroWidgetDemos/SpatialNav/Buttons.vue +83 -0
  112. package/MetroWidgetDemos/SpatialNav/CustomFocus.vue +57 -0
  113. package/MetroWidgetDemos/{TripleWidget → SpatialNav}/Item.vue +1 -8
  114. package/MetroWidgetDemos/{TripleWidget/WidgetItem.vue → SpatialNav/SimpleFloor.vue} +14 -45
  115. package/MetroWidgetDemos/SpatialNav/StepMw.vue +113 -0
  116. package/MetroWidgetDemos/SpatialNav/TabContent/TabContent.vue +185 -0
  117. package/MetroWidgetDemos/SpatialNav/TripleSection/TripleSection.vue +69 -0
  118. package/MetroWidgetDemos/SpatialNav/TripleSection/WidgetItem.vue +100 -0
  119. package/MetroWidgetDemos/SpatialNav/TvSection/List.vue +75 -0
  120. package/MetroWidgetDemos/SpatialNav/TvSection/TvSection.vue +91 -0
  121. package/MetroWidgetDemos/basic2/App.vue +407 -0
  122. package/MetroWidgetDemos/basic2/Item.vue +68 -0
  123. package/MetroWidgetDemos/direction/App.vue +22 -0
  124. package/MetroWidgetDemos/gazeFocusDiff/App.vue +126 -0
  125. package/MetroWidgetDemos/gazeFocusDiff/Item.vue +87 -0
  126. package/MetroWidgetDemos/minimalUsage/App.vue +66 -0
  127. package/MetroWidgetDemos/minimalUsage/Item.vue +54 -0
  128. package/MetroWidgetDemos/ninePatchFocusPage/App.vue +23 -7
  129. package/MetroWidgetDemos/ninePatchFocusPage/Item.vue +7 -5
  130. package/MetroWidgetDemos/ninePatchFocusPage/focusConstants.js +2 -0
  131. package/MetroWidgetDemos/routeList.js +216 -12
  132. package/MetroWidgetDemos/slideSetting/App.vue +288 -99
  133. package/MetroWidgetDemos/zIndex/App.vue +117 -0
  134. package/MetroWidgetDemos/zIndex/Item.vue +61 -0
  135. package/NinePatchTester/App.vue +24 -31
  136. package/PreDecode/App.vue +140 -0
  137. package/ReactiveTest/App.vue +115 -0
  138. package/ReactiveTest/Item.vue +92 -0
  139. package/ReactiveTest/assets/imageList.js +245 -0
  140. package/ReactiveTest/component/TestSmartDiv.vue +50 -0
  141. package/ReactiveTest/component/TestSmartDivSrcList.vue +74 -0
  142. package/ReactiveTest/component/TestSmartImage.vue +46 -0
  143. package/ReactiveTest/component/TestSmartImageSrcList.vue +90 -0
  144. package/ReactiveTest/component/TestSmartImageStyle.vue +41 -0
  145. package/ReactiveTest/data.js +49 -0
  146. package/ScreenToBlob/App.vue +250 -0
  147. package/ScrollBoxTest/App.vue +52 -28
  148. package/ScrollBoxTest/ClipBar.vue +64 -2
  149. package/ScrollBoxTest/NinePatchBar.vue +64 -2
  150. package/ScrollBoxTest/SizeDivBar.vue +64 -2
  151. package/SecTorTest/App.vue +9 -3
  152. package/SpringFestival/SpringFestivalScene/FreeMoveBuilder.js +3 -3
  153. package/SyncDecode/App.vue +137 -0
  154. package/TextSizeLimit/App.vue +211 -0
  155. package/TextureAnimation/App3.vue +11 -1
  156. package/TouchWidget/App.vue +90 -5
  157. package/TouchWidget/WidgetItem.vue +1 -0
  158. package/TransitPage/App.vue +2 -0
  159. package/assets/logo.png +0 -0
  160. package/package.json +1 -1
  161. package/DemoForOperator/BookFlip/BookFlip/FlipPage.vue +0 -179
  162. package/DemoForOperator/BookFlip/BookFlip/FlippingBook.vue +0 -310
  163. package/DemoForOperator/BookFlip/BookFlip/flip.glsl +0 -135
  164. package/DemoForOperator/Genie/geniePakcer/Genie.vue +0 -741
  165. package/DemoForOperator/LongChatBox/TextManager.ts +0 -147
  166. package/DemoForOperator/LongChatBox/VirtualList.vue +0 -298
  167. package/DemoForOperator/LongChatBox/utile.js +0 -331
  168. package/DivMetroPerformance/App.vue +0 -157
  169. package/DivMetroPerformance/Item.vue +0 -58
  170. package/DivMetroPerformance/assets/bg.jpg +0 -0
  171. package/DivMetroPerformance/assets/coupon_content.png +0 -0
  172. package/DivMetroPerformance/assets/coupon_left.png +0 -0
  173. package/DivMetroPerformance/assets/coupon_mid.png +0 -0
  174. package/DivMetroPerformance/assets/coupon_right.png +0 -0
  175. package/DivMetroPerformance/assets/focus_border.png +0 -0
  176. package/DivMetroPerformance/assets/holder_logo.png +0 -0
  177. package/DivMetroPerformance/assets/jrbm.png +0 -0
  178. package/DivMetroPerformance/assets/line_left.png +0 -0
  179. package/DivMetroPerformance/assets/line_mid.png +0 -0
  180. package/DivMetroPerformance/assets/line_right.png +0 -0
  181. package/DivMetroPerformance/assets/loading.png +0 -0
  182. package/DivMetroPerformance/assets/logo.png +0 -0
  183. package/DivMetroPerformance/assets/mcjx.png +0 -0
  184. package/DivMetroPerformance/assets/tao.png +0 -0
  185. package/DivMetroPerformance/assets/tmall.png +0 -0
  186. package/DivMetroPerformance/border.png +0 -0
  187. package/DivMetroPerformance/components/ContentItem.vue +0 -384
  188. package/DivMetroPerformance/components/MyTab.vue +0 -129
  189. package/DivMetroPerformance/data.js +0 -124
  190. package/DivMetroPerformance/utils/GridItem.vue +0 -28
  191. package/DivMetroPerformance/utils/GridPlate.vue +0 -85
  192. package/MediaDemo/App.vue +0 -127
  193. package/MediaDemo/assets/audio-poster.png +0 -0
  194. package/MediaDemo/components/Button.vue +0 -69
  195. package/MediaDemo/components/Controllor.vue +0 -286
  196. package/MediaDemo/components/StatusBar.vue +0 -100
  197. package/MediaDemo/components/frames/AudioFrame.vue +0 -39
  198. package/MediaDemo/components/frames/AudioPoster.vue +0 -48
  199. package/MediaDemo/components/frames/MediaFrame.vue +0 -153
  200. package/MediaDemo/components/frames/VideoFrame.vue +0 -39
  201. package/MetroWidgetDemos/TripleWidget/App.vue +0 -87
  202. package/MetroWidgetDemos/TripleWidget/SWidgetItem.vue +0 -99
  203. package/Parkour/App.vue +0 -13
  204. package/Parkour/Common/Context.js +0 -21
  205. package/Parkour/Common/MatchmanInfo.js +0 -62
  206. package/Parkour/Common/Random.js +0 -61
  207. package/Parkour/Common/Sound.js +0 -50
  208. package/Parkour/appConfig/HOW_TO_CONFIG.md +0 -20
  209. package/Parkour/appConfig/app.config.mjs +0 -5
  210. package/Parkour/appConfig/app_sign_private_key_sample.crt +0 -28
  211. package/Parkour/appConfig/app_sign_public_key_sample.pem +0 -9
  212. package/Parkour/appConfig/jsview.config.mjs +0 -39
  213. package/Parkour/assets/Bgimages/bg1.png +0 -0
  214. package/Parkour/assets/Bgimages/bg2.png +0 -0
  215. package/Parkour/assets/Bgimages/bg3.png +0 -0
  216. package/Parkour/assets/Bgimages/bg4.png +0 -0
  217. package/Parkour/assets/Bgimages/bg5.png +0 -0
  218. package/Parkour/assets/audio/jump.mp3 +0 -0
  219. package/Parkour/assets/audio/lose.mp3 +0 -0
  220. package/Parkour/assets/role_skin1/fail.json +0 -44
  221. package/Parkour/assets/role_skin1/fail.png +0 -0
  222. package/Parkour/assets/role_skin1/jump_down.json +0 -20
  223. package/Parkour/assets/role_skin1/jump_down.png +0 -0
  224. package/Parkour/assets/role_skin1/jump_up.json +0 -44
  225. package/Parkour/assets/role_skin1/jump_up.png +0 -0
  226. package/Parkour/assets/role_skin1/roll.json +0 -44
  227. package/Parkour/assets/role_skin1/roll.png +0 -0
  228. package/Parkour/assets/role_skin1/run.json +0 -52
  229. package/Parkour/assets/role_skin1/run.png +0 -0
  230. package/Parkour/components/Backdrop.vue +0 -61
  231. package/Parkour/components/GameSence.vue +0 -602
  232. package/Parkour/components/Matchman.vue +0 -85
  233. package/TextureAnimation/utils/FrameCanvasStore.ts +0 -68
  234. package/TextureAnimation/utils/RotateFrame.vue +0 -146
  235. package/TextureAnimation/utils/circleHaloMask.png +0 -0
  236. package/ThrowMoveDemo/AccelerateDemo.vue +0 -85
  237. package/ThrowMoveDemo/App.vue +0 -104
  238. package/ThrowMoveDemo/LRParabolicDemo.vue +0 -101
  239. package/ThrowMoveDemo/TargetDemo.vue +0 -87
  240. package/ThrowMoveDemo/UDParabolicDemo.vue +0 -92
  241. /package/{AnimPicture/assets → assets}/animated_webp.webp +0 -0
  242. /package/{AnimPicture/assets → assets}/ball_3.webp +0 -0
  243. /package/{AnimPicture/assets → assets}/girl_run.gif +0 -0
  244. /package/{AnimPicture/assets → assets}/quan.webp +0 -0
@@ -1,74 +1,111 @@
1
+ <template>
2
+ <div
3
+ :style="{
4
+ top: -markdownTop,
5
+ width: visibleRect.width,
6
+ height: markdownHeight,
7
+ backgroundColor: backgroundColor,
8
+ }"
9
+ ></div>
10
+ <Markdown
11
+ ref="markdownRef"
12
+ :visibleRect="{ width: visibleRect.width, height: visibleRect.height }"
13
+ :content="''"
14
+ :enableLatex="false"
15
+ @sizechange="onSizeChange"
16
+ />
17
+ </template>
18
+
1
19
  <script setup>
2
- import { TextManager } from "./TextManager";
3
- import { ref, onBeforeUnmount, onMounted, shallowRef } from "vue";
4
- import { JsvTextBox } from "@shijiu/jsview-vue";
20
+ import { ref, shallowRef, onBeforeUnmount, onMounted } from "vue";
21
+ import { Markdown } from "@shijiu/jsview-vue-plus";
5
22
 
6
- import VirtualList from "./VirtualList.vue";
23
+ const text = ref("")
7
24
 
8
25
  const emit = defineEmits(["sizechange"]);
9
26
  const props = defineProps({
10
- data: Array,
27
+ messages: Array,
11
28
  onDone: Function,
12
29
  left: Number,
13
30
  visibleRect: Object,
31
+ backgroundColor: String,
14
32
  });
15
33
 
16
- const listRef = shallowRef();
34
+ //fake data generator
35
+ const generateList = props.messages;
17
36
 
18
- function onAddLine(line) {
19
- listRef.value.addItem(line.lineNumber, line);
37
+ function* testMessageGenerator() {
38
+ for (const chunk of generateList) {
39
+ yield chunk;
40
+ }
20
41
  }
42
+ const messageGen = testMessageGenerator();
21
43
 
22
- function onLineUpdate(line) {}
44
+ const addText = () => {
45
+ const result = messageGen.next();
46
+ if (result.done) {
47
+ console.log("所有文本已写入完成");
48
+ markdownRef.value.writeDone();
49
+ props.onDone?.();
50
+ return false;
51
+ }
23
52
 
24
- function onLineUpdateDone(line) {
25
- listRef.value.itemUpdateDone(line.lineNumber);
26
- }
53
+ text.value += result.value;
54
+
55
+ const chunk =
56
+ typeof result.value === "string"
57
+ ? result.value
58
+ : String(result.value ?? "");
59
+ markdownRef.value.write(chunk);
60
+ return true;
61
+ };
27
62
 
28
- const textManager = new TextManager(
29
- props.visibleRect.width,
30
- onAddLine,
31
- onLineUpdate,
32
- onLineUpdateDone
33
- );
34
- const textRef = ref("");
35
- let intervalHandel = -1;
36
- function start() {
37
- let currentIndex = 0;
38
- intervalHandel = setInterval(() => {
39
- if (currentIndex < props.data.length) {
40
- textManager.addText(props.data[currentIndex], textRef);
41
- currentIndex++;
42
- } else {
43
- clearInterval(intervalHandel);
44
- textManager.stopUpdateLineManually();
45
- props.onDone?.();
63
+ let timeoutHandle = -1;
64
+ const startTestMessage = () => {
65
+ const tick = () => {
66
+ if (!addText()) {
67
+ timeoutHandle = -1;
68
+ return;
46
69
  }
47
- }, 50);
48
- }
70
+ timeoutHandle = setTimeout(() => {
71
+ tick();
72
+ }, 80);
73
+ };
74
+ tick();
75
+ };
76
+
77
+ const stopTestMessage = () => {
78
+ clearTimeout(timeoutHandle);
79
+ timeoutHandle = -1;
80
+ };
81
+
82
+ const markdownRef = shallowRef();
83
+ const markdownHeight = ref(0);
84
+ const markdownTop = ref(0);
85
+ let autoSlide = true;
86
+ const onSizeChange = (width, height) => {
87
+ emit("sizechange", height);
88
+ markdownHeight.value = height;
89
+ };
49
90
 
50
91
  onBeforeUnmount(() => {
51
- clearInterval(intervalHandel);
92
+ stopTestMessage();
52
93
  });
53
94
 
54
95
  onMounted(() => {
55
- start();
96
+ startTestMessage();
56
97
  });
57
98
 
58
99
  function show() {
59
- listRef.value?.show();
100
+ markdownRef.value?.show();
60
101
  }
61
102
 
62
103
  function hide() {
63
- listRef.value?.hide();
104
+ markdownRef.value?.hide();
64
105
  }
65
106
 
66
107
  function setVisibleRectStart(distance) {
67
- listRef.value?.setVisibleRectStart(distance);
68
- }
69
-
70
- function onSizeChange(height) {
71
- emit("sizechange", height);
108
+ markdownRef.value?.setVisibleStart(distance);
72
109
  }
73
110
 
74
111
  defineExpose({
@@ -77,28 +114,3 @@ defineExpose({
77
114
  setVisibleRectStart,
78
115
  });
79
116
  </script>
80
-
81
- <template>
82
- <virtual-list
83
- :layout="{
84
- width: visibleRect.width,
85
- height: visibleRect.height,
86
- left: left,
87
- }"
88
- ref="listRef"
89
- @sizechange="onSizeChange"
90
- >
91
- <template #="{ data }">
92
- <jsv-text-box
93
- :enableLatex="true"
94
- syncDraw="sync"
95
- :style="{
96
- width: visibleRect.width,
97
- ...data.style,
98
- }"
99
- >
100
- {{ data.lineNumber + ":" + String(data.text) }}
101
- </jsv-text-box>
102
- </template>
103
- </virtual-list>
104
- </template>
@@ -1,6 +1,10 @@
1
1
  <script setup>
2
2
  import { ref, reactive } from "vue";
3
- import { testMessage, data1 } from "./testData.js";
3
+ import {
4
+ data1,
5
+ data2,
6
+ data3,
7
+ } from "./testData.js";
4
8
  import Bubble from "./Bubble.vue";
5
9
 
6
10
  //可视范围的位置
@@ -10,17 +14,30 @@ let visibleStart = ref(0);
10
14
  let messageList = [];
11
15
  let renderList = reactive([]);
12
16
  let totalHeight = 0;
17
+ let generating = false;
13
18
 
14
- function createMessageItem(key, data, left, top, width, height) {
19
+ function createMessageItem(
20
+ key,
21
+ data,
22
+ left,
23
+ top,
24
+ width,
25
+ height,
26
+ backgroundColor
27
+ ) {
15
28
  let item = {
16
29
  key,
17
30
  data,
18
31
  left: ref(left),
19
32
  top: ref(top),
20
- width: ref(width),
21
- height: ref(height),
33
+ width: ref(width ?? 0),
34
+ height: ref(height ?? 0),
22
35
  ref: null,
23
- onDone() {},
36
+ backgroundColor: backgroundColor,
37
+ onDone() {
38
+ generating = false;
39
+ console.log("onDone");
40
+ },
24
41
  onSizeChange(height) {
25
42
  this.height.value = height;
26
43
  arrangeLayout();
@@ -53,19 +70,22 @@ function arrangeLayout() {
53
70
  totalHeight += item.height.value;
54
71
  }
55
72
  }
73
+ const viewWidth = 400;
74
+ const viewHeight = 600;
56
75
 
57
76
  function updateRenderList() {
58
77
  renderList.length = 0;
59
78
  if (autoSlideMode) {
60
79
  //自动保持一行模式, 根据总高度和可视范围的高度, 计算出可视范围的开始位置
61
- visibleStart.value = totalHeight > 600 ? totalHeight - 600 : 0;
80
+ visibleStart.value =
81
+ totalHeight > viewHeight ? totalHeight - viewHeight : 0;
62
82
  }
63
83
  for (let i = 0; i < messageList.length; i++) {
64
84
  const item = messageList[i];
65
85
  renderList.push(item);
66
86
  if (
67
87
  item.top.value + item.height.value >= visibleStart.value &&
68
- item.top.value <= visibleStart.value + 600
88
+ item.top.value <= visibleStart.value + viewHeight
69
89
  ) {
70
90
  //可见的泡泡, 显示
71
91
  item.show();
@@ -78,35 +98,25 @@ function updateRenderList() {
78
98
  }
79
99
  }
80
100
 
81
- let count = 0;
82
- function addData() {
83
- let item;
101
+ const messages = [data1, data2, data3];
102
+ function addData(message) {
84
103
  const lastItem = messageList[messageList.length - 1];
85
- if (count++ % 3 == 1) {
86
- item = createMessageItem(
87
- count,
88
- testMessage,
89
- 200,
90
- lastItem ? lastItem.top.value + lastItem.height.value : 0,
91
- 800,
92
- 100
93
- );
94
- } else {
95
- item = createMessageItem(
96
- count,
97
- data1,
98
- 0,
99
- lastItem ? lastItem.top.value + lastItem.height.value : 0,
100
- 800,
101
- 100
102
- );
103
- }
104
+ const item = createMessageItem(
105
+ messageList.length,
106
+ message,
107
+ messageList.length % 2 == 0 ? 0 : 400,
108
+ lastItem ? lastItem.top.value + lastItem.height.value : 0,
109
+ 800,
110
+ 100,
111
+ messageList.length % 2 ? "#339933" : "#993333"
112
+ );
104
113
  messageList.push(item);
105
114
  updateRenderList();
115
+ generating = true;
106
116
  }
107
117
 
108
118
  function normalizeSlidePos(pos) {
109
- return Math.min(Math.max(pos, 0), totalHeight - 600);
119
+ return Math.max(Math.min(pos, totalHeight - viewHeight), 0);
110
120
  }
111
121
 
112
122
  let autoSlideMode = true;
@@ -119,15 +129,27 @@ const onKeyDown = (ev) => {
119
129
  return true;
120
130
  case 40:
121
131
  visibleStart.value = normalizeSlidePos(visibleStart.value + 100);
122
- if (visibleStart.value != totalHeight - 600) {
132
+ if (visibleStart.value != totalHeight - viewHeight) {
123
133
  autoSlideMode = false;
124
134
  } else {
125
135
  autoSlideMode = true;
126
136
  }
127
137
  updateRenderList();
128
138
  return true;
129
- case 13:
130
- addData();
139
+ case 49:
140
+ if (!generating) {
141
+ addData(messages[0]);
142
+ }
143
+ return true;
144
+ case 50:
145
+ if (!generating) {
146
+ addData(messages[1]);
147
+ }
148
+ return true;
149
+ case 51:
150
+ if (!generating) {
151
+ addData(messages[2]);
152
+ }
131
153
  return true;
132
154
  }
133
155
  return false;
@@ -157,12 +179,13 @@ const onKeyDown = (ev) => {
157
179
  }"
158
180
  >
159
181
  <bubble
160
- :data="item.data"
182
+ :messages="item.data"
161
183
  :onDone="item.onDone"
162
184
  :left="0"
185
+ :backgroundColor="item.backgroundColor"
163
186
  :visibleRect="{
164
- width: 800,
165
- height: 600,
187
+ width: viewWidth,
188
+ height: viewHeight,
166
189
  }"
167
190
  @sizechange="item.onSizeChange"
168
191
  :ref="item.onRef"
@@ -170,4 +193,12 @@ const onKeyDown = (ev) => {
170
193
  </div>
171
194
  </template>
172
195
  </div>
196
+ <div :style="{
197
+ top: 10,
198
+ left: 900,
199
+ width: 250,
200
+ height: 300,
201
+ color: '#fff',
202
+ fontSize: 20,
203
+ }">{{ "1键: 长文本\n2键: 中文本\n3键: 短文本" }}</div>
173
204
  </template>