@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,69 +1,69 @@
1
- <script>
2
- import { Options, Vue } from "vue-class-component";
3
-
4
- @Options({
5
- props: {
6
- style: Object,
7
- autoFocus: Boolean,
8
- name: String,
9
- onClick: Function,
10
- }
11
- })
12
-
13
- class Button extends Vue {
14
- constructor(props) {
15
- super(props);
16
-
17
- this.hasFocused = false;
18
- }
19
-
20
- onFocus() {
21
- this.hasFocused = true;
22
- }
23
-
24
- onBlur() {
25
- this.hasFocused = false;
26
- }
27
-
28
- onKeyDown(ev) {
29
- if(ev.keyCode === 13) { // Enter
30
- this.onClick?.();
31
- return true;
32
- }
33
- return false;
34
- }
35
-
36
- getAction() {
37
- return {
38
- onFocus: this.onFocus,
39
- onBlur: this.onBlur,
40
- onKeyDown: this.onKeyDown
41
- }
42
- }
43
- }
44
-
45
- export default Button;
46
- </script>
47
-
48
- <template>
49
- <jsv-focus-block :name="name" :autoFocus="autoFocus?'':undefined"
50
- :onAction="getAction()"
51
- >
52
- <div class="item"
53
- :style="{
54
- ...style,
55
- backgroundColor: hasFocused ? '#FFFF00' : '#A8A8A8',
56
- }"
57
- >
58
- <slot/>
59
- </div>
60
- </jsv-focus-block>
61
- </template>
62
-
63
- <style scoped>
64
- .item {
65
- text-align: center;
66
- font-size: 24;
67
- line-height: 40;
68
- }
1
+ <script>
2
+ import { Options, Vue } from "vue-class-component";
3
+
4
+ @Options({
5
+ props: {
6
+ style: Object,
7
+ autoFocus: Boolean,
8
+ name: String,
9
+ onClick: Function,
10
+ }
11
+ })
12
+
13
+ class Button extends Vue {
14
+ constructor(props) {
15
+ super(props);
16
+
17
+ this.hasFocused = false;
18
+ }
19
+
20
+ onFocus() {
21
+ this.hasFocused = true;
22
+ }
23
+
24
+ onBlur() {
25
+ this.hasFocused = false;
26
+ }
27
+
28
+ onKeyDown(ev) {
29
+ if(ev.keyCode === 13) { // Enter
30
+ this.onClick?.();
31
+ return true;
32
+ }
33
+ return false;
34
+ }
35
+
36
+ getAction() {
37
+ return {
38
+ onFocus: this.onFocus,
39
+ onBlur: this.onBlur,
40
+ onKeyDown: this.onKeyDown
41
+ }
42
+ }
43
+ }
44
+
45
+ export default Button;
46
+ </script>
47
+
48
+ <template>
49
+ <jsv-focus-block :name="name" :autoFocus="autoFocus?'':undefined"
50
+ :onAction="getAction()"
51
+ >
52
+ <div class="item"
53
+ :style="{
54
+ ...style,
55
+ backgroundColor: hasFocused ? '#FFFF00' : '#A8A8A8',
56
+ }"
57
+ >
58
+ <slot/>
59
+ </div>
60
+ </jsv-focus-block>
61
+ </template>
62
+
63
+ <style scoped>
64
+ .item {
65
+ text-align: center;
66
+ font-size: 24;
67
+ line-height: 40;
68
+ }
69
69
  </style>
@@ -1,195 +1,195 @@
1
- <script>
2
- import { inject } from 'vue'
3
- import { Options, Vue } from "vue-class-component";
4
- import Button from "./Button.vue";
5
-
6
- @Options({
7
- props: {
8
- style: { type: Object, default: {width:1400,height:50} },
9
- },
10
- components: {
11
- Button,
12
- },
13
- })
14
-
15
- class Controllor extends Vue {
16
- constructor(props) {
17
- super(props);
18
- this.useTexture = inject('useTexture');
19
- this.objectFit = inject('objectFit');
20
- this.videoRect = inject('videoRect');
21
- this.playVideo = inject('playVideo');
22
- this.seekVideo = inject('seekVideo');
23
- this.enableAnimation = inject('enableAnimation');
24
- this.videoTime = inject('videoTime');
25
- this.objectFitTitle = inject('objectFitTitle');
26
-
27
- this.buttonList = this.getButtonList();
28
-
29
- this.objectFitData = [
30
- { name: "contain-horizontal", objectFit: "contain", width: 1200 },
31
- { name: "contain-vertical", objectFit: "contain", width: 400 },
32
- { name: "fill", objectFit: "fill", width: 1200 },
33
- { name: "none-horizontal", objectFit: "none", width: 1200 },
34
- { name: "none-vertical", objectFit: "none", width: 400 },
35
- { name: "cover-horizontal", objectFit: "cover", width: 1200 },
36
- { name: "cover-vertical", objectFit: "cover", width: 400 },
37
- ];
38
- this.objectFitIndex = 0;
39
-
40
- this.focusedItemIndex = 0;
41
- }
42
-
43
- created() {
44
- this.useTexture = true;
45
- this.setObjectFit(0);
46
- this.playVideo = !window.jsvIsBrowserDebug; // jsview自动播放该视频 TODO h5需做相应调整;
47
- this.enableAnimation = false;
48
- }
49
-
50
- onKeyDown(ev) {
51
- // 8:Backspace, 27:Escape, 10000:盒子返回键
52
- if(ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
53
- this.$router?.go(-1); // 有router时,回退
54
- return true;
55
- }
56
-
57
- let changeFocusTo = -1;
58
- const buttonCount = this.getButtonDataLength();
59
- switch (ev.keyCode) {
60
- case 37: // Left
61
- changeFocusTo = (this.focusedItemIndex - 1 + buttonCount) % buttonCount;
62
- break;
63
- case 39: // Right
64
- changeFocusTo = (this.focusedItemIndex + 1) % buttonCount;
65
- break;
66
- default:
67
- break;
68
- }
69
- if (changeFocusTo >= 0) {
70
- ev.ownerNode.findBlockByName((changeFocusTo+10).toString()).requestFocus();
71
- this.focusedItemIndex = changeFocusTo;
72
- return true;
73
- }
74
-
75
- return false;
76
- }
77
-
78
- getButtonList() {
79
- const buttonList = [{
80
- name: "ToVideoMode",
81
- onClick: () => {
82
- this.playVideo = null; // 停止并初始化播放
83
- this.enableAnimation = false;
84
- this.videoTime.currentTime = 0;
85
- this.videoTime.duration = 0;
86
- this.useTexture = !this.useTexture;
87
- },
88
- isModeButton: true,
89
- }, {
90
- name: "Play",
91
- onClick: () => {
92
- this.playVideo = !this.playVideo;
93
- },
94
- isPlayButton: true,
95
- }, {
96
- name: "Forward",
97
- onClick: () => {
98
- this.seekVideo = (this.seekVideo !== 5 ? 5 : 5.1/* 为了触发ref更新 */);
99
- }
100
- }, {
101
- name: "Rewind",
102
- onClick: () => {
103
- this.seekVideo = (this.seekVideo !== -5 ? -5 : -5.1/* 为了触发ref更新 */);
104
- }
105
- }, {
106
- name: "ObjectFit",
107
- onClick: this.setObjectFit.bind(this)
108
- }, {
109
- name: "StartAnimation",
110
- onClick: () => {
111
- this.enableAnimation = !this.enableAnimation
112
- },
113
- isAnimationButton: true,
114
- },
115
- ];
116
-
117
- return buttonList;
118
- }
119
-
120
- getButtonData() {
121
- let length = this.buttonList.length;
122
- if(!this.useTexture) { // 只有texture方式可以做animation
123
- length -= 1;
124
- }
125
-
126
- let data = [];
127
- for(let idx = 0; idx < length; idx++) {
128
- const button = this.buttonList[idx];
129
- data.push({
130
- ...button,
131
- size: {
132
- width: 180,
133
- height: 40,
134
- }
135
- });
136
- }
137
- return data;
138
- }
139
-
140
- getButtonDataLength() {
141
- let length = this.buttonList.length;
142
- if(!this.useTexture) { // 只有texture方式可以做animation
143
- length -= 1;
144
- }
145
-
146
- return length;
147
- }
148
-
149
- setObjectFit(index) {
150
- if(typeof index === 'number') {
151
- this.objectFitIndex = index;
152
- } else {
153
- this.objectFitIndex = (++this.objectFitIndex % this.objectFitData.length);
154
- }
155
- const data = this.objectFitData[this.objectFitIndex];
156
- this.objectFit = data.objectFit;
157
- this.objectFitTitle = data.name;
158
- this.videoRect = {
159
- left: (1280 - data.width) / 2, top: 50,
160
- width: data.width, height: 500,
161
- }
162
- }
163
-
164
- getShowName(item) {
165
- if(item.isModeButton) {
166
- return this.useTexture ? "ToVideoMode" : "ToOffscreenMode";
167
- } else if(item.isPlayButton) {
168
- return this.playVideo ? 'Pause' : 'Play'
169
- } else if(item.isAnimationButton) {
170
- return this.enableAnimation ? "StopAnimation" : "StartAnimation";
171
- }
172
- return item.name;
173
- }
174
- }
175
-
176
- export default Controllor;
177
- </script>
178
-
179
- <template>
180
- <div :style="style" :key="useTexture" :set="leftOffset=0">
181
- <jsv-focus-block :namespace="controllor" :onKeyDown="onKeyDown">
182
- <Button v-for="(item,index) in getButtonData()" :key="index" :set="leftOffset+=(item.size.width+10)"
183
- :style="{ left: leftOffset-item.size.width, width:item.size.width, height:item.size.height }"
184
- :autoFocus="index === 0"
185
- :name="(index+10).toString()"
186
- :onClick="item.onClick"
187
- >
188
- {{ getShowName(item) }}
189
- </Button>
190
- </jsv-focus-block>
191
- </div>
192
- </template>
193
-
194
- <style scoped>
195
- </style>
1
+ <script>
2
+ import { inject } from 'vue'
3
+ import { Options, Vue } from "vue-class-component";
4
+ import Button from "./Button.vue";
5
+
6
+ @Options({
7
+ props: {
8
+ style: { type: Object, default: {width:1400,height:50} },
9
+ },
10
+ components: {
11
+ Button,
12
+ },
13
+ })
14
+
15
+ class Controllor extends Vue {
16
+ constructor(props) {
17
+ super(props);
18
+ this.useTexture = inject('useTexture');
19
+ this.objectFit = inject('objectFit');
20
+ this.videoRect = inject('videoRect');
21
+ this.playVideo = inject('playVideo');
22
+ this.seekVideo = inject('seekVideo');
23
+ this.enableAnimation = inject('enableAnimation');
24
+ this.videoTime = inject('videoTime');
25
+ this.objectFitTitle = inject('objectFitTitle');
26
+
27
+ this.buttonList = this.getButtonList();
28
+
29
+ this.objectFitData = [
30
+ { name: "contain-horizontal", objectFit: "contain", width: 1200 },
31
+ { name: "contain-vertical", objectFit: "contain", width: 400 },
32
+ { name: "fill", objectFit: "fill", width: 1200 },
33
+ { name: "none-horizontal", objectFit: "none", width: 1200 },
34
+ { name: "none-vertical", objectFit: "none", width: 400 },
35
+ { name: "cover-horizontal", objectFit: "cover", width: 1200 },
36
+ { name: "cover-vertical", objectFit: "cover", width: 400 },
37
+ ];
38
+ this.objectFitIndex = 0;
39
+
40
+ this.focusedItemIndex = 0;
41
+ }
42
+
43
+ created() {
44
+ this.useTexture = true;
45
+ this.setObjectFit(0);
46
+ this.playVideo = !window.jsvIsBrowserDebug; // jsview自动播放该视频 TODO h5需做相应调整;
47
+ this.enableAnimation = false;
48
+ }
49
+
50
+ onKeyDown(ev) {
51
+ // 8:Backspace, 27:Escape, 10000:盒子返回键
52
+ if(ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
53
+ this.$router?.go(-1); // 有router时,回退
54
+ return true;
55
+ }
56
+
57
+ let changeFocusTo = -1;
58
+ const buttonCount = this.getButtonDataLength();
59
+ switch (ev.keyCode) {
60
+ case 37: // Left
61
+ changeFocusTo = (this.focusedItemIndex - 1 + buttonCount) % buttonCount;
62
+ break;
63
+ case 39: // Right
64
+ changeFocusTo = (this.focusedItemIndex + 1) % buttonCount;
65
+ break;
66
+ default:
67
+ break;
68
+ }
69
+ if (changeFocusTo >= 0) {
70
+ ev.ownerNode.findBlockByName((changeFocusTo+10).toString()).requestFocus();
71
+ this.focusedItemIndex = changeFocusTo;
72
+ return true;
73
+ }
74
+
75
+ return false;
76
+ }
77
+
78
+ getButtonList() {
79
+ const buttonList = [{
80
+ name: "ToVideoMode",
81
+ onClick: () => {
82
+ this.playVideo = null; // 停止并初始化播放
83
+ this.enableAnimation = false;
84
+ this.videoTime.currentTime = 0;
85
+ this.videoTime.duration = 0;
86
+ this.useTexture = !this.useTexture;
87
+ },
88
+ isModeButton: true,
89
+ }, {
90
+ name: "Play",
91
+ onClick: () => {
92
+ this.playVideo = !this.playVideo;
93
+ },
94
+ isPlayButton: true,
95
+ }, {
96
+ name: "Forward",
97
+ onClick: () => {
98
+ this.seekVideo = (this.seekVideo !== 5 ? 5 : 5.1/* 为了触发ref更新 */);
99
+ }
100
+ }, {
101
+ name: "Rewind",
102
+ onClick: () => {
103
+ this.seekVideo = (this.seekVideo !== -5 ? -5 : -5.1/* 为了触发ref更新 */);
104
+ }
105
+ }, {
106
+ name: "ObjectFit",
107
+ onClick: this.setObjectFit.bind(this)
108
+ }, {
109
+ name: "StartAnimation",
110
+ onClick: () => {
111
+ this.enableAnimation = !this.enableAnimation
112
+ },
113
+ isAnimationButton: true,
114
+ },
115
+ ];
116
+
117
+ return buttonList;
118
+ }
119
+
120
+ getButtonData() {
121
+ let length = this.buttonList.length;
122
+ if(!this.useTexture) { // 只有texture方式可以做animation
123
+ length -= 1;
124
+ }
125
+
126
+ let data = [];
127
+ for(let idx = 0; idx < length; idx++) {
128
+ const button = this.buttonList[idx];
129
+ data.push({
130
+ ...button,
131
+ size: {
132
+ width: 180,
133
+ height: 40,
134
+ }
135
+ });
136
+ }
137
+ return data;
138
+ }
139
+
140
+ getButtonDataLength() {
141
+ let length = this.buttonList.length;
142
+ if(!this.useTexture) { // 只有texture方式可以做animation
143
+ length -= 1;
144
+ }
145
+
146
+ return length;
147
+ }
148
+
149
+ setObjectFit(index) {
150
+ if(typeof index === 'number') {
151
+ this.objectFitIndex = index;
152
+ } else {
153
+ this.objectFitIndex = (++this.objectFitIndex % this.objectFitData.length);
154
+ }
155
+ const data = this.objectFitData[this.objectFitIndex];
156
+ this.objectFit = data.objectFit;
157
+ this.objectFitTitle = data.name;
158
+ this.videoRect = {
159
+ left: (1280 - data.width) / 2, top: 50,
160
+ width: data.width, height: 500,
161
+ }
162
+ }
163
+
164
+ getShowName(item) {
165
+ if(item.isModeButton) {
166
+ return this.useTexture ? "ToVideoMode" : "ToOffscreenMode";
167
+ } else if(item.isPlayButton) {
168
+ return this.playVideo ? 'Pause' : 'Play'
169
+ } else if(item.isAnimationButton) {
170
+ return this.enableAnimation ? "StopAnimation" : "StartAnimation";
171
+ }
172
+ return item.name;
173
+ }
174
+ }
175
+
176
+ export default Controllor;
177
+ </script>
178
+
179
+ <template>
180
+ <div :style="style" :key="useTexture" :set="leftOffset=0">
181
+ <jsv-focus-block :namespace="controllor" :onKeyDown="onKeyDown">
182
+ <Button v-for="(item,index) in getButtonData()" :key="index" :set="leftOffset+=(item.size.width+10)"
183
+ :style="{ left: leftOffset-item.size.width, width:item.size.width, height:item.size.height }"
184
+ :autoFocus="index === 0"
185
+ :name="(index+10).toString()"
186
+ :onClick="item.onClick"
187
+ >
188
+ {{ getShowName(item) }}
189
+ </Button>
190
+ </jsv-focus-block>
191
+ </div>
192
+ </template>
193
+
194
+ <style scoped>
195
+ </style>