@shijiu/jsview-vue 0.9.246 → 0.9.254

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 (173) hide show
  1. package/dom/bin/package.json +11 -11
  2. package/dom/browser-root-style.css +21 -21
  3. package/loader/jsview-main.js +41 -41
  4. package/loader/jsview.config.default.js +37 -37
  5. package/loader/jsview.default.config.js +37 -37
  6. package/package.json +6 -6
  7. package/patches/node_modules/@babel/preset-env/lib/available-plugins.js +218 -218
  8. package/patches/node_modules/@vue/cli-plugin-typescript/index.js +100 -100
  9. package/patches/node_modules/@vue/cli-service/lib/commands/serve.js +395 -395
  10. package/patches/node_modules/@vue/cli-service/lib/config/app.js +272 -272
  11. package/patches/node_modules/@vue/cli-service/lib/config/assets.js +70 -70
  12. package/patches/node_modules/@vue/cli-service/lib/config/base.js +212 -212
  13. package/patches/node_modules/postcss-js/objectifier.js +90 -90
  14. package/patches/node_modules/vue-loader/dist/resolveScript.js +70 -70
  15. package/samples/AdvanceMetroWidget/App.vue +122 -122
  16. package/samples/AdvanceMetroWidget/Frame.vue +100 -100
  17. package/samples/AdvanceMetroWidget/Item.vue +57 -57
  18. package/samples/AdvanceMetroWidget/data.js +136 -136
  19. package/samples/AnimPicture/App.vue +223 -223
  20. package/samples/Basic/App.vue +128 -128
  21. package/samples/Basic/components/TitleBar.vue +28 -28
  22. package/samples/Basic/components/anim/AnimGroup.vue +67 -67
  23. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +101 -101
  24. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +52 -52
  25. package/samples/Basic/components/anim/AnimTransition.vue +116 -116
  26. package/samples/Basic/components/div/DivBackground.vue +14 -14
  27. package/samples/Basic/components/div/DivClip.vue +80 -80
  28. package/samples/Basic/components/div/DivCssScoped.vue +26 -26
  29. package/samples/Basic/components/div/DivCssVar.vue +49 -49
  30. package/samples/Basic/components/div/DivGroup1.vue +32 -32
  31. package/samples/Basic/components/div/DivGroup2.vue +40 -40
  32. package/samples/Basic/components/div/DivLayout.vue +11 -11
  33. package/samples/Basic/components/div/DivRadius.vue +46 -46
  34. package/samples/Basic/components/text/TextAlign.vue +47 -47
  35. package/samples/Basic/components/text/TextFontStyle.vue +57 -57
  36. package/samples/Basic/components/text/TextGroup.vue +31 -31
  37. package/samples/Basic/components/text/TextOverflow.vue +77 -77
  38. package/samples/BasicFocusControl/App.vue +124 -124
  39. package/samples/BasicFocusControl/components/BaseBlock.vue +50 -50
  40. package/samples/BasicFocusControl/components/MainArea.vue +97 -97
  41. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +20 -20
  42. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +29 -29
  43. package/samples/BasicFocusControl/components/SideBar.vue +72 -72
  44. package/samples/BasicFocusControl/components/SideBarBlock.vue +29 -29
  45. package/samples/ClassNameDemo/App.vue +119 -119
  46. package/samples/ClassNameDemo/components/ContentItem.vue +252 -252
  47. package/samples/ClassNameDemo/components/LoadingView.vue +43 -43
  48. package/samples/ClassNameDemo/components/TitleView.vue +24 -24
  49. package/samples/ClassNameDemo/data.js +24 -24
  50. package/samples/ColorSpace/App.vue +134 -134
  51. package/samples/DemoHomepage/App.vue +31 -31
  52. package/samples/DemoHomepage/components/BodyFrame.vue +81 -81
  53. package/samples/DemoHomepage/components/Dialog.vue +93 -93
  54. package/samples/DemoHomepage/components/Item.vue +76 -76
  55. package/samples/DemoHomepage/components/TabFrame.vue +86 -86
  56. package/samples/DemoHomepage/router.js +132 -132
  57. package/samples/DemoHomepage/views/Homepage.vue +186 -186
  58. package/samples/FlipCard/App.vue +80 -80
  59. package/samples/FlipCard/FlipCard.vue +123 -123
  60. package/samples/FlipCard/data.js +12 -12
  61. package/samples/FlowMultiWidget/App.vue +90 -90
  62. package/samples/FlowMultiWidget/components/Block.vue +106 -106
  63. package/samples/FlowMultiWidget/components/FlowPage.vue +59 -59
  64. package/samples/FlowMultiWidget/components/Item.vue +102 -102
  65. package/samples/FlowMultiWidget/components/MenuItem.vue +71 -71
  66. package/samples/FlowMultiWidget/components/MyMenu.vue +89 -89
  67. package/samples/FlowMultiWidget/data.js +446 -446
  68. package/samples/HashHistory/App.vue +124 -124
  69. package/samples/HashHistory/components/HorizontalButtonList.vue +113 -113
  70. package/samples/HashHistory/components/Item.vue +73 -73
  71. package/samples/HashHistory/router.js +29 -29
  72. package/samples/HashHistory/views/BasePage.vue +18 -18
  73. package/samples/HashHistory/views/MainPage.vue +67 -67
  74. package/samples/HashHistory/views/SubPage.vue +78 -78
  75. package/samples/HashHistory/views/SubPageFirst.vue +9 -9
  76. package/samples/HashHistory/views/SubPageSecond.vue +9 -9
  77. package/samples/LongImage/App.vue +96 -96
  78. package/samples/LongImage/Button.vue +153 -153
  79. package/samples/LongImage/LongImageScroll.vue +126 -126
  80. package/samples/LongImage/Scroll.vue +15 -15
  81. package/samples/LongText/App.vue +111 -111
  82. package/samples/LongText/Button.vue +153 -153
  83. package/samples/LongText/LongTextScroll.vue +224 -224
  84. package/samples/LongText/Scroll.vue +15 -15
  85. package/samples/Preload/App.vue +145 -145
  86. package/samples/Preload/data.js +22 -22
  87. package/samples/Preload/preloadItem.vue +21 -21
  88. package/samples/QrcodeDemo/App.vue +72 -72
  89. package/samples/SimpleWidgetDemo/App.vue +203 -203
  90. package/samples/SimpleWidgetDemo/Item.vue +82 -82
  91. package/samples/SimpleWidgetDemo/components/ContentItem.vue +411 -411
  92. package/samples/SimpleWidgetDemo/components/MyTab.vue +116 -116
  93. package/samples/SimpleWidgetDemo/data.js +110 -110
  94. package/samples/SprayView/App.vue +269 -269
  95. package/samples/SpriteImage/App.vue +174 -174
  96. package/samples/SpriteImage/images/egg_break.json +116 -116
  97. package/samples/TextBox/App.vue +178 -178
  98. package/samples/TextBox/RenderCenter.vue +108 -108
  99. package/samples/TextBox/RenderLeft.vue +108 -108
  100. package/samples/TextBox/RenderOneLine.vue +119 -119
  101. package/samples/TextBox/RenderRight.vue +106 -106
  102. package/samples/TextShadowDemo/App.vue +97 -97
  103. package/samples/TextureSize/App.vue +141 -141
  104. package/samples/ThrowMoveDemo/AccelerateDemo.vue +117 -117
  105. package/samples/ThrowMoveDemo/App.vue +113 -113
  106. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +115 -115
  107. package/samples/ThrowMoveDemo/TargetDemo.vue +116 -116
  108. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +121 -121
  109. package/samples/TransitPage/App.vue +40 -40
  110. package/samples/VideoDemo/App.vue +137 -137
  111. package/samples/VideoDemo/components/Button.vue +68 -68
  112. package/samples/VideoDemo/components/Controllor.vue +195 -195
  113. package/samples/VideoDemo/components/VideoFrame.vue +152 -152
  114. package/scripts/common.js +115 -92
  115. package/scripts/deploy-fast-pack.js +17 -0
  116. package/scripts/deploy-fast-publish.js +44 -0
  117. package/scripts/{git-commit-empty.js → deploy-git-commit-empty.js} +21 -21
  118. package/scripts/{pre-pack.js → deploy-prepare.js} +56 -39
  119. package/scripts/{install-local-packages.js → jsview-install-local-packages.js} +73 -73
  120. package/scripts/{post-build.js → jsview-post-build.js} +127 -127
  121. package/scripts/{post-install.js → jsview-post-install.js} +78 -78
  122. package/scripts/{run-android.js → jsview-run-android.js} +64 -64
  123. package/scripts/make-js.sh +181 -181
  124. package/utils/JsViewEngineWidget/bin/index.js +1 -1
  125. package/utils/JsViewEngineWidget/bin/package.json +11 -11
  126. package/utils/JsViewVueTools/JsvHashHistory.js +111 -111
  127. package/utils/JsViewVueTools/JsvRuntimeBridge.js +417 -417
  128. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +80 -80
  129. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +147 -147
  130. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserSpray.vue +54 -54
  131. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/ApicDataBase.js +28 -28
  132. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/BrowserApic.vue +123 -123
  133. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/GifData.js +83 -83
  134. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/LoopToolBase.js +25 -25
  135. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/NormalLoopTool.js +61 -61
  136. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/PartLoopTool.js +119 -119
  137. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/Viewer.js +106 -106
  138. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/WebpData.js +141 -141
  139. package/utils/JsViewVueWidget/BrowserDebugWidget/WidgetLoader.js +20 -20
  140. package/utils/JsViewVueWidget/JsvActorMove/ActorControlBase.js +204 -204
  141. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +63 -63
  142. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMoveControl.js +426 -426
  143. package/utils/JsViewVueWidget/JsvActorMove/index.js +12 -12
  144. package/utils/JsViewVueWidget/JsvApic/JsvApic.vue +178 -178
  145. package/utils/JsViewVueWidget/JsvApic/index.js +17 -17
  146. package/utils/JsViewVueWidget/JsvMarquee.vue +196 -196
  147. package/utils/JsViewVueWidget/JsvNinePatch.vue +76 -76
  148. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +350 -350
  149. package/utils/JsViewVueWidget/JsvPreload/index.js +21 -21
  150. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +140 -140
  151. package/utils/JsViewVueWidget/JsvQrcode/index.js +18 -18
  152. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +139 -139
  153. package/utils/JsViewVueWidget/JsvSpray/index.js +14 -14
  154. package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +447 -447
  155. package/utils/JsViewVueWidget/JsvSpriteAnim/SpriteController.js +56 -56
  156. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +6 -6
  157. package/utils/JsViewVueWidget/JsvSwiper/Indicator.vue +34 -34
  158. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +494 -494
  159. package/utils/JsViewVueWidget/JsvSwiper/index.js +9 -9
  160. package/utils/JsViewVueWidget/JsvSwiper3D/Indicator.vue +34 -34
  161. package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +403 -403
  162. package/utils/JsViewVueWidget/JsvSwiper3D/index.js +9 -9
  163. package/utils/JsViewVueWidget/JsvTextBox.vue +110 -110
  164. package/utils/JsViewVueWidget/JsvVideo.vue +35 -35
  165. package/vetur.config.js +5 -5
  166. package/.gitmodules +0 -6
  167. package/README.md +0 -15
  168. package/doc/IMPORT_CHANGE_LOG.txt +0 -3
  169. package/doc/about-project-postinstall.md +0 -0
  170. package/doc/git_commit.md +0 -15
  171. package/doc/test_version_up.txt +0 -1
  172. package/scripts/update-version.js +0 -32
  173. package/shijiu-jsview-vue-0.9.246.tgz +0 -0
@@ -1,495 +1,495 @@
1
- <!--
2
- * @Author: ChenChanghua
3
- * @Date: 2021-11-23 09:42:26
4
- * @LastEditors: ChenChanghua
5
- * @LastEditTime: 2021-12-02 15:47:26
6
- * @Description: file content
7
- -->
8
- <script>
9
- import { Forge } from "../../../dom/jsv-forge-define";
10
- import JsvActorMove, {
11
- JsvActorMoveControl,
12
- } from "jsview/utils/JsViewVueWidget/JsvActorMove";
13
- import Indicator from "./Indicator.vue";
14
- import { ref } from "vue";
15
-
16
- const VIEW_NUM = 3;
17
-
18
- function modToRange(value, mod, start = 0) {
19
- let m = value % mod;
20
- if (m < start) {
21
- m += mod;
22
- } else if (m >= start + mod) {
23
- m -= mod;
24
- }
25
- return m;
26
- }
27
-
28
- export default {
29
- components: { Indicator, JsvActorMove },
30
- props: {
31
- showIndicator: {
32
- type: Boolean,
33
- default: true,
34
- },
35
- dotSize: {
36
- type: Number,
37
- default: 10,
38
- },
39
- dotGap: {
40
- type: Number,
41
- default: 10,
42
- },
43
- indicatorPos: {
44
- type: Number,
45
- default: -1,
46
- },
47
- indicatorAlign: {
48
- type: String,
49
- default: "middle",
50
- },
51
- totalFrame: {
52
- type: Number,
53
- require: true,
54
- },
55
- firstFrame: {
56
- type: Number,
57
- default: 0,
58
- },
59
- layoutInfo: {
60
- type: Object,
61
- require: true,
62
- },
63
- onClick: {
64
- type: Function,
65
- },
66
- onChange: {
67
- type: Function,
68
- },
69
- autoplayInterval: {
70
- type: Number,
71
- default: 5000,
72
- },
73
- animation: {
74
- type: Object,
75
- default() {
76
- return {
77
- duration: 200,
78
- easing: "linear",
79
- };
80
- },
81
- },
82
- vertical: {
83
- type: Boolean,
84
- default: false,
85
- },
86
- name: {
87
- type: String,
88
- },
89
- onFocus: {
90
- type: Function,
91
- },
92
- onBlur: {
93
- type: Function,
94
- },
95
- swipeType: {
96
- type: String,
97
- default: "translate",
98
- },
99
- smoothTranslate: {
100
- type: Boolean,
101
- default: false,
102
- },
103
- },
104
- computed: {
105
- indicatorLayout() {
106
- let indicatorSize =
107
- this.totalFrame * (this.dotSize + this.dotGap) - this.dotGap;
108
- if (this.vertical) {
109
- let top;
110
- if (this.indicatorAlign === "start") {
111
- top = this.dotGap;
112
- } else if (this.indicatorAlign === "end") {
113
- top = this.layoutInfo.height - indicatorSize - this.dotGap;
114
- } else {
115
- top = (this.layoutInfo.height - indicatorSize) / 2;
116
- }
117
- return {
118
- left:
119
- this.indicatorPos < 0
120
- ? this.layoutInfo.width * 0.8
121
- : this.indicatorPos,
122
- top,
123
- zIndex: 1,
124
- };
125
- } else {
126
- let left;
127
- if (this.indicatorAlign === "start") {
128
- left = this.dotGap;
129
- } else if (this.indicatorAlign === "end") {
130
- left = this.layoutInfo.width - indicatorSize - this.dotGap;
131
- } else {
132
- left = (this.layoutInfo.width - indicatorSize) / 2;
133
- }
134
- return {
135
- left,
136
- top:
137
- this.indicatorPos < 0
138
- ? this.layoutInfo.height * 0.8
139
- : this.indicatorPos,
140
- zIndex: 1,
141
- };
142
- }
143
- },
144
- indicatorDotSize() {
145
- return this.dotSize + this.dotGap;
146
- },
147
- currentDataIndex() {
148
- return modToRange(this.firstFrame + this.offset, this.totalFrame);
149
- },
150
- currentViewIndex() {
151
- return modToRange(this.offset + 1, VIEW_NUM);
152
- },
153
- viewInfoList() {
154
- let styleList = [
155
- {
156
- top: 0,
157
- left: 0,
158
- width: this.layoutInfo.width,
159
- height: this.layoutInfo.height,
160
- },
161
- {
162
- top: 0,
163
- left: 0,
164
- width: this.layoutInfo.width,
165
- height: this.layoutInfo.height,
166
- },
167
- {
168
- top: 0,
169
- left: 0,
170
- width: this.layoutInfo.width,
171
- height: this.layoutInfo.height,
172
- },
173
- ];
174
- switch (this.swipeType) {
175
- case "translate":
176
- styleList[0].top = this.vertical ? -this.layoutInfo.height : 0;
177
- styleList[0].left = this.vertical ? 0 : -this.layoutInfo.width;
178
-
179
- styleList[2].top = this.vertical ? this.layoutInfo.height : 0;
180
- styleList[2].left = this.vertical ? 0 : this.layoutInfo.width;
181
- break;
182
- case "opacity":
183
- styleList[0].opaticy = 0;
184
- styleList[1].opaticy = 1;
185
- styleList[2].opaticy = 0;
186
- break;
187
- default:
188
- break;
189
- }
190
-
191
- let viewList = [];
192
- for (let i = 0; i < VIEW_NUM; i++) {
193
- viewList.push({
194
- dataIndex: modToRange(
195
- this.currentDataIndex +
196
- modToRange(i - this.currentViewIndex, VIEW_NUM, -1),
197
- this.totalFrame
198
- ),
199
- style: styleList[modToRange(i - this.offset, VIEW_NUM)],
200
- });
201
- }
202
- return viewList;
203
- },
204
- },
205
- setup(props) {
206
- console.log("setup");
207
- let controllerList = new Array(VIEW_NUM);
208
- if (props.smoothTranslate) {
209
- for (let i = 0; i < controllerList.length; i++) {
210
- controllerList[i] = new JsvActorMoveControl();
211
- }
212
- }
213
- let preOffset = -1;
214
- let offset = ref(0);
215
- let focused = ref(false);
216
- let timeoutHandler = -1;
217
- return {
218
- preOffset,
219
- offset,
220
- focused,
221
- timeoutHandler,
222
- controllerList,
223
- };
224
- },
225
- watch: {
226
- offset(newValue) {
227
- this.onChange?.(modToRange(this.firstFrame + newValue, this.totalFrame));
228
- },
229
- },
230
- methods: {
231
- stopAutoplay() {
232
- clearTimeout(this.timeoutHandler);
233
- this.timeoutHandler = -1;
234
- },
235
- startAutoplay() {
236
- if (this.autoplayInterval > 0) {
237
- if (this.timeoutHandler > 0) {
238
- clearTimeout(this.timeoutHandler);
239
- }
240
- this.timeoutHandler = setTimeout(() => {
241
- this._trigger(1);
242
- }, this.autoplayInterval);
243
- }
244
- },
245
- _onKeyDown(ev) {
246
- switch (ev.keyCode) {
247
- case 37:
248
- if (!this.vertical) {
249
- this._trigger(-1);
250
- return true;
251
- }
252
- break;
253
- case 38:
254
- if (this.vertical) {
255
- this._trigger(-1);
256
- return true;
257
- }
258
- break;
259
- case 39:
260
- if (!this.vertical) {
261
- this._trigger(1);
262
- return true;
263
- }
264
- break;
265
- case 40:
266
- if (this.vertical) {
267
- this._trigger(1);
268
- return true;
269
- }
270
- break;
271
- case 13:
272
- this.onClick?.();
273
- return true;
274
- default:
275
- break;
276
- }
277
-
278
- return false;
279
- },
280
- _onAnimationEnd() {
281
- if (this.autoplayInterval > 0 && !this.focused) {
282
- this.timeoutHandler = setTimeout(() => {
283
- this._trigger(1);
284
- }, this.autoplayInterval);
285
- }
286
- },
287
- _onFocus() {
288
- this.focused = true;
289
- this.stopAutoplay();
290
- this.onFocus?.();
291
- },
292
- _onBlur() {
293
- this.focused = false;
294
- this.startAutoplay();
295
- this.onBlur?.();
296
- },
297
- _startNormalAnimation() {
298
- let duration = this.animation.duration;
299
- // let easing = this.animation.easing ? this.animation.easing : "linear";
300
-
301
- let curViewAnimation;
302
- let preViewAnimation;
303
- switch (this.swipeType) {
304
- case "translate":
305
- curViewAnimation = new Forge.TranslateAnimation(
306
- this.vertical ? 0 : this.layoutInfo.width,
307
- 0,
308
- this.vertical ? this.layoutInfo.height : 0,
309
- 0,
310
- duration,
311
- null
312
- );
313
- preViewAnimation = new Forge.TranslateAnimation(
314
- this.vertical ? 0 : this.layoutInfo.width,
315
- 0,
316
- this.vertical ? this.layoutInfo.height : 0,
317
- 0,
318
- duration,
319
- null
320
- );
321
- break;
322
- case "opacity":
323
- break;
324
- default:
325
- break;
326
- }
327
- curViewAnimation.SetAnimationListener(
328
- new Forge.AnimationListener(null, this._onAnimationEnd, null)
329
- );
330
- this.$refs["element" + this.currentViewIndex]?.jsvMaskView.StartAnimation(
331
- curViewAnimation
332
- );
333
- this.$refs[
334
- "element" + modToRange(this.currentViewIndex - 1, VIEW_NUM)
335
- ]?.jsvMaskView.StartAnimation(preViewAnimation);
336
- },
337
- _startSmoothTranslateAnimation() {
338
- let curController = this.controllerList[this.currentViewIndex];
339
- let preController =
340
- this.controllerList[modToRange(this.currentViewIndex - 1, VIEW_NUM)];
341
- if (this.vertical) {
342
- let speed = (this.layoutInfo.height / this.animation.duration) * 1000;
343
- curController.jumpTo(0, this.layoutInfo.height);
344
- curController.moveToY(0, speed, this._onAnimationEnd);
345
- preController.jumpTo(0, this.layoutInfo.height);
346
- preController.moveToY(0, speed);
347
- } else {
348
- let speed = (this.layoutInfo.width / this.animation.duration) * 1000;
349
- curController.jumpTo(this.layoutInfo.width, 0);
350
- curController.moveToX(0, speed, this._onAnimationEnd);
351
- preController.jumpTo(this.layoutInfo.width, 0);
352
- preController.moveToX(0, speed);
353
- }
354
- },
355
- _startAnimation() {
356
- if (this.smoothTranslate) {
357
- this._startSmoothTranslateAnimation();
358
- } else {
359
- this._startNormalAnimation();
360
- }
361
- },
362
- _trigger(direction) {
363
- this.preOffset = this.offset;
364
- this.offset += direction;
365
- this._startAnimation();
366
- },
367
- },
368
- mounted() {
369
- if (!this.focused) {
370
- this.startAutoplay();
371
- }
372
- },
373
- beforeUnmount() {
374
- this.stopAutoplay();
375
- },
376
- };
377
- </script>
378
-
379
- <template>
380
- <jsv-focus-block
381
- :name="name"
382
- :onAction="{
383
- onFocus: _onFocus,
384
- onBlur: _onBlur,
385
- onKeyDown: _onKeyDown,
386
- }"
387
- >
388
- <div
389
- :style="{
390
- width: layoutInfo.width,
391
- height: layoutInfo.height,
392
- overflow: 'hidden',
393
- }"
394
- >
395
- <div
396
- :style="{
397
- zIndex: 0,
398
- }"
399
- >
400
- <div v-if="smoothTranslate">
401
- <jsv-actor-move
402
- v-for="(item, index) in viewInfoList"
403
- :key="index"
404
- :style="item.style"
405
- :control="controllerList[index]"
406
- >
407
- <!-- 为了保证slot中的页面刷新。不加这个div slot中的img标签不会更新,vue或者是dom的bug? -->
408
- <div :key="item.dataIndex">
409
- <slot
410
- name="itemView"
411
- :currentIndex="currentDataIndex"
412
- :dataIndex="item.dataIndex"
413
- :focused="focused"
414
- ></slot>
415
- </div>
416
-
417
- <!-- <div
418
- :style="{
419
- width: 50,
420
- height: 50,
421
- top: 200,
422
- fontSize: '30px',
423
- }"
424
- >
425
- {{ index }}
426
- </div> -->
427
- </jsv-actor-move>
428
- </div>
429
- <div v-else>
430
- <div
431
- v-for="(item, index) in viewInfoList"
432
- :key="index"
433
- :style="item.style"
434
- :ref="'element' + index"
435
- >
436
- <!-- 为了保证slot中的页面刷新。不加这个div slot中的img标签不会更新,vue或者是dom的bug? -->
437
- <div :key="item.dataIndex">
438
- <slot
439
- name="itemView"
440
- :currentIndex="currentDataIndex"
441
- :dataIndex="item.dataIndex"
442
- :focused="focused"
443
- ></slot>
444
- </div>
445
-
446
- <!-- <div
447
- :style="{
448
- width: 50,
449
- height: 50,
450
- top: 200,
451
- fontSize: '30px',
452
- }"
453
- >
454
- {{ index + " " + item.dataIndex }}
455
- </div> -->
456
- </div>
457
- </div>
458
- </div>
459
-
460
- <div v-if="showIndicator" :style="indicatorLayout">
461
- <indicator
462
- :number="totalFrame"
463
- :current="currentDataIndex"
464
- :itemSize="indicatorDotSize"
465
- :vertical="vertical"
466
- >
467
- <template #current>
468
- <slot name="indicatorCur">
469
- <div
470
- :style="{
471
- width: 10,
472
- height: 10,
473
- backgroundColor: 'rgba(50, 50, 50, 1.0)',
474
- borderRadius: '5px',
475
- }"
476
- ></div>
477
- </slot>
478
- </template>
479
- <template #normal>
480
- <slot name="indicatorNor">
481
- <div
482
- :style="{
483
- width: 10,
484
- height: 10,
485
- backgroundColor: 'rgba(100, 100, 100, 0.7)',
486
- borderRadius: '5px',
487
- }"
488
- ></div>
489
- </slot>
490
- </template>
491
- </indicator>
492
- </div>
493
- </div>
494
- </jsv-focus-block>
1
+ <!--
2
+ * @Author: ChenChanghua
3
+ * @Date: 2021-11-23 09:42:26
4
+ * @LastEditors: ChenChanghua
5
+ * @LastEditTime: 2021-12-02 15:47:26
6
+ * @Description: file content
7
+ -->
8
+ <script>
9
+ import { Forge } from "../../../dom/jsv-forge-define";
10
+ import JsvActorMove, {
11
+ JsvActorMoveControl,
12
+ } from "jsview/utils/JsViewVueWidget/JsvActorMove";
13
+ import Indicator from "./Indicator.vue";
14
+ import { ref } from "vue";
15
+
16
+ const VIEW_NUM = 3;
17
+
18
+ function modToRange(value, mod, start = 0) {
19
+ let m = value % mod;
20
+ if (m < start) {
21
+ m += mod;
22
+ } else if (m >= start + mod) {
23
+ m -= mod;
24
+ }
25
+ return m;
26
+ }
27
+
28
+ export default {
29
+ components: { Indicator, JsvActorMove },
30
+ props: {
31
+ showIndicator: {
32
+ type: Boolean,
33
+ default: true,
34
+ },
35
+ dotSize: {
36
+ type: Number,
37
+ default: 10,
38
+ },
39
+ dotGap: {
40
+ type: Number,
41
+ default: 10,
42
+ },
43
+ indicatorPos: {
44
+ type: Number,
45
+ default: -1,
46
+ },
47
+ indicatorAlign: {
48
+ type: String,
49
+ default: "middle",
50
+ },
51
+ totalFrame: {
52
+ type: Number,
53
+ require: true,
54
+ },
55
+ firstFrame: {
56
+ type: Number,
57
+ default: 0,
58
+ },
59
+ layoutInfo: {
60
+ type: Object,
61
+ require: true,
62
+ },
63
+ onClick: {
64
+ type: Function,
65
+ },
66
+ onChange: {
67
+ type: Function,
68
+ },
69
+ autoplayInterval: {
70
+ type: Number,
71
+ default: 5000,
72
+ },
73
+ animation: {
74
+ type: Object,
75
+ default() {
76
+ return {
77
+ duration: 200,
78
+ easing: "linear",
79
+ };
80
+ },
81
+ },
82
+ vertical: {
83
+ type: Boolean,
84
+ default: false,
85
+ },
86
+ name: {
87
+ type: String,
88
+ },
89
+ onFocus: {
90
+ type: Function,
91
+ },
92
+ onBlur: {
93
+ type: Function,
94
+ },
95
+ swipeType: {
96
+ type: String,
97
+ default: "translate",
98
+ },
99
+ smoothTranslate: {
100
+ type: Boolean,
101
+ default: false,
102
+ },
103
+ },
104
+ computed: {
105
+ indicatorLayout() {
106
+ let indicatorSize =
107
+ this.totalFrame * (this.dotSize + this.dotGap) - this.dotGap;
108
+ if (this.vertical) {
109
+ let top;
110
+ if (this.indicatorAlign === "start") {
111
+ top = this.dotGap;
112
+ } else if (this.indicatorAlign === "end") {
113
+ top = this.layoutInfo.height - indicatorSize - this.dotGap;
114
+ } else {
115
+ top = (this.layoutInfo.height - indicatorSize) / 2;
116
+ }
117
+ return {
118
+ left:
119
+ this.indicatorPos < 0
120
+ ? this.layoutInfo.width * 0.8
121
+ : this.indicatorPos,
122
+ top,
123
+ zIndex: 1,
124
+ };
125
+ } else {
126
+ let left;
127
+ if (this.indicatorAlign === "start") {
128
+ left = this.dotGap;
129
+ } else if (this.indicatorAlign === "end") {
130
+ left = this.layoutInfo.width - indicatorSize - this.dotGap;
131
+ } else {
132
+ left = (this.layoutInfo.width - indicatorSize) / 2;
133
+ }
134
+ return {
135
+ left,
136
+ top:
137
+ this.indicatorPos < 0
138
+ ? this.layoutInfo.height * 0.8
139
+ : this.indicatorPos,
140
+ zIndex: 1,
141
+ };
142
+ }
143
+ },
144
+ indicatorDotSize() {
145
+ return this.dotSize + this.dotGap;
146
+ },
147
+ currentDataIndex() {
148
+ return modToRange(this.firstFrame + this.offset, this.totalFrame);
149
+ },
150
+ currentViewIndex() {
151
+ return modToRange(this.offset + 1, VIEW_NUM);
152
+ },
153
+ viewInfoList() {
154
+ let styleList = [
155
+ {
156
+ top: 0,
157
+ left: 0,
158
+ width: this.layoutInfo.width,
159
+ height: this.layoutInfo.height,
160
+ },
161
+ {
162
+ top: 0,
163
+ left: 0,
164
+ width: this.layoutInfo.width,
165
+ height: this.layoutInfo.height,
166
+ },
167
+ {
168
+ top: 0,
169
+ left: 0,
170
+ width: this.layoutInfo.width,
171
+ height: this.layoutInfo.height,
172
+ },
173
+ ];
174
+ switch (this.swipeType) {
175
+ case "translate":
176
+ styleList[0].top = this.vertical ? -this.layoutInfo.height : 0;
177
+ styleList[0].left = this.vertical ? 0 : -this.layoutInfo.width;
178
+
179
+ styleList[2].top = this.vertical ? this.layoutInfo.height : 0;
180
+ styleList[2].left = this.vertical ? 0 : this.layoutInfo.width;
181
+ break;
182
+ case "opacity":
183
+ styleList[0].opaticy = 0;
184
+ styleList[1].opaticy = 1;
185
+ styleList[2].opaticy = 0;
186
+ break;
187
+ default:
188
+ break;
189
+ }
190
+
191
+ let viewList = [];
192
+ for (let i = 0; i < VIEW_NUM; i++) {
193
+ viewList.push({
194
+ dataIndex: modToRange(
195
+ this.currentDataIndex +
196
+ modToRange(i - this.currentViewIndex, VIEW_NUM, -1),
197
+ this.totalFrame
198
+ ),
199
+ style: styleList[modToRange(i - this.offset, VIEW_NUM)],
200
+ });
201
+ }
202
+ return viewList;
203
+ },
204
+ },
205
+ setup(props) {
206
+ console.log("setup");
207
+ let controllerList = new Array(VIEW_NUM);
208
+ if (props.smoothTranslate) {
209
+ for (let i = 0; i < controllerList.length; i++) {
210
+ controllerList[i] = new JsvActorMoveControl();
211
+ }
212
+ }
213
+ let preOffset = -1;
214
+ let offset = ref(0);
215
+ let focused = ref(false);
216
+ let timeoutHandler = -1;
217
+ return {
218
+ preOffset,
219
+ offset,
220
+ focused,
221
+ timeoutHandler,
222
+ controllerList,
223
+ };
224
+ },
225
+ watch: {
226
+ offset(newValue) {
227
+ this.onChange?.(modToRange(this.firstFrame + newValue, this.totalFrame));
228
+ },
229
+ },
230
+ methods: {
231
+ stopAutoplay() {
232
+ clearTimeout(this.timeoutHandler);
233
+ this.timeoutHandler = -1;
234
+ },
235
+ startAutoplay() {
236
+ if (this.autoplayInterval > 0) {
237
+ if (this.timeoutHandler > 0) {
238
+ clearTimeout(this.timeoutHandler);
239
+ }
240
+ this.timeoutHandler = setTimeout(() => {
241
+ this._trigger(1);
242
+ }, this.autoplayInterval);
243
+ }
244
+ },
245
+ _onKeyDown(ev) {
246
+ switch (ev.keyCode) {
247
+ case 37:
248
+ if (!this.vertical) {
249
+ this._trigger(-1);
250
+ return true;
251
+ }
252
+ break;
253
+ case 38:
254
+ if (this.vertical) {
255
+ this._trigger(-1);
256
+ return true;
257
+ }
258
+ break;
259
+ case 39:
260
+ if (!this.vertical) {
261
+ this._trigger(1);
262
+ return true;
263
+ }
264
+ break;
265
+ case 40:
266
+ if (this.vertical) {
267
+ this._trigger(1);
268
+ return true;
269
+ }
270
+ break;
271
+ case 13:
272
+ this.onClick?.();
273
+ return true;
274
+ default:
275
+ break;
276
+ }
277
+
278
+ return false;
279
+ },
280
+ _onAnimationEnd() {
281
+ if (this.autoplayInterval > 0 && !this.focused) {
282
+ this.timeoutHandler = setTimeout(() => {
283
+ this._trigger(1);
284
+ }, this.autoplayInterval);
285
+ }
286
+ },
287
+ _onFocus() {
288
+ this.focused = true;
289
+ this.stopAutoplay();
290
+ this.onFocus?.();
291
+ },
292
+ _onBlur() {
293
+ this.focused = false;
294
+ this.startAutoplay();
295
+ this.onBlur?.();
296
+ },
297
+ _startNormalAnimation() {
298
+ let duration = this.animation.duration;
299
+ // let easing = this.animation.easing ? this.animation.easing : "linear";
300
+
301
+ let curViewAnimation;
302
+ let preViewAnimation;
303
+ switch (this.swipeType) {
304
+ case "translate":
305
+ curViewAnimation = new Forge.TranslateAnimation(
306
+ this.vertical ? 0 : this.layoutInfo.width,
307
+ 0,
308
+ this.vertical ? this.layoutInfo.height : 0,
309
+ 0,
310
+ duration,
311
+ null
312
+ );
313
+ preViewAnimation = new Forge.TranslateAnimation(
314
+ this.vertical ? 0 : this.layoutInfo.width,
315
+ 0,
316
+ this.vertical ? this.layoutInfo.height : 0,
317
+ 0,
318
+ duration,
319
+ null
320
+ );
321
+ break;
322
+ case "opacity":
323
+ break;
324
+ default:
325
+ break;
326
+ }
327
+ curViewAnimation.SetAnimationListener(
328
+ new Forge.AnimationListener(null, this._onAnimationEnd, null)
329
+ );
330
+ this.$refs["element" + this.currentViewIndex]?.jsvMaskView.StartAnimation(
331
+ curViewAnimation
332
+ );
333
+ this.$refs[
334
+ "element" + modToRange(this.currentViewIndex - 1, VIEW_NUM)
335
+ ]?.jsvMaskView.StartAnimation(preViewAnimation);
336
+ },
337
+ _startSmoothTranslateAnimation() {
338
+ let curController = this.controllerList[this.currentViewIndex];
339
+ let preController =
340
+ this.controllerList[modToRange(this.currentViewIndex - 1, VIEW_NUM)];
341
+ if (this.vertical) {
342
+ let speed = (this.layoutInfo.height / this.animation.duration) * 1000;
343
+ curController.jumpTo(0, this.layoutInfo.height);
344
+ curController.moveToY(0, speed, this._onAnimationEnd);
345
+ preController.jumpTo(0, this.layoutInfo.height);
346
+ preController.moveToY(0, speed);
347
+ } else {
348
+ let speed = (this.layoutInfo.width / this.animation.duration) * 1000;
349
+ curController.jumpTo(this.layoutInfo.width, 0);
350
+ curController.moveToX(0, speed, this._onAnimationEnd);
351
+ preController.jumpTo(this.layoutInfo.width, 0);
352
+ preController.moveToX(0, speed);
353
+ }
354
+ },
355
+ _startAnimation() {
356
+ if (this.smoothTranslate) {
357
+ this._startSmoothTranslateAnimation();
358
+ } else {
359
+ this._startNormalAnimation();
360
+ }
361
+ },
362
+ _trigger(direction) {
363
+ this.preOffset = this.offset;
364
+ this.offset += direction;
365
+ this._startAnimation();
366
+ },
367
+ },
368
+ mounted() {
369
+ if (!this.focused) {
370
+ this.startAutoplay();
371
+ }
372
+ },
373
+ beforeUnmount() {
374
+ this.stopAutoplay();
375
+ },
376
+ };
377
+ </script>
378
+
379
+ <template>
380
+ <jsv-focus-block
381
+ :name="name"
382
+ :onAction="{
383
+ onFocus: _onFocus,
384
+ onBlur: _onBlur,
385
+ onKeyDown: _onKeyDown,
386
+ }"
387
+ >
388
+ <div
389
+ :style="{
390
+ width: layoutInfo.width,
391
+ height: layoutInfo.height,
392
+ overflow: 'hidden',
393
+ }"
394
+ >
395
+ <div
396
+ :style="{
397
+ zIndex: 0,
398
+ }"
399
+ >
400
+ <div v-if="smoothTranslate">
401
+ <jsv-actor-move
402
+ v-for="(item, index) in viewInfoList"
403
+ :key="index"
404
+ :style="item.style"
405
+ :control="controllerList[index]"
406
+ >
407
+ <!-- 为了保证slot中的页面刷新。不加这个div slot中的img标签不会更新,vue或者是dom的bug? -->
408
+ <div :key="item.dataIndex">
409
+ <slot
410
+ name="itemView"
411
+ :currentIndex="currentDataIndex"
412
+ :dataIndex="item.dataIndex"
413
+ :focused="focused"
414
+ ></slot>
415
+ </div>
416
+
417
+ <!-- <div
418
+ :style="{
419
+ width: 50,
420
+ height: 50,
421
+ top: 200,
422
+ fontSize: '30px',
423
+ }"
424
+ >
425
+ {{ index }}
426
+ </div> -->
427
+ </jsv-actor-move>
428
+ </div>
429
+ <div v-else>
430
+ <div
431
+ v-for="(item, index) in viewInfoList"
432
+ :key="index"
433
+ :style="item.style"
434
+ :ref="'element' + index"
435
+ >
436
+ <!-- 为了保证slot中的页面刷新。不加这个div slot中的img标签不会更新,vue或者是dom的bug? -->
437
+ <div :key="item.dataIndex">
438
+ <slot
439
+ name="itemView"
440
+ :currentIndex="currentDataIndex"
441
+ :dataIndex="item.dataIndex"
442
+ :focused="focused"
443
+ ></slot>
444
+ </div>
445
+
446
+ <!-- <div
447
+ :style="{
448
+ width: 50,
449
+ height: 50,
450
+ top: 200,
451
+ fontSize: '30px',
452
+ }"
453
+ >
454
+ {{ index + " " + item.dataIndex }}
455
+ </div> -->
456
+ </div>
457
+ </div>
458
+ </div>
459
+
460
+ <div v-if="showIndicator" :style="indicatorLayout">
461
+ <indicator
462
+ :number="totalFrame"
463
+ :current="currentDataIndex"
464
+ :itemSize="indicatorDotSize"
465
+ :vertical="vertical"
466
+ >
467
+ <template #current>
468
+ <slot name="indicatorCur">
469
+ <div
470
+ :style="{
471
+ width: 10,
472
+ height: 10,
473
+ backgroundColor: 'rgba(50, 50, 50, 1.0)',
474
+ borderRadius: '5px',
475
+ }"
476
+ ></div>
477
+ </slot>
478
+ </template>
479
+ <template #normal>
480
+ <slot name="indicatorNor">
481
+ <div
482
+ :style="{
483
+ width: 10,
484
+ height: 10,
485
+ backgroundColor: 'rgba(100, 100, 100, 0.7)',
486
+ borderRadius: '5px',
487
+ }"
488
+ ></div>
489
+ </slot>
490
+ </template>
491
+ </indicator>
492
+ </div>
493
+ </div>
494
+ </jsv-focus-block>
495
495
  </template>