@shijiu/jsview-vue 0.9.500 → 0.9.602

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 (223) 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 +76 -57
  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/ColorSpace/App.vue +15 -24
  40. package/samples/DemoHomepage/App.vue +7 -11
  41. package/samples/DemoHomepage/components/BodyFrame.vue +19 -9
  42. package/samples/DemoHomepage/components/TabFrame.vue +7 -8
  43. package/samples/DemoHomepage/router.js +33 -34
  44. package/samples/DemoHomepage/views/Homepage.vue +24 -8
  45. package/samples/FilterDemo/AnimatePic.vue +58 -0
  46. package/samples/FilterDemo/App.vue +99 -61
  47. package/samples/FilterDemo/VideoLayer.vue +62 -0
  48. package/samples/FlipCard/App.vue +32 -41
  49. package/samples/FlipCard/FlipCard.vue +48 -54
  50. package/samples/GridDemo/App.vue +109 -77
  51. package/samples/GridDemo/ButtonBlock.vue +50 -49
  52. package/samples/GridDemo/FocusItem.vue +19 -38
  53. package/samples/GridDemo/Item.vue +46 -54
  54. package/samples/HashHistory/App.vue +63 -79
  55. package/samples/HashHistory/components/HorizontalButtonList.vue +72 -95
  56. package/samples/HashHistory/components/Item.vue +42 -56
  57. package/samples/HashHistory/router.js +23 -12
  58. package/samples/HashHistory/views/MainPage.vue +35 -46
  59. package/samples/HashHistory/views/SubPage.vue +34 -47
  60. package/samples/Input/App.vue +2 -3
  61. package/samples/Input/FullKeyboard.vue +2 -6
  62. package/samples/Input/InputPanel.vue +2 -3
  63. package/samples/Input/KeyboardItem.vue +1 -1
  64. package/samples/LongImage/App.vue +11 -27
  65. package/samples/LongImage/Button.vue +50 -145
  66. package/samples/LongImage/ButtonItem.vue +44 -0
  67. package/samples/LongImage/LongImageScroll.vue +71 -106
  68. package/samples/LongImage/Scroll.vue +7 -9
  69. package/samples/LongText/App.vue +13 -28
  70. package/samples/LongText/Button.vue +43 -145
  71. package/samples/LongText/ButtonItem.vue +44 -0
  72. package/samples/LongText/LongTextScroll.vue +68 -101
  73. package/samples/LongText/Scroll.vue +7 -9
  74. package/samples/Marquee/App.vue +34 -37
  75. package/samples/MaskClip/App.vue +17 -30
  76. package/samples/MetroWidgetDemos/Advanced/App.vue +47 -0
  77. package/samples/MetroWidgetDemos/Advanced/ButtonItem.vue +90 -0
  78. package/samples/MetroWidgetDemos/Advanced/Buttons.vue +70 -0
  79. package/samples/MetroWidgetDemos/Advanced/Mixed.vue +77 -0
  80. package/samples/MetroWidgetDemos/Advanced/Widgets.vue +71 -0
  81. package/samples/MetroWidgetDemos/Item.vue +67 -0
  82. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/App.vue +80 -104
  83. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/Item.vue +7 -0
  84. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/bg.jpg +0 -0
  85. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_content.png +0 -0
  86. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_left.png +0 -0
  87. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_mid.png +0 -0
  88. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_right.png +0 -0
  89. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/focus_border.png +0 -0
  90. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/holder_logo.png +0 -0
  91. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/jrbm.png +0 -0
  92. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_left.png +0 -0
  93. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_mid.png +0 -0
  94. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_right.png +0 -0
  95. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/loading.png +0 -0
  96. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/logo.png +0 -0
  97. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/mcjx.png +0 -0
  98. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tao.png +0 -0
  99. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tmall.png +0 -0
  100. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/border.png +0 -0
  101. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/ContentItem.vue +60 -86
  102. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/MyTab.vue +0 -0
  103. package/samples/MetroWidgetDemos/PerformanceTest/data.js +45 -0
  104. package/samples/MetroWidgetDemos/PingPong/App.vue +135 -0
  105. package/samples/MetroWidgetDemos/PingPong/AppPage.vue +58 -0
  106. package/samples/MetroWidgetDemos/PingPong/AppTab.vue +69 -0
  107. package/samples/MetroWidgetDemos/PingPong/Item.vue +92 -0
  108. package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +214 -0
  109. package/samples/MetroWidgetDemos/Simple/AbsoluteTemplate.vue +75 -0
  110. package/samples/MetroWidgetDemos/Simple/App.vue +45 -0
  111. package/samples/MetroWidgetDemos/Simple/RelativeTemplate.vue +111 -0
  112. package/samples/MetroWidgetDemos/WidgetItem.vue +89 -0
  113. package/samples/MetroWidgetDemos/data.js +204 -0
  114. package/samples/NinePatchDemo/App.vue +114 -115
  115. package/samples/NinePatchDemo/Item.vue +7 -8
  116. package/samples/Preload/App.vue +61 -63
  117. package/samples/Preload/Item.vue +21 -29
  118. package/samples/QrcodeDemo/App.vue +24 -29
  119. package/samples/SoundPool/App.vue +77 -106
  120. package/samples/SprayView/App.vue +10 -8
  121. package/samples/SpriteImage/App.vue +1 -2
  122. package/samples/TextBox/App.vue +86 -101
  123. package/samples/TextBox/RenderCenter.vue +1 -1
  124. package/samples/TextBox/RenderLeft.vue +1 -1
  125. package/samples/TextBox/RenderOneLine.vue +1 -1
  126. package/samples/TextBox/RenderRight.vue +1 -1
  127. package/samples/TextShadowDemo/App.vue +1 -2
  128. package/samples/TextureAnimation/App.vue +16 -13
  129. package/samples/TextureSize/App.vue +15 -25
  130. package/samples/ThrowMoveDemo/AccelerateDemo.vue +2 -4
  131. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +2 -3
  132. package/samples/ThrowMoveDemo/TargetDemo.vue +3 -4
  133. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +2 -3
  134. package/samples/TouchSample/App.vue +2 -3
  135. package/samples/TouchSample/Item.vue +15 -13
  136. package/samples/TouchSample/MetroWidgetHorizontal.vue +2 -2
  137. package/samples/TouchSample/MetroWidgetVertical.vue +1 -1
  138. package/samples/TouchSample/TouchContainerHorizontal.vue +4 -3
  139. package/samples/TouchSample/TouchContainerVertical.vue +3 -2
  140. package/samples/TransitPage/App.vue +20 -32
  141. package/samples/VideoDemo/App.vue +65 -81
  142. package/samples/VideoDemo/components/Button.vue +41 -52
  143. package/samples/VideoDemo/components/Controllor.vue +171 -169
  144. package/samples/VideoDemo/components/VideoFrame.vue +87 -99
  145. package/samples/VisibleSensorDemo/App.vue +167 -0
  146. package/scripts/jsview-jsmap-serve.js +42 -0
  147. package/scripts/jsview-post-install.js +1 -1
  148. package/tsconfig.json +3 -0
  149. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +204 -193
  150. package/utils/JsViewEngineWidget/JsvFocusManager.js +30 -17
  151. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +1561 -1656
  152. package/utils/JsViewEngineWidget/MetroWidget/PageUpdater.js +136 -0
  153. package/utils/JsViewEngineWidget/MetroWidget/ToolFunctions.js +18 -0
  154. package/utils/JsViewEngineWidget/TemplateParser.js +111 -1
  155. package/utils/JsViewEngineWidget/WidgetCommon.js +8 -2
  156. package/utils/JsViewEngineWidget/index.js +4 -4
  157. package/utils/JsViewPlugin/JsvPlayer/GetVersion.js +1 -1
  158. package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +266 -57
  159. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +5 -1
  160. package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
  161. package/utils/JsViewVueTools/JsvRefTaker.js +35 -0
  162. package/utils/JsViewVueTools/index.js +19 -0
  163. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +8 -4
  164. package/utils/JsViewVueWidget/JsvApic/JsvApic.vue +2 -2
  165. package/utils/JsViewVueWidget/JsvFilterView.vue +59 -51
  166. package/utils/JsViewVueWidget/JsvGrid.vue +139 -41
  167. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +3 -1
  168. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +8 -17
  169. package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
  170. package/utils/JsViewVueWidget/JsvPosterDiv.vue +37 -7
  171. package/utils/JsViewVueWidget/JsvPosterImage.vue +34 -13
  172. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +2 -12
  173. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +1 -1
  174. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +13 -10
  175. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -3
  176. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +6 -1
  177. package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +6 -1
  178. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +25 -21
  179. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +7 -8
  180. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +141 -0
  181. package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +9 -0
  182. package/utils/JsViewVueWidget/index.js +42 -0
  183. package/samples/AdvanceMetroWidget/App.vue +0 -123
  184. package/samples/AdvanceMetroWidget/Frame.vue +0 -102
  185. package/samples/AdvanceMetroWidget/Item.vue +0 -63
  186. package/samples/AdvanceMetroWidget/data.js +0 -137
  187. package/samples/ClassNameDemo/App.vue +0 -119
  188. package/samples/ClassNameDemo/components/ContentItem.vue +0 -253
  189. package/samples/ClassNameDemo/components/LoadingView.vue +0 -43
  190. package/samples/ClassNameDemo/components/TitleView.vue +0 -24
  191. package/samples/ClassNameDemo/data.js +0 -24
  192. package/samples/FlowMultiWidget/App.vue +0 -91
  193. package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
  194. package/samples/FlowMultiWidget/components/Block.vue +0 -107
  195. package/samples/FlowMultiWidget/components/FlowPage.vue +0 -60
  196. package/samples/FlowMultiWidget/components/Item.vue +0 -103
  197. package/samples/FlowMultiWidget/components/MenuItem.vue +0 -72
  198. package/samples/FlowMultiWidget/components/MyMenu.vue +0 -90
  199. package/samples/FlowMultiWidget/data.js +0 -446
  200. package/samples/HashHistory/views/BasePage.vue +0 -19
  201. package/samples/HashHistory/views/SubPageFirst.vue +0 -10
  202. package/samples/HashHistory/views/SubPageSecond.vue +0 -10
  203. package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
  204. package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
  205. package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
  206. package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
  207. package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
  208. package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
  209. package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
  210. package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
  211. package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
  212. package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
  213. package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
  214. package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
  215. package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
  216. package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
  217. package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
  218. package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
  219. package/samples/SimpleWidgetDemo/data.js +0 -124
  220. package/utils/JsViewEngineWidget/MetroWidget/ContentView.vue +0 -63
  221. package/utils/JsViewEngineWidget/MetroWidget/DivWrapper.vue +0 -51
  222. package/utils/JsViewEngineWidget/MetroWidget/ItemView.vue +0 -213
  223. package/utils/JsViewEngineWidget/MetroWidget/RootView.vue +0 -154
@@ -18,11 +18,15 @@ export default {
18
18
  },
19
19
  imageSettings: Object
20
20
  },
21
- data() {
21
+ setup() {
22
22
  return {
23
23
  imageStyle: null,
24
+ qrcodeRes: null,
24
25
  }
25
26
  },
27
+ created() {
28
+ this.qrcodeRes = this.renderQrcode();
29
+ },
26
30
  methods: {
27
31
  convertStr(str) {
28
32
  let out = "";
@@ -149,10 +153,10 @@ export default {
149
153
  :shapeRendering="'crispEdges'"
150
154
  :height="size"
151
155
  :width="size"
152
- :viewBox="'0 0 ' + renderQrcode().numCells + ' ' + renderQrcode().numCells"
156
+ :viewBox="'0 0 ' + qrcodeRes.numCells + ' ' + qrcodeRes.numCells"
153
157
  >
154
- <jsve-path :fill="bgColor" :d="'M0,0 h' + renderQrcode().numCells + 'v' + renderQrcode().numCells + 'H0z'" />
155
- <jsve-path :fill="fgColor" :d="renderQrcode().fgPath" />
158
+ <jsve-path :fill="bgColor" :d="'M0,0 h' + qrcodeRes.numCells + 'v' + qrcodeRes.numCells + 'H0z'" />
159
+ <jsve-path :fill="fgColor" :d="qrcodeRes.fgPath" />
156
160
  </jsve-svg>
157
161
  <div :style="imageStyle"></div>
158
162
  </div>
@@ -2,7 +2,7 @@
2
2
  * @Author: ChenChanghua
3
3
  * @Date: 2021-10-13 13:14:42
4
4
  * @LastEditors: ChenChanghua
5
- * @LastEditTime: 2022-04-25 15:37:04
5
+ * @LastEditTime: 2022-08-02 13:35:10
6
6
  * @Description: file content
7
7
  -->
8
8
 
@@ -175,5 +175,5 @@ export default {
175
175
  </script>
176
176
 
177
177
  <template>
178
- <img alt="" ref="element" :src="src" :style="style" />
178
+ <img jsv_disable_apic_autoplay alt="" ref="element" :src="src" :style="style" />
179
179
  </template>
@@ -6,68 +6,76 @@
6
6
  * height {int} 高
7
7
  * left {int} left位置
8
8
  * top {int} top位置
9
- * methods说明:
10
- * enableFilter
11
- @description 开关滤镜
12
- @params {boolean} enable 滤镜是否生效
9
+ * filterType {String} 滤镜设置:
10
+ * null: 无滤镜
11
+ * "gray-down": 黑白滤镜(公祭日滤镜)
13
12
  -->
14
- <script>
13
+ <script setup>
15
14
  import { Forge, ForgeExtension } from "../../dom/jsv-forge-define";
15
+ import { onBeforeUnmount, watchEffect } from "vue";
16
16
 
17
- export default {
18
- props: {
19
- width: {
20
- type: Number,
21
- },
22
- height: {
23
- type: Number,
24
- },
25
- left: {
26
- type: Number,
27
- default: 0,
28
- },
29
- top: {
30
- type: Number,
31
- default: 0,
32
- },
17
+ const props = defineProps({
18
+ width: {
19
+ type: Number,
33
20
  },
34
- setup() {
35
- return {
36
- filterView: null,
37
- };
21
+ height: {
22
+ type: Number,
38
23
  },
39
- created() {
40
- this.filterView = new Forge.FilterView();
41
- const view_store = ForgeExtension.RootActivity
42
- ? ForgeExtension.RootActivity.ViewStore
43
- : Forge.sViewStore;
44
- this.viewId = view_store.add(
45
- new Forge.ViewInfo(this.filterView, {
46
- x: this.left,
47
- y: this.top,
48
- width: this.width,
49
- height: this.height,
50
- })
51
- );
24
+ left: {
25
+ type: Number,
26
+ default: 0,
27
+ },
28
+ top: {
29
+ type: Number,
30
+ default: 0,
52
31
  },
53
- beforeUnmount() {
54
- const view_store = ForgeExtension.RootActivity
32
+ filterType: {
33
+ type: String,
34
+ default: null,
35
+ }
36
+ });
37
+
38
+ let filterView = new Forge.FilterView();
39
+ const view_store = ForgeExtension.RootActivity
40
+ ? ForgeExtension.RootActivity.ViewStore
41
+ : Forge.sViewStore;
42
+
43
+ let viewId = view_store.add(
44
+ new Forge.ViewInfo(filterView)
45
+ );
46
+
47
+ // 监控filter改变
48
+ watchEffect(() => {
49
+ if (filterView) {
50
+ console.log(`filterType change to ${props.filterType}`)
51
+ switch (props.filterType) {
52
+ case "gray-down":
53
+ filterView.FilterSwitch(true);
54
+ break;
55
+ default:
56
+ filterView.FilterSwitch(false);
57
+ }
58
+ }
59
+ });
60
+
61
+ onBeforeUnmount(() => {
62
+ const view_store = ForgeExtension.RootActivity
55
63
  ? ForgeExtension.RootActivity.ViewStore
56
64
  : Forge.sViewStore;
57
- view_store.remove(this.viewId);
58
- },
59
- methods: {
60
- enableFilter(enable) {
61
- if (this.filterView) {
62
- this.filterView.FilterSwitch(enable);
63
- }
64
- },
65
- },
66
- };
65
+ view_store.remove(viewId);
66
+ });
67
+
67
68
  </script>
68
69
 
69
70
  <template>
70
- <div :jsv_innerview="viewId">
71
+ <div
72
+ :style="{
73
+ left: left,
74
+ top: top,
75
+ width: width,
76
+ height: height
77
+ }"
78
+ :jsv_innerview="viewId">
71
79
  <slot></slot>
72
80
  </div>
73
81
  </template>
@@ -17,11 +17,18 @@
17
17
  * gapInfo {Object} 格子间隔设置 {row: 行间距, colum: 列间距}
18
18
  * verticalUpdate {boolean} 是否纵向滚动
19
19
  * columnFirst {boolean} 单页是否列优先排布
20
+ * loopUpdate {boolean} 焦点移动到边界时循环滚动
20
21
  * onEdge {function} 焦点移动到边缘时的回调
21
22
  * @params {object} edgeInfo {
22
23
  "direction": {EdgeDirection}边缘方向,
23
24
  "rect": 到达边缘时的区域{x: 0, y: 0, width: 0,height: 0}
24
25
  }
26
+ * focusMoveType {int} 焦点移动的模式, 可通过 | 运算进行组合
27
+ NO_ADJUST: 无特殊处理
28
+ COLUMN_LOOP: 到达列首/尾后跳转到上/下一列, 只在水平滚动时生效
29
+ ROW_LOOP: 到达行首/尾后跳转到上/下一行, 只在竖直滚动时生效
30
+ COLUMN_FIND_NEAR: 一列中没有下一个元素时是否跳转到相邻列
31
+ ROW_FIND_NEAR: 一行中没有下一个元素时是否跳转到相邻行
25
32
  * methods:
26
33
  getFocusBlockRef
27
34
  @description 获取focusBlock的引用
@@ -38,7 +45,9 @@
38
45
  {
39
46
  dataIndex: {int} 当前格子数据的index,
40
47
  gridIndex: {int} 当前格子的index,
48
+ selected: {boolean} 格子是否选中
41
49
  getCurrentFocusId: {function} 获取widget的当前焦点的dataIndex
50
+ gridCoord: {{row: 0, column: 0}} 获取当前格子的行列坐标
42
51
  }
43
52
  * onAction: 单元格内控件需要通过onAction.register方法注册 item 的回调,回调函数有
44
53
  onFocus, onBlur, onClick
@@ -84,7 +93,15 @@ class LineType extends UpdateType {
84
93
  }
85
94
  }
86
95
 
87
- export { PageType, LineType };
96
+ const FocusMoveType = {
97
+ NO_ADJUST: 0x00000000,
98
+ COLUMN_LOOP: 0x00000001,
99
+ ROW_LOOP: 0x00000001 << 1,
100
+ COLUMN_FIND_NEAR: 0x00000001 << 2,
101
+ ROW_FIND_NEAR: 0x00000001 << 3,
102
+ };
103
+
104
+ export { PageType, LineType, FocusMoveType };
88
105
 
89
106
  export default {
90
107
  props: {
@@ -141,6 +158,14 @@ export default {
141
158
  onEdge: {
142
159
  type: Function,
143
160
  },
161
+ loopUpdate: {
162
+ type: Boolean,
163
+ default: false,
164
+ },
165
+ focusMoveType: {
166
+ type: Number,
167
+ default: FocusMoveType.NO_ADJUST,
168
+ },
144
169
  },
145
170
  setup(props) {
146
171
  return {
@@ -166,6 +191,11 @@ export default {
166
191
  this.focusDataIndex = this._indexConvert(this.initFocusId);
167
192
  }
168
193
  this._updateData(this._getStartIndex(this.focusDataIndex, 1));
194
+ if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {
195
+ this.divInfoList[
196
+ this._getDivIndex(this.focusDataIndex)
197
+ ].widgetData.selected = true;
198
+ }
169
199
  },
170
200
  methods: {
171
201
  _getCurrentFocusId() {
@@ -196,6 +226,11 @@ export default {
196
226
  dataIndex: -1,
197
227
  gridIndex: i,
198
228
  getCurrentFocusId: this._getCurrentFocusId,
229
+ gridCoord: {
230
+ column: i % this.column,
231
+ row: Math.floor(i / this.column),
232
+ },
233
+ selected: false,
199
234
  }),
200
235
  userData: reactive({}),
201
236
  };
@@ -218,6 +253,11 @@ export default {
218
253
  dataIndex: -1,
219
254
  gridIndex: i,
220
255
  getCurrentFocusId: this._getCurrentFocusId,
256
+ gridCoord: {
257
+ column: Math.floor(i / this.row),
258
+ row: i % this.row,
259
+ },
260
+ selected: false,
221
261
  }),
222
262
  userData: reactive({}),
223
263
  };
@@ -349,56 +389,86 @@ export default {
349
389
  },
350
390
  _moveTo(hOffset, vOffset) {
351
391
  let nextIndex = -1;
392
+ let mainOffset, subOffset, lineNum, mainFindNear, subFindNear, lineLoop;
352
393
  if (this.verticalUpdate) {
353
- if (hOffset != 0) {
354
- if (
355
- !(this.focusDataIndex % this.column == 0 && hOffset < 0) &&
356
- !(
357
- this.focusDataIndex % this.column == this.column - 1 &&
358
- hOffset > 0
359
- ) &&
360
- this.dataList[this.focusDataIndex + hOffset]
361
- ) {
362
- nextIndex = this.focusDataIndex + hOffset;
363
- }
364
- }
365
- if (vOffset != 0) {
366
- nextIndex = this.focusDataIndex + vOffset * this.column;
367
- if (nextIndex > 0 && !this.dataList[nextIndex]) {
368
- if (nextIndex <= this.dataInfo.endIndex) {
369
- nextIndex--;
370
- while (!this.dataList[nextIndex]) {
371
- nextIndex--;
394
+ mainOffset = vOffset;
395
+ subOffset = hOffset;
396
+ lineNum = this.column;
397
+ mainFindNear = this.focusMoveType & FocusMoveType.COLUMN_FIND_NEAR;
398
+ subFindNear = this.focusMoveType & FocusMoveType.ROW_FIND_NEAR;
399
+ lineLoop = this.focusMoveType & FocusMoveType.ROW_LOOP;
400
+ } else {
401
+ mainOffset = hOffset;
402
+ subOffset = vOffset;
403
+ lineNum = this.row;
404
+ mainFindNear = this.focusMoveType & FocusMoveType.ROW_FIND_NEAR;
405
+ subFindNear = this.focusMoveType & FocusMoveType.COLUMN_FIND_NEAR;
406
+ lineLoop = this.focusMoveType & FocusMoveType.COLUMN_LOOP;
407
+ }
408
+ if (mainOffset != 0) {
409
+ let i = this.focusDataIndex + mainOffset * lineNum;
410
+ if (this.dataList[i]) {
411
+ nextIndex = i;
412
+ } else if (i >= 0) {
413
+ //下一个为null, 找下一行的最后一个
414
+ if (mainFindNear) {
415
+ i = i - (i % this.column);
416
+ if (this.dataList[i]) {
417
+ while (this.dataList[i]) {
418
+ nextIndex = i;
419
+ i++;
372
420
  }
373
- } else {
374
- nextIndex = -1;
375
421
  }
376
422
  }
377
423
  }
378
- } else {
379
- if (vOffset != 0) {
380
- if (
381
- !(this.focusDataIndex % this.row == 0 && vOffset < 0) &&
382
- !(this.focusDataIndex % this.row == this.row - 1 && vOffset > 0) &&
383
- this.dataList[this.focusDataIndex + vOffset]
384
- ) {
385
- nextIndex = this.focusDataIndex + vOffset;
386
- }
387
- }
388
- if (hOffset != 0) {
389
- nextIndex = this.focusDataIndex + hOffset * this.row;
390
- if (nextIndex >= 0 && !this.dataList[nextIndex]) {
391
- if (nextIndex <= this.dataInfo.endIndex) {
392
- nextIndex--;
393
- while (!this.dataList[nextIndex]) {
394
- nextIndex--;
424
+ }
425
+
426
+ if (subOffset != 0) {
427
+ let i = (this.focusDataIndex % lineNum) + subOffset;
428
+ if (
429
+ i >= 0 &&
430
+ i < lineNum &&
431
+ this.dataList[this.focusDataIndex + subOffset]
432
+ ) {
433
+ nextIndex = this.focusDataIndex + subOffset;
434
+ } else {
435
+ if (lineLoop) {
436
+ i =
437
+ this.focusDataIndex +
438
+ subOffset * lineNum -
439
+ (this.focusDataIndex % lineNum);
440
+ if (subOffset < 0) {
441
+ //往前是到上一行末尾
442
+ i = i + lineNum - 1;
443
+ }
444
+ if (this.dataList[i]) {
445
+ nextIndex = i;
446
+ }
447
+ } else if (subFindNear) {
448
+ //只有未到边界时才找临近
449
+ if (i >= 0 && i < lineNum) {
450
+ for (
451
+ i = this.focusDataIndex + subOffset;
452
+ i >= this.startIndex;
453
+ i -= lineNum
454
+ ) {
455
+ if (this.dataList[i]) {
456
+ nextIndex = i;
457
+ break;
458
+ }
395
459
  }
396
- } else {
397
- nextIndex = -1;
398
460
  }
399
461
  }
400
462
  }
401
463
  }
464
+
465
+ if (nextIndex < 0 && this.loopUpdate) {
466
+ if (this.verticalUpdate && vOffset != 0) {
467
+ nextIndex = vOffset > 0 ? 0 : this.dataInfo.endIndex;
468
+ } else if (!this.verticalUpdate && hOffset != 0) {
469
+ nextIndex = hOffset > 0 ? 0 : this.dataInfo.endIndex;
470
+ }
471
+ }
402
472
  if (nextIndex >= 0) {
403
473
  let offset;
404
474
  if (hOffset !== 0) {
@@ -414,10 +484,16 @@ export default {
414
484
  this._getDivIndex(this.preFocusDataIndex)
415
485
  ]?.onAction.onBlur?.();
416
486
  }
487
+ this.divInfoList[
488
+ this._getDivIndex(this.preFocusDataIndex)
489
+ ].widgetData.selected = false;
417
490
  this._updateData(this._getStartIndex(nextIndex, offset));
418
491
  this.divInfoList[
419
492
  this._getDivIndex(this.focusDataIndex)
420
493
  ]?.onAction.onFocus?.();
494
+ this.divInfoList[
495
+ this._getDivIndex(this.focusDataIndex)
496
+ ].widgetData.selected = true;
421
497
  } else {
422
498
  let edgeDirection;
423
499
  if (hOffset > 0) {
@@ -503,12 +579,23 @@ export default {
503
579
  //焦点跳跃时之前的焦点可能不在divInfoList中
504
580
  this.divInfoList[this._getDivIndex(preIndex)]?.onAction.onBlur?.();
505
581
  }
582
+ if (this.divInfoList[this._getDivIndex(preIndex)]) {
583
+ this.divInfoList[
584
+ this._getDivIndex(preIndex)
585
+ ].widgetData.selected = false;
586
+ }
587
+
506
588
  this._updateData(this._getStartIndex(this.focusDataIndex, 1));
507
589
  if (this.focused) {
508
590
  this.divInfoList[
509
591
  this._getDivIndex(this.focusDataIndex)
510
592
  ]?.onAction.onFocus?.();
511
593
  }
594
+ if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {
595
+ this.divInfoList[
596
+ this._getDivIndex(this.focusDataIndex)
597
+ ].widgetData.selected = true;
598
+ }
512
599
  }
513
600
  },
514
601
 
@@ -519,6 +606,12 @@ export default {
519
606
  this._getDivIndex(this.focusDataIndex)
520
607
  ]?.onAction.onBlur?.();
521
608
  }
609
+ if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {
610
+ this.divInfoList[
611
+ this._getDivIndex(this.focusDataIndex)
612
+ ].widgetData.selected = false;
613
+ }
614
+
522
615
  this._formatData();
523
616
  this.startIndex = -1;
524
617
  this._cleanOldData();
@@ -532,6 +625,11 @@ export default {
532
625
  this._getDivIndex(this.focusDataIndex)
533
626
  ]?.onAction.onFocus?.();
534
627
  }
628
+ if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {
629
+ this.divInfoList[
630
+ this._getDivIndex(this.focusDataIndex)
631
+ ].widgetData.selected = true;
632
+ }
535
633
  },
536
634
  },
537
635
  };
@@ -134,7 +134,7 @@ export default {
134
134
  // 初始化View
135
135
  this.innerView = new Forge.LayoutView();
136
136
  this.innerViewId = ForgeExtension.RootActivity.ViewStore.add(
137
- new Forge.ViewInfo(this.innerView, null)
137
+ new Forge.ViewInfo(this.innerView)
138
138
  );
139
139
  }
140
140
 
@@ -211,6 +211,8 @@ export default {
211
211
  :style="{
212
212
  top: style.top,
213
213
  left: style.left,
214
+ width: style.width,
215
+ height: style.height
214
216
  }"
215
217
  ></div>
216
218
  </template>
@@ -47,19 +47,14 @@ export default {
47
47
  // 通过内置函数构造定制的NativeSharedView
48
48
  this.jsvMainView = new Forge.NativeSharedView(textureSetting);
49
49
  this.innerViewId = ForgeExtension.RootActivity.ViewStore.add(
50
- new Forge.ViewInfo(this.jsvMainView, null)
50
+ new Forge.ViewInfo(this.jsvMainView)
51
51
  );
52
52
 
53
53
  // 更新宽高
54
54
  if(typeof this.jsvMainView!="undefined" && this.jsvMainView){
55
- this.jsvMainView.ResetLayoutParams({
56
- width: this.style.width,
57
- height: this.style.height,
58
- });
59
-
60
55
  if (this.setId) {
61
56
  // 使用设置进来的track id,而非自动生成
62
- this.jsvMainView.SetTrackId();
57
+ this.jsvMainView.SetTrackId(this.setId);
63
58
  }
64
59
 
65
60
  this.getId?.(this.jsvMainView.GetTrackId());
@@ -77,21 +72,17 @@ export default {
77
72
  this.jsvMainView = null;
78
73
  }
79
74
  },
80
- updated() {
81
- // 更新宽高
82
- if(typeof this.jsvMainView!="undefined" && this.jsvMainView){
83
- this.jsvMainView.ResetLayoutParams({
84
- width: this.style.width,
85
- height: this.style.height,
86
- });
87
- }
88
- }
89
75
  };
90
76
  </script>
91
77
 
92
78
  <template>
93
79
  <div v-if="!isBrowserDebug"
94
- :style="{left: style.left, top: style.top}"
80
+ :style="{
81
+ left: style.left,
82
+ top: style.top,
83
+ width: style.width,
84
+ height: style.height
85
+ }"
95
86
  :jsv_innerview="innerViewId"
96
87
  >
97
88
  <slot/>
@@ -12,7 +12,7 @@
12
12
  * 原图中圆弧半径 = (原图宽度 - borderOutset * 2) / 2
13
13
  * 四角为其他形状时,原图.9图的四角区域,缩放到要和显示图形重合后的宽度。
14
14
  * borderOutset {int} (必填)原图信息: 图片边缘到中心内容区域边缘的距离, 快速计算: (原图宽度 - 原图中放内容宽度) / 2
15
- * animTime {int} (必填)缩放动画的时长(单位毫秒)
15
+ * animTime {int} (必填)缩放动画的时长(单位秒)
16
16
  * waitForInit {boolean} (选填)尺寸为0时是否进行描画(例如: 首次显示不展示动画的场合,设置为true),默认值为true
17
17
  -->
18
18
 
@@ -1,17 +1,47 @@
1
1
  <!--
2
2
  * 【模块 export 内容】
3
3
  * JsvPosterDiv:Vue高阶组件,海报描画
4
+ * props说明:
5
+ * style {Object} 包含
6
+ * left/top/width/height
7
+ * border-radius
8
+ * backgroundImage/backgroundColor
9
+ * 的style设置
4
10
  -->
11
+ <script setup>
12
+
13
+ import { reactive, watchEffect } from "vue";
14
+
15
+ const props = defineProps({
16
+ style: Object,
17
+ });
18
+
19
+ let common_style = reactive({});
20
+ let image_style = reactive({});
21
+
22
+ watchEffect(()=>{
23
+ if (props.style) {
24
+ let {left, top, width, height, ...others} = props.style;
25
+
26
+ common_style.left = left;
27
+ common_style.top = top;
28
+
29
+ image_style.width = width;
30
+ image_style.height = height;
31
+ Object.assign(image_style, others)
32
+ }
33
+ })
5
34
 
6
- <script>
7
- export default {
8
- //不让根元素继承style,以导致多画一个图片。同时注意slot和div的位置
9
- inheritAttrs: false,
10
- };
11
35
  </script>
36
+
12
37
  <template>
13
- <div>
38
+ <div :style="common_style">
14
39
  <slot></slot>
15
- <div jsv_enable_fade="true" jsv_poster_on_top="true" v-bind="$attrs" />
40
+ <div
41
+ jsv_enable_fade="true"
42
+ jsv_poster_on_top="true"
43
+ :style="image_style"
44
+ v-bind="$attrs"
45
+ />
16
46
  </div>
17
47
  </template>
@@ -1,30 +1,51 @@
1
1
  <!--
2
2
  * 【模块 export 内容】
3
3
  * JsvPosterImage:Vue高阶组件,海报描画,可设置color space 和 texture size
4
- * props说明:
5
- * colorSpace {String} 颜色空间,默认RGBA_8888
4
+ * props说明:
5
+ * colorSpace {String} 颜色空间,默认RGBA_8888
6
+ * style {Object} 包含left/top/width/height/border-radius的style设置
6
7
  -->
7
8
 
8
- <script>
9
- export default {
10
- props: {
11
- colorSpace: {
12
- type: String,
13
- default: "RGBA_8888",
14
- },
9
+ <script setup>
10
+
11
+ import { reactive, watchEffect } from "vue";
12
+
13
+ const props = defineProps({
14
+ colorSpace: {
15
+ type: String,
16
+ default: "RGBA_8888",
15
17
  },
16
- inheritAttrs: false,
17
- };
18
+
19
+ style: Object,
20
+ });
21
+
22
+ let common_style = reactive({});
23
+ let image_style = reactive({});
24
+
25
+ watchEffect(()=>{
26
+ if (props.style) {
27
+ let {left, top, width, height, ...others} = props.style;
28
+
29
+ common_style.left = left;
30
+ common_style.top = top;
31
+
32
+ image_style.width = width;
33
+ image_style.height = height;
34
+ Object.assign(image_style, others)
35
+ }
36
+ })
37
+
18
38
  </script>
19
39
 
20
40
  <template>
21
- <div>
41
+ <div :style="common_style">
22
42
  <slot></slot>
23
43
  <img
24
44
  jsv_enable_fade="true"
25
45
  jsv_poster_on_top="true"
26
46
  jsv_img_scaledown_tex="true"
27
- :jsv_img_color_space="{ colorSpace }"
47
+ :jsv_img_color_space="colorSpace"
48
+ :style="image_style"
28
49
  v-bind="$attrs"
29
50
  />
30
51
  </div>
@@ -248,12 +248,7 @@ export default {
248
248
  const preload_view = new Forge.PreloadView(texture_setting);
249
249
  return {
250
250
  viewId: ForgeExtension.RootActivity.ViewStore.add(
251
- new Forge.ViewInfo(preload_view, {
252
- x: 0,
253
- y: 0,
254
- width: 0,
255
- height: 0,
256
- })
251
+ new Forge.ViewInfo(preload_view)
257
252
  ),
258
253
  textureRef: texture,
259
254
  callToken: callback_token,
@@ -318,12 +313,7 @@ export default {
318
313
 
319
314
  return {
320
315
  viewId: ForgeExtension.RootActivity.ViewStore.add(
321
- new Forge.ViewInfo(preload_view, {
322
- x: 0,
323
- y: 0,
324
- width: 0,
325
- height: 0,
326
- })
316
+ new Forge.ViewInfo(preload_view)
327
317
  ),
328
318
  textureRef: texture,
329
319
  callToken: callback_token,