@shijiu/jsview-vue 0.9.502 → 0.9.631

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 (240) hide show
  1. package/dom/bin/jsview-browser-debug-dom.min.js +1 -1
  2. package/dom/bin/jsview-dom.min.js +1 -1
  3. package/dom/target_core_revision.js +4 -3
  4. package/index.js +10 -0
  5. package/package.json +8 -1
  6. package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +16 -5
  7. package/samples/AnimPicture/App.vue +89 -106
  8. package/samples/Basic/App.vue +65 -68
  9. package/samples/Basic/components/ContentBlock.vue +31 -36
  10. package/samples/Basic/components/anim/AnimGroup.vue +61 -75
  11. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +54 -43
  12. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +25 -31
  13. package/samples/Basic/components/anim/AnimTransition.vue +142 -105
  14. package/samples/Basic/components/div/DivBackground.vue +38 -16
  15. package/samples/Basic/components/div/DivClip.vue +143 -78
  16. package/samples/Basic/components/div/DivCssScoped.vue +10 -10
  17. package/samples/Basic/components/div/DivCssVar.vue +40 -42
  18. package/samples/Basic/components/div/DivGroup1.vue +45 -39
  19. package/samples/Basic/components/div/DivGroup2.vue +56 -45
  20. package/samples/Basic/components/div/DivLayout.vue +63 -5
  21. package/samples/Basic/components/div/DivRadius.vue +51 -42
  22. package/samples/Basic/components/div/DivTransform.vue +21 -16
  23. package/samples/Basic/components/panel/Panel1.vue +46 -44
  24. package/samples/Basic/components/panel/Panel2.vue +22 -26
  25. package/samples/Basic/components/panel/TitleBar.vue +12 -12
  26. package/samples/Basic/components/text/TextAlign.vue +54 -44
  27. package/samples/Basic/components/text/TextEmoji.vue +16 -20
  28. package/samples/Basic/components/text/TextFontStyle.vue +77 -53
  29. package/samples/Basic/components/text/TextGroup1.vue +46 -38
  30. package/samples/Basic/components/text/TextGroup2.vue +25 -28
  31. package/samples/Basic/components/text/TextOverflow.vue +78 -59
  32. package/samples/BasicFocusControl/App.vue +22 -43
  33. package/samples/BasicFocusControl/components/BaseBlock.vue +42 -43
  34. package/samples/BasicFocusControl/components/MainArea.vue +55 -70
  35. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +11 -15
  36. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +21 -24
  37. package/samples/BasicFocusControl/components/SideBar.vue +32 -47
  38. package/samples/BasicFocusControl/components/SideBarBlock.vue +20 -23
  39. package/samples/Collision/App.vue +452 -0
  40. package/samples/ColorSpace/App.vue +15 -24
  41. package/samples/DemoHomepage/App.vue +7 -11
  42. package/samples/DemoHomepage/components/BodyFrame.vue +21 -9
  43. package/samples/DemoHomepage/components/TabFrame.vue +7 -8
  44. package/samples/DemoHomepage/router.js +52 -33
  45. package/samples/DemoHomepage/views/Homepage.vue +18 -9
  46. package/samples/FilterDemo/AnimatePic.vue +58 -0
  47. package/samples/FilterDemo/App.vue +99 -61
  48. package/samples/FilterDemo/VideoLayer.vue +62 -0
  49. package/samples/FlipCard/App.vue +32 -41
  50. package/samples/FlipCard/FlipCard.vue +48 -54
  51. package/samples/GridDemo/App.vue +109 -77
  52. package/samples/GridDemo/ButtonBlock.vue +50 -49
  53. package/samples/GridDemo/FocusItem.vue +19 -38
  54. package/samples/GridDemo/Item.vue +46 -54
  55. package/samples/HashHistory/App.vue +63 -79
  56. package/samples/HashHistory/components/HorizontalButtonList.vue +72 -95
  57. package/samples/HashHistory/components/Item.vue +42 -56
  58. package/samples/HashHistory/router.js +23 -12
  59. package/samples/HashHistory/views/MainPage.vue +35 -46
  60. package/samples/HashHistory/views/SubPage.vue +34 -47
  61. package/samples/ImpactStop/App.vue +435 -0
  62. package/samples/Input/App.vue +8 -18
  63. package/samples/Input/FullKeyboard.vue +2 -6
  64. package/samples/Input/InputPanel.vue +18 -12
  65. package/samples/Input/KeyboardItem.vue +1 -1
  66. package/samples/LongImage/App.vue +11 -27
  67. package/samples/LongImage/Button.vue +50 -145
  68. package/samples/LongImage/ButtonItem.vue +44 -0
  69. package/samples/LongImage/LongImageScroll.vue +71 -106
  70. package/samples/LongImage/Scroll.vue +7 -9
  71. package/samples/LongText/App.vue +13 -28
  72. package/samples/LongText/Button.vue +43 -145
  73. package/samples/LongText/ButtonItem.vue +44 -0
  74. package/samples/LongText/LongTextScroll.vue +68 -101
  75. package/samples/LongText/Scroll.vue +7 -9
  76. package/samples/Marquee/App.vue +34 -37
  77. package/samples/MaskClip/App.vue +17 -30
  78. package/samples/MetroWidgetDemos/Advanced/App.vue +47 -0
  79. package/samples/MetroWidgetDemos/Advanced/ButtonItem.vue +90 -0
  80. package/samples/MetroWidgetDemos/Advanced/Buttons.vue +70 -0
  81. package/samples/MetroWidgetDemos/Advanced/Mixed.vue +77 -0
  82. package/samples/MetroWidgetDemos/Advanced/Widgets.vue +71 -0
  83. package/samples/MetroWidgetDemos/Item.vue +67 -0
  84. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/App.vue +80 -104
  85. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/Item.vue +7 -0
  86. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/bg.jpg +0 -0
  87. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_content.png +0 -0
  88. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_left.png +0 -0
  89. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_mid.png +0 -0
  90. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_right.png +0 -0
  91. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/focus_border.png +0 -0
  92. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/holder_logo.png +0 -0
  93. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/jrbm.png +0 -0
  94. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_left.png +0 -0
  95. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_mid.png +0 -0
  96. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_right.png +0 -0
  97. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/loading.png +0 -0
  98. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/logo.png +0 -0
  99. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/mcjx.png +0 -0
  100. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tao.png +0 -0
  101. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tmall.png +0 -0
  102. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/border.png +0 -0
  103. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/ContentItem.vue +60 -86
  104. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/MyTab.vue +0 -0
  105. package/samples/MetroWidgetDemos/PerformanceTest/data.js +45 -0
  106. package/samples/MetroWidgetDemos/PingPong/App.vue +135 -0
  107. package/samples/MetroWidgetDemos/PingPong/AppPage.vue +73 -0
  108. package/samples/MetroWidgetDemos/PingPong/AppTab.vue +62 -0
  109. package/samples/MetroWidgetDemos/PingPong/TabItem.vue +84 -0
  110. package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +214 -0
  111. package/samples/MetroWidgetDemos/Simple/AbsoluteTemplate.vue +75 -0
  112. package/samples/MetroWidgetDemos/Simple/App.vue +45 -0
  113. package/samples/MetroWidgetDemos/Simple/RelativeTemplate.vue +111 -0
  114. package/samples/MetroWidgetDemos/WidgetItem.vue +89 -0
  115. package/samples/MetroWidgetDemos/data.js +204 -0
  116. package/samples/NinePatchDemo/App.vue +114 -115
  117. package/samples/NinePatchDemo/Item.vue +7 -8
  118. package/samples/Preload/App.vue +67 -64
  119. package/samples/Preload/Item.vue +21 -29
  120. package/samples/QrcodeDemo/App.vue +24 -29
  121. package/samples/SoundPool/App.vue +77 -106
  122. package/samples/SprayView/App.vue +10 -8
  123. package/samples/SpriteImage/App.vue +1 -2
  124. package/samples/TextBox/App.vue +86 -101
  125. package/samples/TextBox/RenderCenter.vue +1 -1
  126. package/samples/TextBox/RenderLeft.vue +1 -1
  127. package/samples/TextBox/RenderOneLine.vue +1 -1
  128. package/samples/TextBox/RenderRight.vue +1 -1
  129. package/samples/TextShadowDemo/App.vue +1 -2
  130. package/samples/TextureAnimation/App.vue +16 -13
  131. package/samples/TextureAnimation/App2.vue +111 -0
  132. package/samples/TextureAnimation/assets/blackWhiteGrid.png +0 -0
  133. package/samples/TextureAnimation/assets/light.png +0 -0
  134. package/samples/TextureAnimation/assets/light2.png +0 -0
  135. package/samples/TextureAnimation/assets/mask.png +0 -0
  136. package/samples/TextureSize/App.vue +15 -25
  137. package/samples/ThrowMoveDemo/AccelerateDemo.vue +2 -4
  138. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +2 -3
  139. package/samples/ThrowMoveDemo/TargetDemo.vue +3 -4
  140. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +2 -3
  141. package/samples/TouchSample/App.vue +2 -3
  142. package/samples/TouchSample/Item.vue +15 -13
  143. package/samples/TouchSample/MetroWidgetHorizontal.vue +2 -2
  144. package/samples/TouchSample/MetroWidgetVertical.vue +1 -1
  145. package/samples/TouchSample/TouchContainerHorizontal.vue +4 -3
  146. package/samples/TouchSample/TouchContainerVertical.vue +3 -2
  147. package/samples/TransitPage/App.vue +20 -32
  148. package/samples/VideoDemo/App.vue +65 -81
  149. package/samples/VideoDemo/components/Button.vue +41 -52
  150. package/samples/VideoDemo/components/Controllor.vue +171 -169
  151. package/samples/VideoDemo/components/VideoFrame.vue +87 -99
  152. package/samples/VisibleSensorDemo/App.vue +234 -0
  153. package/scripts/jsview-jsmap-serve.js +42 -0
  154. package/scripts/jsview-post-install.js +1 -1
  155. package/tsconfig.json +3 -0
  156. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +204 -193
  157. package/utils/JsViewEngineWidget/JsvFocusManager.js +30 -17
  158. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +1561 -1656
  159. package/utils/JsViewEngineWidget/MetroWidget/PageUpdater.js +136 -0
  160. package/utils/JsViewEngineWidget/MetroWidget/ToolFunctions.js +18 -0
  161. package/utils/JsViewEngineWidget/TemplateParser.js +111 -1
  162. package/utils/JsViewEngineWidget/WidgetCommon.js +8 -2
  163. package/utils/JsViewEngineWidget/index.js +4 -4
  164. package/utils/JsViewPlugin/JsvPlayer/GetVersion.js +1 -1
  165. package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +301 -58
  166. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +22 -3
  167. package/utils/JsViewPlugin/JsvPlayer/index.js +8 -1
  168. package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
  169. package/utils/JsViewVueTools/JsvImpactTracer.js +113 -0
  170. package/utils/JsViewVueTools/JsvRefTaker.js +35 -0
  171. package/utils/JsViewVueTools/index.js +20 -0
  172. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +11 -1
  173. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +8 -4
  174. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserTextureAnim.vue +203 -14
  175. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +2 -2
  176. package/utils/JsViewVueWidget/JsvApic/JsvApic.vue +2 -2
  177. package/utils/JsViewVueWidget/JsvFilterView.vue +59 -51
  178. package/utils/JsViewVueWidget/JsvGrid.vue +139 -41
  179. package/utils/JsViewVueWidget/JsvInput/Cursor.vue +4 -2
  180. package/utils/JsViewVueWidget/JsvInput/JsvInput.vue +13 -12
  181. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +3 -1
  182. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +8 -17
  183. package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
  184. package/utils/JsViewVueWidget/JsvPosterDiv.vue +37 -7
  185. package/utils/JsViewVueWidget/JsvPosterImage.vue +34 -13
  186. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +39 -53
  187. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +1 -1
  188. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +13 -10
  189. package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +282 -285
  190. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -3
  191. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +6 -1
  192. package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +6 -1
  193. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +142 -61
  194. package/utils/JsViewVueWidget/JsvTextureAnim/index.js +9 -5
  195. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +7 -8
  196. package/utils/JsViewVueWidget/JsvVideo.vue +9 -12
  197. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +141 -0
  198. package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +9 -0
  199. package/utils/JsViewVueWidget/index.js +42 -0
  200. package/samples/AdvanceMetroWidget/App.vue +0 -123
  201. package/samples/AdvanceMetroWidget/Frame.vue +0 -102
  202. package/samples/AdvanceMetroWidget/Item.vue +0 -63
  203. package/samples/AdvanceMetroWidget/data.js +0 -137
  204. package/samples/ClassNameDemo/App.vue +0 -119
  205. package/samples/ClassNameDemo/components/ContentItem.vue +0 -253
  206. package/samples/ClassNameDemo/components/LoadingView.vue +0 -43
  207. package/samples/ClassNameDemo/components/TitleView.vue +0 -24
  208. package/samples/ClassNameDemo/data.js +0 -24
  209. package/samples/FlowMultiWidget/App.vue +0 -91
  210. package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
  211. package/samples/FlowMultiWidget/components/Block.vue +0 -107
  212. package/samples/FlowMultiWidget/components/FlowPage.vue +0 -60
  213. package/samples/FlowMultiWidget/components/Item.vue +0 -103
  214. package/samples/FlowMultiWidget/components/MenuItem.vue +0 -72
  215. package/samples/FlowMultiWidget/components/MyMenu.vue +0 -90
  216. package/samples/FlowMultiWidget/data.js +0 -446
  217. package/samples/HashHistory/views/BasePage.vue +0 -19
  218. package/samples/HashHistory/views/SubPageFirst.vue +0 -10
  219. package/samples/HashHistory/views/SubPageSecond.vue +0 -10
  220. package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
  221. package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
  222. package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
  223. package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
  224. package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
  225. package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
  226. package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
  227. package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
  228. package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
  229. package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
  230. package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
  231. package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
  232. package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
  233. package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
  234. package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
  235. package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
  236. package/samples/SimpleWidgetDemo/data.js +0 -124
  237. package/utils/JsViewEngineWidget/MetroWidget/ContentView.vue +0 -63
  238. package/utils/JsViewEngineWidget/MetroWidget/DivWrapper.vue +0 -51
  239. package/utils/JsViewEngineWidget/MetroWidget/ItemView.vue +0 -213
  240. package/utils/JsViewEngineWidget/MetroWidget/RootView.vue +0 -154
@@ -1,63 +1,52 @@
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;
1
+ <script setup>
2
+ import { ref } from "vue";
3
+ const props = defineProps({
4
+ style: Object,
5
+ autoFocus: Boolean,
6
+ name: String,
7
+ onClick: Function,
8
+ });
9
+
10
+ const hasFocused = ref(false);
11
+
12
+ const onFocus = () => {
13
+ hasFocused.value = true;
14
+ };
15
+
16
+ const onBlur = () => {
17
+ hasFocused.value = false;
18
+ };
19
+
20
+ const onKeyDown = (ev) => {
21
+ if (ev.keyCode === 13) {
22
+ // Enter
23
+ props.onClick?.();
24
+ return true;
26
25
  }
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;
26
+ return false;
27
+ };
46
28
  </script>
47
29
 
48
30
  <template>
49
- <jsv-focus-block :name="name" :autoFocus="autoFocus?'':undefined"
50
- :onAction="getAction()"
51
- >
52
- <div class="item"
31
+ <jsv-focus-block
32
+ :name="name"
33
+ :autoFocus="autoFocus ? '' : undefined"
34
+ :onAction="{
35
+ onFocus: onFocus,
36
+ onBlur: onBlur,
37
+ onKeyDown: onKeyDown,
38
+ }"
39
+ >
40
+ <div
41
+ class="item"
53
42
  :style="{
54
43
  ...style,
55
44
  backgroundColor: hasFocused ? '#FFFF00' : '#A8A8A8',
56
45
  }"
57
- >
58
- <slot/>
59
- </div>
60
- </jsv-focus-block>
46
+ >
47
+ <slot></slot>
48
+ </div>
49
+ </jsv-focus-block>
61
50
  </template>
62
51
 
63
52
  <style scoped>
@@ -1,194 +1,196 @@
1
- <script>
2
- import { inject } from 'vue'
3
- import { Options, Vue } from "vue-class-component";
1
+ <script setup>
2
+ import { inject } from "vue";
3
+ import { useRouter } from "vue-router";
4
4
  import Button from "./Button.vue";
5
5
 
6
- @Options({
7
- props: {
8
- style: { type: Object, default: {width:1400,height:50} },
6
+ const props = defineProps({
7
+ style: {
8
+ type: Object,
9
+ default() {
10
+ return { width: 1400, height: 50 };
11
+ },
9
12
  },
10
- components: {
11
- Button,
13
+ });
14
+ const router = useRouter();
15
+
16
+ const useTexture = inject("useTexture");
17
+ const objectFit = inject("objectFit");
18
+ const videoRect = inject("videoRect");
19
+ const playVideo = inject("playVideo");
20
+ const seekVideo = inject("seekVideo");
21
+ const enableAnimation = inject("enableAnimation");
22
+ const videoTime = inject("videoTime");
23
+ const objectFitTitle = inject("objectFitTitle");
24
+ let objectFitIndex = 0;
25
+ let focusedItemIndex = 0;
26
+
27
+ const setObjectFit = (index) => {
28
+ if (typeof index === "number") {
29
+ objectFitIndex = index;
30
+ } else {
31
+ objectFitIndex = ++objectFitIndex % objectFitData.length;
32
+ }
33
+ const data = objectFitData[objectFitIndex];
34
+ objectFit.value = data.objectFit;
35
+ objectFitTitle.value = data.name;
36
+ videoRect.value = {
37
+ left: (1280 - data.width) / 2,
38
+ top: 50,
39
+ width: data.width,
40
+ height: 500,
41
+ };
42
+ };
43
+
44
+ const buttonList = [
45
+ {
46
+ name: "ToVideoMode",
47
+ onClick: () => {
48
+ playVideo.value = null; // 停止并初始化播放
49
+ enableAnimation.value = false;
50
+ videoTime.currentTime = 0;
51
+ videoTime.duration = 0;
52
+ useTexture.value = !useTexture.value;
53
+ },
54
+ isModeButton: true,
12
55
  },
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;
56
+ {
57
+ name: "Play",
58
+ onClick: () => {
59
+ playVideo.value = !playVideo.value;
60
+ },
61
+ isPlayButton: true,
62
+ },
63
+ {
64
+ name: "Forward",
65
+ onClick: () => {
66
+ seekVideo.value = seekVideo.value !== 5 ? 5 : 5.1 /* 为了触发ref更新 */;
67
+ },
68
+ },
69
+ {
70
+ name: "Rewind",
71
+ onClick: () => {
72
+ seekVideo.value =
73
+ seekVideo.value !== -5 ? -5 : -5.1 /* 为了触发ref更新 */;
74
+ },
75
+ },
76
+ {
77
+ name: "ObjectFit",
78
+ onClick: setObjectFit,
79
+ },
80
+ {
81
+ name: "StartAnimation",
82
+ onClick: () => {
83
+ enableAnimation.value = !enableAnimation.value;
84
+ },
85
+ isAnimationButton: true,
86
+ },
87
+ ];
88
+ const objectFitData = [
89
+ { name: "contain-horizontal", objectFit: "contain", width: 1200 },
90
+ { name: "contain-vertical", objectFit: "contain", width: 400 },
91
+ { name: "fill", objectFit: "fill", width: 1200 },
92
+ { name: "none-horizontal", objectFit: "none", width: 1200 },
93
+ { name: "none-vertical", objectFit: "none", width: 400 },
94
+ { name: "cover-horizontal", objectFit: "cover", width: 1200 },
95
+ { name: "cover-vertical", objectFit: "cover", width: 400 },
96
+ ];
97
+
98
+ const getButtonData = () => {
99
+ let length = buttonList.length;
100
+ if (!useTexture.value) {
101
+ // 只有texture方式可以做animation
102
+ length -= 1;
41
103
  }
42
104
 
43
- created() {
44
- this.useTexture = true;
45
- this.setObjectFit(0);
46
- this.playVideo = !window.jsvIsBrowserDebug; // jsview自动播放该视频 TODO h5需做相应调整;
47
- this.enableAnimation = false;
105
+ let data = [];
106
+ for (let idx = 0; idx < length; idx++) {
107
+ const button = buttonList[idx];
108
+ data.push({
109
+ ...button,
110
+ size: {
111
+ width: 180,
112
+ height: 40,
113
+ },
114
+ });
48
115
  }
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;
116
+ return data;
117
+ };
118
+ const getButtonDataLength = () => {
119
+ let length = buttonList.length;
120
+ if (!useTexture.value) {
121
+ // 只有texture方式可以做animation
122
+ length -= 1;
76
123
  }
77
124
 
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;
125
+ return length;
126
+ };
127
+ const onKeyDown = (ev) => {
128
+ // 8:Backspace, 27:Escape, 10000:盒子返回键
129
+ if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
130
+ router?.go(-1); // 有router时,回退
131
+ return true;
118
132
  }
119
133
 
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;
134
+ let changeFocusTo = -1;
135
+ const buttonCount = getButtonDataLength();
136
+ switch (ev.keyCode) {
137
+ case 37: // Left
138
+ changeFocusTo = (focusedItemIndex - 1 + buttonCount) % buttonCount;
139
+ break;
140
+ case 39: // Right
141
+ changeFocusTo = (focusedItemIndex + 1) % buttonCount;
142
+ break;
143
+ default:
144
+ break;
138
145
  }
139
-
140
- getButtonDataLength() {
141
- let length = this.buttonList.length;
142
- if(!this.useTexture) { // 只有texture方式可以做animation
143
- length -= 1;
144
- }
145
-
146
- return length;
146
+ if (changeFocusTo >= 0) {
147
+ ev.ownerNode
148
+ .findBlockByName("video-" + (changeFocusTo + 10).toString())
149
+ .requestFocus();
150
+ focusedItemIndex = changeFocusTo;
151
+ return true;
147
152
  }
148
153
 
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
- }
154
+ return false;
155
+ };
163
156
 
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;
157
+ const getShowName = (item) => {
158
+ if (item.isModeButton) {
159
+ return useTexture.value ? "ToVideoMode" : "ToOffscreenMode";
160
+ } else if (item.isPlayButton) {
161
+ return playVideo.value ? "Pause" : "Play";
162
+ } else if (item.isAnimationButton) {
163
+ return enableAnimation.value ? "StopAnimation" : "StartAnimation";
173
164
  }
174
- }
165
+ return item.name;
166
+ };
175
167
 
176
- export default Controllor;
168
+ useTexture.value = false;
169
+ setObjectFit(0);
170
+ playVideo.value = !window.jsvIsBrowserDebug; // jsview自动播放该视频 TODO h5需做相应调整;
171
+ enableAnimation.value = false;
177
172
  </script>
178
173
 
179
174
  <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 }"
175
+ <div :style="style" :key="useTexture" :set="(leftOffset = 0)">
176
+ <jsv-focus-block :namespace="controllor" :onKeyDown="onKeyDown">
177
+ <Button
178
+ v-for="(item, index) in getButtonData()"
179
+ :key="index"
180
+ :set="(leftOffset += item.size.width + 10)"
181
+ :style="{
182
+ left: leftOffset - item.size.width,
183
+ width: item.size.width,
184
+ height: item.size.height,
185
+ }"
184
186
  :autoFocus="index === 0"
185
- :name="(index+10).toString()"
187
+ :name="'video-' + (index + 10).toString()"
186
188
  :onClick="item.onClick"
187
- >
188
- {{ getShowName(item) }}
189
- </Button>
190
- </jsv-focus-block>
191
- </div>
189
+ >
190
+ {{ getShowName(item) }}
191
+ </Button>
192
+ </jsv-focus-block>
193
+ </div>
192
194
  </template>
193
195
 
194
196
  <style scoped>