@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,124 +1,124 @@
1
- <script lang="ts">
2
- import { Options, Vue } from "vue-class-component";
3
- import { jJsvRuntimeBridge } from "jsview/utils/JsViewVueTools/JsvRuntimeBridge";
4
- import { router, routeList } from './router.js'
5
- import { useRouter, useRoute, Router } from 'vue-router'
6
-
7
- @Options({
8
- props: {
9
- routePath: String
10
- },
11
- })
12
- class App extends Vue {
13
- constructor(props: any) {
14
- super(props)
15
-
16
- let currentRouter: Router;
17
-
18
- // props.routePath在DemoHomepage中被设置, 此处作为内嵌router使用.
19
- // 此时已经有router, 则作为children动态添加到当前route
20
- if(props.routePath) {
21
- const currentRoute = useRoute()
22
- currentRouter = useRouter()
23
-
24
- let redirectPath; // 自动跳转路径
25
- for(const route of routeList) {
26
- if(route.path === "/") { // 不需要添加home
27
- redirectPath = route.redirect;
28
- continue;
29
- }
30
-
31
- const subRoute = {...route, path: route.path.substring(1)} // 去掉字符'/'
32
- currentRouter.addRoute(currentRoute.name as string, subRoute)
33
- }
34
-
35
- currentRouter.replace(props.routePath + redirectPath) // 自动跳转到redirectPath
36
- } else { // 作为全局router使用
37
- currentRouter = App.Router;
38
- }
39
-
40
- this.watchRouterChanged(currentRouter);
41
- }
42
-
43
- // Override
44
- mounted() {
45
- // 调试接口,对接JSCenter平台去掉启动图的处理
46
- jJsvRuntimeBridge.notifyPageLoaded();
47
- }
48
-
49
- private onRequestFocus(branchName: string) {
50
- this.topRef.findBlockByname(branchName)?.requestFocus();
51
- }
52
-
53
- private watchRouterChanged(route: Router) {
54
- route.afterEach(() => {
55
- this.displayUrl = window.location.href;
56
- })
57
- }
58
-
59
- private onKeyDown(event: any) {
60
- return this.routePage?.onKeyDown(event);
61
- }
62
-
63
- private topRef!: any;
64
- private displayUrl: string = "";
65
- private routePage: any = null;
66
-
67
- static Router: Router = router;
68
- }
69
-
70
- export default App;
71
- </script>
72
-
73
- <template>
74
- <div class="root">
75
- <div class="address">
76
- 当前URL: {{ displayUrl }}
77
- </div>
78
- <div class="split" />
79
- <jsv-focus-block ref="topRef">
80
- <!-- 这种router-view的写法可以获取到component的ref,vue标准写法 -->
81
- <router-view v-slot="{ Component }">
82
- <component :is="Component"
83
- ref="routePage"
84
- class="router"
85
- @requestFocus="onRequestFocus"
86
- />
87
- </router-view>
88
- </jsv-focus-block>
89
- </div>
90
- </template>
91
-
92
- <style scoped>
93
- .root {
94
- left: 0;
95
- top: 0;
96
- width: 1280;
97
- height: 1080;
98
- background-color: rgb(222,211,140)
99
- }
100
-
101
- .address {
102
- left: 40;
103
- top: 40;
104
- width: 1200;
105
- height: 200;
106
- font-size: 20;
107
- }
108
-
109
- .split {
110
- left: 40;
111
- top: 150;
112
- width: 1200;
113
- height: 3;
114
- background-color: #00F000;
115
- }
116
-
117
- .router {
118
- left:0;
119
- top:150;
120
- width: 1920;
121
- height: 930;
122
- overflow: hidden;
123
- }
124
- </style>
1
+ <script lang="ts">
2
+ import { Options, Vue } from "vue-class-component";
3
+ import { jJsvRuntimeBridge } from "jsview/utils/JsViewVueTools/JsvRuntimeBridge";
4
+ import { router, routeList } from './router.js'
5
+ import { useRouter, useRoute, Router } from 'vue-router'
6
+
7
+ @Options({
8
+ props: {
9
+ routePath: String
10
+ },
11
+ })
12
+ class App extends Vue {
13
+ constructor(props: any) {
14
+ super(props)
15
+
16
+ let currentRouter: Router;
17
+
18
+ // props.routePath在DemoHomepage中被设置, 此处作为内嵌router使用.
19
+ // 此时已经有router, 则作为children动态添加到当前route
20
+ if(props.routePath) {
21
+ const currentRoute = useRoute()
22
+ currentRouter = useRouter()
23
+
24
+ let redirectPath; // 自动跳转路径
25
+ for(const route of routeList) {
26
+ if(route.path === "/") { // 不需要添加home
27
+ redirectPath = route.redirect;
28
+ continue;
29
+ }
30
+
31
+ const subRoute = {...route, path: route.path.substring(1)} // 去掉字符'/'
32
+ currentRouter.addRoute(currentRoute.name as string, subRoute)
33
+ }
34
+
35
+ currentRouter.replace(props.routePath + redirectPath) // 自动跳转到redirectPath
36
+ } else { // 作为全局router使用
37
+ currentRouter = App.Router;
38
+ }
39
+
40
+ this.watchRouterChanged(currentRouter);
41
+ }
42
+
43
+ // Override
44
+ mounted() {
45
+ // 调试接口,对接JSCenter平台去掉启动图的处理
46
+ jJsvRuntimeBridge.notifyPageLoaded();
47
+ }
48
+
49
+ private onRequestFocus(branchName: string) {
50
+ this.topRef.findBlockByname(branchName)?.requestFocus();
51
+ }
52
+
53
+ private watchRouterChanged(route: Router) {
54
+ route.afterEach(() => {
55
+ this.displayUrl = window.location.href;
56
+ })
57
+ }
58
+
59
+ private onKeyDown(event: any) {
60
+ return this.routePage?.onKeyDown(event);
61
+ }
62
+
63
+ private topRef!: any;
64
+ private displayUrl: string = "";
65
+ private routePage: any = null;
66
+
67
+ static Router: Router = router;
68
+ }
69
+
70
+ export default App;
71
+ </script>
72
+
73
+ <template>
74
+ <div class="root">
75
+ <div class="address">
76
+ 当前URL: {{ displayUrl }}
77
+ </div>
78
+ <div class="split" />
79
+ <jsv-focus-block ref="topRef">
80
+ <!-- 这种router-view的写法可以获取到component的ref,vue标准写法 -->
81
+ <router-view v-slot="{ Component }">
82
+ <component :is="Component"
83
+ ref="routePage"
84
+ class="router"
85
+ @requestFocus="onRequestFocus"
86
+ />
87
+ </router-view>
88
+ </jsv-focus-block>
89
+ </div>
90
+ </template>
91
+
92
+ <style scoped>
93
+ .root {
94
+ left: 0;
95
+ top: 0;
96
+ width: 1280;
97
+ height: 1080;
98
+ background-color: rgb(222,211,140)
99
+ }
100
+
101
+ .address {
102
+ left: 40;
103
+ top: 40;
104
+ width: 1200;
105
+ height: 200;
106
+ font-size: 20;
107
+ }
108
+
109
+ .split {
110
+ left: 40;
111
+ top: 150;
112
+ width: 1200;
113
+ height: 3;
114
+ background-color: #00F000;
115
+ }
116
+
117
+ .router {
118
+ left:0;
119
+ top:150;
120
+ width: 1920;
121
+ height: 930;
122
+ overflow: hidden;
123
+ }
124
+ </style>
@@ -1,114 +1,114 @@
1
- <script lang="ts">
2
- import { JsvFocusEvent } from "jsview/utils/JsViewEngineWidget";
3
- import { Options, Vue } from "vue-class-component";
4
- import Item from "./Item.vue";
5
-
6
- @Options({
7
- props: {
8
- style: Object,
9
- buttonConfig: Object,
10
- onButtonClick: Function,
11
- onBack: Function,
12
- },
13
- components: {
14
- Item,
15
- }
16
- })
17
-
18
-
19
- class HorizontalButtonList extends Vue {
20
- constructor(props: object) {
21
- super(props);
22
-
23
- this.listSize = this.computeSize(props);
24
- }
25
-
26
- private computeSize(props: any) : object {
27
- let listLeft = 0;
28
- const listWidth = (this.buttonWidth + this.buttonGap) * props.buttonConfig.length;
29
-
30
- // 根据maxWidth,计算buttons的左边位置
31
- const widthCenter = listWidth - this.buttonGap; // 减去最后一个元素的gap
32
- if (widthCenter < this.maxWidth) {
33
- listLeft = Math.floor((this.maxWidth - widthCenter) / 2);
34
- }
35
-
36
- let listSize = {
37
- left: listLeft,
38
- width: listWidth,
39
- height: this.buttonHeight,
40
- };
41
-
42
- return listSize;
43
- }
44
-
45
- private onKeyDown(ev: JsvFocusEvent) {
46
- if(ev.keyCode === 13) { // Enter
47
- this.onButtonClick?.(this.focusedItemIndex);
48
- return true;
49
- } else if(ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) { // 8:Backspace, 27:Escape, 10000:盒子返回键
50
- this.onBack?.();
51
- return true;
52
- }
53
-
54
- let changeFocusTo = -1;
55
- switch (ev.keyCode) {
56
- case 37: // Left
57
- changeFocusTo = (this.focusedItemIndex - 1 + this.buttonConfig.length) % this.buttonConfig.length;
58
- break;
59
- case 39: // Right
60
- changeFocusTo = (this.focusedItemIndex + 1) % this.buttonConfig.length;
61
- break;
62
- default:
63
- break;
64
- }
65
- if (changeFocusTo >= 0) {
66
- ev.ownerNode.findBlockByName(changeFocusTo.toString()).requestFocus();
67
- this.focusedItemIndex = changeFocusTo;
68
- return true;
69
- }
70
-
71
- return false;
72
- }
73
-
74
- private listSize: object;
75
-
76
- private focusedItemIndex = 0;
77
-
78
- private readonly buttonConfig!: any;
79
- private readonly onButtonClick?: Function;
80
- private readonly onBack?: Function;
81
-
82
- private readonly maxWidth: number = 1280;
83
- private readonly listPadding: number = 10;
84
- private readonly buttonWidth: number = 400;
85
- private readonly buttonHeight: number = 80;
86
- private readonly buttonGap: number = 50;
87
- }
88
-
89
- export default HorizontalButtonList;
90
- </script>
91
-
92
- <template>
93
- <div :style="style">
94
- <jsv-focus-block
95
- :style="{
96
- left: listSize.left,
97
- width: listSize.width + listPadding * 2,
98
- height: listSize.height + listPadding * 2,
99
- }"
100
- :onKeyDown="onKeyDown"
101
- >
102
- <Item v-for="(item,index) in buttonConfig" :key="index"
103
- :style="{ left: (buttonWidth+10)*index, width:buttonWidth, height:buttonHeight }"
104
- :name="index.toString()"
105
- :autoFocus="index === 0"
106
- >
107
- {{ item.name }}
108
- </Item>
109
- </jsv-focus-block>
110
- </div>
111
- </template>
112
-
113
- <style>
1
+ <script lang="ts">
2
+ import { JsvFocusEvent } from "jsview/utils/JsViewEngineWidget";
3
+ import { Options, Vue } from "vue-class-component";
4
+ import Item from "./Item.vue";
5
+
6
+ @Options({
7
+ props: {
8
+ style: Object,
9
+ buttonConfig: Object,
10
+ onButtonClick: Function,
11
+ onBack: Function,
12
+ },
13
+ components: {
14
+ Item,
15
+ }
16
+ })
17
+
18
+
19
+ class HorizontalButtonList extends Vue {
20
+ constructor(props: object) {
21
+ super(props);
22
+
23
+ this.listSize = this.computeSize(props);
24
+ }
25
+
26
+ private computeSize(props: any) : object {
27
+ let listLeft = 0;
28
+ const listWidth = (this.buttonWidth + this.buttonGap) * props.buttonConfig.length;
29
+
30
+ // 根据maxWidth,计算buttons的左边位置
31
+ const widthCenter = listWidth - this.buttonGap; // 减去最后一个元素的gap
32
+ if (widthCenter < this.maxWidth) {
33
+ listLeft = Math.floor((this.maxWidth - widthCenter) / 2);
34
+ }
35
+
36
+ let listSize = {
37
+ left: listLeft,
38
+ width: listWidth,
39
+ height: this.buttonHeight,
40
+ };
41
+
42
+ return listSize;
43
+ }
44
+
45
+ private onKeyDown(ev: JsvFocusEvent) {
46
+ if(ev.keyCode === 13) { // Enter
47
+ this.onButtonClick?.(this.focusedItemIndex);
48
+ return true;
49
+ } else if(ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) { // 8:Backspace, 27:Escape, 10000:盒子返回键
50
+ this.onBack?.();
51
+ return true;
52
+ }
53
+
54
+ let changeFocusTo = -1;
55
+ switch (ev.keyCode) {
56
+ case 37: // Left
57
+ changeFocusTo = (this.focusedItemIndex - 1 + this.buttonConfig.length) % this.buttonConfig.length;
58
+ break;
59
+ case 39: // Right
60
+ changeFocusTo = (this.focusedItemIndex + 1) % this.buttonConfig.length;
61
+ break;
62
+ default:
63
+ break;
64
+ }
65
+ if (changeFocusTo >= 0) {
66
+ ev.ownerNode.findBlockByName(changeFocusTo.toString()).requestFocus();
67
+ this.focusedItemIndex = changeFocusTo;
68
+ return true;
69
+ }
70
+
71
+ return false;
72
+ }
73
+
74
+ private listSize: object;
75
+
76
+ private focusedItemIndex = 0;
77
+
78
+ private readonly buttonConfig!: any;
79
+ private readonly onButtonClick?: Function;
80
+ private readonly onBack?: Function;
81
+
82
+ private readonly maxWidth: number = 1280;
83
+ private readonly listPadding: number = 10;
84
+ private readonly buttonWidth: number = 400;
85
+ private readonly buttonHeight: number = 80;
86
+ private readonly buttonGap: number = 50;
87
+ }
88
+
89
+ export default HorizontalButtonList;
90
+ </script>
91
+
92
+ <template>
93
+ <div :style="style">
94
+ <jsv-focus-block
95
+ :style="{
96
+ left: listSize.left,
97
+ width: listSize.width + listPadding * 2,
98
+ height: listSize.height + listPadding * 2,
99
+ }"
100
+ :onKeyDown="onKeyDown"
101
+ >
102
+ <Item v-for="(item,index) in buttonConfig" :key="index"
103
+ :style="{ left: (buttonWidth+10)*index, width:buttonWidth, height:buttonHeight }"
104
+ :name="index.toString()"
105
+ :autoFocus="index === 0"
106
+ >
107
+ {{ item.name }}
108
+ </Item>
109
+ </jsv-focus-block>
110
+ </div>
111
+ </template>
112
+
113
+ <style>
114
114
  </style>
@@ -1,74 +1,74 @@
1
- <script lang="ts">
2
- import { Options, Vue } from "vue-class-component";
3
-
4
- @Options({
5
- props: {
6
- style: Object,
7
- name: String,
8
- autoFocus: Boolean
9
- },
10
- })
11
-
12
- class Item extends Vue {
13
- constructor(props: object) {
14
- super(props);
15
- }
16
-
17
- onFocus() {
18
- this.hasFocused = true;
19
- }
20
-
21
- onBlur() {
22
- this.hasFocused = false;
23
- }
24
-
25
- getFocusStyle() {
26
- return {
27
- width: this.style.width + 10,
28
- height: this.style.height + 10,
29
- }
30
- }
31
-
32
- getItemStyle() {
33
- return {
34
- width: this.style.width,
35
- height: this.style.height,
36
- backgroundColor: '#0FF000',
37
- lineHeight: this.style.height,
38
- fontSize: `${Math.floor(this.style.height * 0.55)}px`,
39
- }
40
- }
41
-
42
- private hasFocused: boolean = false;
43
- private style!: any;
44
- }
45
-
46
- export default Item;
47
- </script>
48
-
49
- <template>
50
- <jsv-focus-block :name="name" :autoFocus="autoFocus?'':undefined"
51
- :onFocus="onFocus" :onBlur="onBlur"
52
- >
53
- <div :style="style">
54
- <div class="focus" :style="getFocusStyle()" v-if="hasFocused" />
55
- <div class="item" :style="getItemStyle()">
56
- <slot/>
57
- </div>
58
- </div>
59
- </jsv-focus-block>
60
- </template>
61
-
62
- <style scoped>
63
- .focus {
64
- top: -5;
65
- left: -5;
66
- background-color: #0000FF;
67
- }
68
- .item {
69
- text-align: center;
70
- font-size: 30;
71
- color: #000000;
72
- white-space: nowrap;
73
- }
1
+ <script lang="ts">
2
+ import { Options, Vue } from "vue-class-component";
3
+
4
+ @Options({
5
+ props: {
6
+ style: Object,
7
+ name: String,
8
+ autoFocus: Boolean
9
+ },
10
+ })
11
+
12
+ class Item extends Vue {
13
+ constructor(props: object) {
14
+ super(props);
15
+ }
16
+
17
+ onFocus() {
18
+ this.hasFocused = true;
19
+ }
20
+
21
+ onBlur() {
22
+ this.hasFocused = false;
23
+ }
24
+
25
+ getFocusStyle() {
26
+ return {
27
+ width: this.style.width + 10,
28
+ height: this.style.height + 10,
29
+ }
30
+ }
31
+
32
+ getItemStyle() {
33
+ return {
34
+ width: this.style.width,
35
+ height: this.style.height,
36
+ backgroundColor: '#0FF000',
37
+ lineHeight: this.style.height,
38
+ fontSize: `${Math.floor(this.style.height * 0.55)}px`,
39
+ }
40
+ }
41
+
42
+ private hasFocused: boolean = false;
43
+ private style!: any;
44
+ }
45
+
46
+ export default Item;
47
+ </script>
48
+
49
+ <template>
50
+ <jsv-focus-block :name="name" :autoFocus="autoFocus?'':undefined"
51
+ :onFocus="onFocus" :onBlur="onBlur"
52
+ >
53
+ <div :style="style">
54
+ <div class="focus" :style="getFocusStyle()" v-if="hasFocused" />
55
+ <div class="item" :style="getItemStyle()">
56
+ <slot/>
57
+ </div>
58
+ </div>
59
+ </jsv-focus-block>
60
+ </template>
61
+
62
+ <style scoped>
63
+ .focus {
64
+ top: -5;
65
+ left: -5;
66
+ background-color: #0000FF;
67
+ }
68
+ .item {
69
+ text-align: center;
70
+ font-size: 30;
71
+ color: #000000;
72
+ white-space: nowrap;
73
+ }
74
74
  </style>
@@ -1,30 +1,30 @@
1
- import { createRouter } from "vue-router";
2
- import { createJsvHashHistory } from "jsview/utils/JsViewVueTools/JsvHashHistory";
3
-
4
- const routeList = [
5
- // 功能实例
6
- {
7
- name: "Home",
8
- path: "/",
9
- redirect: "/__MainJsvApp/MainPage",
10
- }, {
11
- name: "MainPage",
12
- path: "/__MainJsvApp/MainPage",
13
- component: () => import('./views/MainPage')
14
- }, {
15
- name: "SubPageFirst",
16
- path: "/__MainJsvApp/SubPageFirst",
17
- component: () => import('./views/SubPageFirst')
18
- }, {
19
- name: "SubPageSecond",
20
- path: "/__MainJsvApp/SubPageSecond",
21
- component: () => import('./views/SubPageSecond')
22
- },
23
- ];
24
-
25
- const router = createRouter({
26
- history: createJsvHashHistory(),
27
- routes: routeList,
28
- })
29
-
1
+ import { createRouter } from "vue-router";
2
+ import { createJsvHashHistory } from "jsview/utils/JsViewVueTools/JsvHashHistory";
3
+
4
+ const routeList = [
5
+ // 功能实例
6
+ {
7
+ name: "Home",
8
+ path: "/",
9
+ redirect: "/__MainJsvApp/MainPage",
10
+ }, {
11
+ name: "MainPage",
12
+ path: "/__MainJsvApp/MainPage",
13
+ component: () => import('./views/MainPage')
14
+ }, {
15
+ name: "SubPageFirst",
16
+ path: "/__MainJsvApp/SubPageFirst",
17
+ component: () => import('./views/SubPageFirst')
18
+ }, {
19
+ name: "SubPageSecond",
20
+ path: "/__MainJsvApp/SubPageSecond",
21
+ component: () => import('./views/SubPageSecond')
22
+ },
23
+ ];
24
+
25
+ const router = createRouter({
26
+ history: createJsvHashHistory(),
27
+ routes: routeList,
28
+ })
29
+
30
30
  export { router, routeList }