@shijiu/jsview-vue 0.9.254 → 0.9.267

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 (168) 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 +1 -5
  7. package/samples/AdvanceMetroWidget/App.vue +122 -122
  8. package/samples/AdvanceMetroWidget/Frame.vue +100 -100
  9. package/samples/AdvanceMetroWidget/Item.vue +57 -57
  10. package/samples/AdvanceMetroWidget/data.js +136 -136
  11. package/samples/AnimPicture/App.vue +223 -223
  12. package/samples/Basic/App.vue +128 -128
  13. package/samples/Basic/components/TitleBar.vue +28 -28
  14. package/samples/Basic/components/anim/AnimGroup.vue +67 -67
  15. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +101 -101
  16. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +52 -52
  17. package/samples/Basic/components/anim/AnimTransition.vue +116 -116
  18. package/samples/Basic/components/div/DivBackground.vue +14 -14
  19. package/samples/Basic/components/div/DivClip.vue +80 -80
  20. package/samples/Basic/components/div/DivCssScoped.vue +26 -26
  21. package/samples/Basic/components/div/DivCssVar.vue +49 -49
  22. package/samples/Basic/components/div/DivGroup1.vue +32 -32
  23. package/samples/Basic/components/div/DivGroup2.vue +40 -40
  24. package/samples/Basic/components/div/DivLayout.vue +11 -11
  25. package/samples/Basic/components/div/DivRadius.vue +46 -46
  26. package/samples/Basic/components/text/TextAlign.vue +47 -47
  27. package/samples/Basic/components/text/TextFontStyle.vue +57 -57
  28. package/samples/Basic/components/text/TextGroup.vue +31 -31
  29. package/samples/Basic/components/text/TextOverflow.vue +77 -77
  30. package/samples/BasicFocusControl/App.vue +124 -124
  31. package/samples/BasicFocusControl/components/BaseBlock.vue +50 -50
  32. package/samples/BasicFocusControl/components/MainArea.vue +97 -97
  33. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +20 -20
  34. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +29 -29
  35. package/samples/BasicFocusControl/components/SideBar.vue +72 -72
  36. package/samples/BasicFocusControl/components/SideBarBlock.vue +29 -29
  37. package/samples/ClassNameDemo/App.vue +119 -119
  38. package/samples/ClassNameDemo/components/ContentItem.vue +252 -252
  39. package/samples/ClassNameDemo/components/LoadingView.vue +43 -43
  40. package/samples/ClassNameDemo/components/TitleView.vue +24 -24
  41. package/samples/ClassNameDemo/data.js +24 -24
  42. package/samples/ColorSpace/App.vue +134 -134
  43. package/samples/DemoHomepage/App.vue +31 -31
  44. package/samples/DemoHomepage/components/BodyFrame.vue +81 -81
  45. package/samples/DemoHomepage/components/Dialog.vue +93 -93
  46. package/samples/DemoHomepage/components/Item.vue +76 -76
  47. package/samples/DemoHomepage/components/TabFrame.vue +86 -86
  48. package/samples/DemoHomepage/router.js +132 -132
  49. package/samples/DemoHomepage/views/Homepage.vue +186 -186
  50. package/samples/FlipCard/App.vue +80 -80
  51. package/samples/FlipCard/FlipCard.vue +123 -123
  52. package/samples/FlipCard/data.js +12 -12
  53. package/samples/FlowMultiWidget/App.vue +90 -90
  54. package/samples/FlowMultiWidget/components/Block.vue +106 -106
  55. package/samples/FlowMultiWidget/components/FlowPage.vue +59 -59
  56. package/samples/FlowMultiWidget/components/Item.vue +102 -102
  57. package/samples/FlowMultiWidget/components/MenuItem.vue +71 -71
  58. package/samples/FlowMultiWidget/components/MyMenu.vue +89 -89
  59. package/samples/FlowMultiWidget/data.js +446 -446
  60. package/samples/HashHistory/App.vue +124 -124
  61. package/samples/HashHistory/components/HorizontalButtonList.vue +113 -113
  62. package/samples/HashHistory/components/Item.vue +73 -73
  63. package/samples/HashHistory/router.js +29 -29
  64. package/samples/HashHistory/views/BasePage.vue +18 -18
  65. package/samples/HashHistory/views/MainPage.vue +67 -67
  66. package/samples/HashHistory/views/SubPage.vue +78 -78
  67. package/samples/HashHistory/views/SubPageFirst.vue +9 -9
  68. package/samples/HashHistory/views/SubPageSecond.vue +9 -9
  69. package/samples/LongImage/App.vue +96 -96
  70. package/samples/LongImage/Button.vue +153 -153
  71. package/samples/LongImage/LongImageScroll.vue +126 -126
  72. package/samples/LongImage/Scroll.vue +15 -15
  73. package/samples/LongText/App.vue +111 -111
  74. package/samples/LongText/Button.vue +153 -153
  75. package/samples/LongText/LongTextScroll.vue +224 -224
  76. package/samples/LongText/Scroll.vue +15 -15
  77. package/samples/Preload/App.vue +145 -145
  78. package/samples/Preload/data.js +22 -22
  79. package/samples/Preload/preloadItem.vue +21 -21
  80. package/samples/QrcodeDemo/App.vue +72 -72
  81. package/samples/SimpleWidgetDemo/App.vue +203 -203
  82. package/samples/SimpleWidgetDemo/Item.vue +82 -82
  83. package/samples/SimpleWidgetDemo/components/ContentItem.vue +411 -411
  84. package/samples/SimpleWidgetDemo/components/MyTab.vue +116 -116
  85. package/samples/SimpleWidgetDemo/data.js +110 -110
  86. package/samples/SprayView/App.vue +269 -269
  87. package/samples/SpriteImage/App.vue +174 -174
  88. package/samples/SpriteImage/images/egg_break.json +116 -116
  89. package/samples/TextBox/App.vue +178 -178
  90. package/samples/TextBox/RenderCenter.vue +108 -108
  91. package/samples/TextBox/RenderLeft.vue +108 -108
  92. package/samples/TextBox/RenderOneLine.vue +119 -119
  93. package/samples/TextBox/RenderRight.vue +106 -106
  94. package/samples/TextShadowDemo/App.vue +97 -97
  95. package/samples/TextureSize/App.vue +141 -141
  96. package/samples/ThrowMoveDemo/AccelerateDemo.vue +117 -117
  97. package/samples/ThrowMoveDemo/App.vue +113 -113
  98. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +115 -115
  99. package/samples/ThrowMoveDemo/TargetDemo.vue +116 -116
  100. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +121 -121
  101. package/samples/TransitPage/App.vue +40 -40
  102. package/samples/VideoDemo/App.vue +137 -137
  103. package/samples/VideoDemo/components/Button.vue +68 -68
  104. package/samples/VideoDemo/components/Controllor.vue +195 -195
  105. package/samples/VideoDemo/components/VideoFrame.vue +152 -152
  106. package/scripts/common.js +57 -115
  107. package/scripts/jsview-install-local-packages.js +73 -73
  108. package/scripts/jsview-post-build.js +127 -127
  109. package/scripts/jsview-post-install.js +78 -78
  110. package/scripts/jsview-run-android.js +64 -64
  111. package/utils/JsViewEngineWidget/bin/index.js +1 -1
  112. package/utils/JsViewEngineWidget/bin/package.json +11 -11
  113. package/utils/JsViewVueTools/JsvHashHistory.js +111 -111
  114. package/utils/JsViewVueTools/JsvRuntimeBridge.js +417 -417
  115. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +80 -80
  116. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +147 -147
  117. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserSpray.vue +54 -54
  118. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/ApicDataBase.js +28 -28
  119. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/BrowserApic.vue +123 -123
  120. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/GifData.js +83 -83
  121. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/LoopToolBase.js +25 -25
  122. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/NormalLoopTool.js +61 -61
  123. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/PartLoopTool.js +119 -119
  124. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/Viewer.js +106 -106
  125. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/WebpData.js +141 -141
  126. package/utils/JsViewVueWidget/BrowserDebugWidget/WidgetLoader.js +20 -20
  127. package/utils/JsViewVueWidget/JsvActorMove/ActorControlBase.js +204 -204
  128. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +63 -63
  129. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMoveControl.js +426 -426
  130. package/utils/JsViewVueWidget/JsvActorMove/index.js +12 -12
  131. package/utils/JsViewVueWidget/JsvApic/JsvApic.vue +178 -178
  132. package/utils/JsViewVueWidget/JsvApic/index.js +17 -17
  133. package/utils/JsViewVueWidget/JsvMarquee.vue +196 -196
  134. package/utils/JsViewVueWidget/JsvNinePatch.vue +76 -76
  135. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +350 -350
  136. package/utils/JsViewVueWidget/JsvPreload/index.js +21 -21
  137. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +140 -140
  138. package/utils/JsViewVueWidget/JsvQrcode/index.js +18 -18
  139. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +139 -139
  140. package/utils/JsViewVueWidget/JsvSpray/index.js +14 -14
  141. package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +447 -447
  142. package/utils/JsViewVueWidget/JsvSpriteAnim/SpriteController.js +56 -56
  143. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +6 -6
  144. package/utils/JsViewVueWidget/JsvSwiper/Indicator.vue +34 -34
  145. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +494 -494
  146. package/utils/JsViewVueWidget/JsvSwiper/index.js +9 -9
  147. package/utils/JsViewVueWidget/JsvSwiper3D/Indicator.vue +34 -34
  148. package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +403 -403
  149. package/utils/JsViewVueWidget/JsvSwiper3D/index.js +9 -9
  150. package/utils/JsViewVueWidget/JsvTextBox.vue +110 -110
  151. package/utils/JsViewVueWidget/JsvVideo.vue +35 -35
  152. package/patches/node_modules/@babel/preset-env/lib/available-plugins.js +0 -219
  153. package/patches/node_modules/@vue/cli-plugin-typescript/index.js +0 -100
  154. package/patches/node_modules/@vue/cli-service/lib/commands/serve.js +0 -395
  155. package/patches/node_modules/@vue/cli-service/lib/config/app.js +0 -272
  156. package/patches/node_modules/@vue/cli-service/lib/config/assets.js +0 -70
  157. package/patches/node_modules/@vue/cli-service/lib/config/base.js +0 -212
  158. package/patches/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +0 -2566
  159. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-css-to-js.js +0 -274
  160. package/patches/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js +0 -1596
  161. package/patches/node_modules/postcss-js/objectifier.js +0 -90
  162. package/patches/node_modules/vue-loader/dist/resolveScript.js +0 -70
  163. package/scripts/deploy-fast-pack.js +0 -17
  164. package/scripts/deploy-fast-publish.js +0 -44
  165. package/scripts/deploy-git-commit-empty.js +0 -21
  166. package/scripts/deploy-prepare.js +0 -56
  167. package/scripts/make-js.sh +0 -181
  168. package/vetur.config.js +0 -5
@@ -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 }