@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
@@ -116,7 +116,7 @@ export default {
116
116
  if (this.jsvBaseView === null) {
117
117
  this.jsvBaseView = new Forge.LayoutView();
118
118
  this.innerViewId = ForgeExtension.RootActivity.ViewStore.add(
119
- new Forge.ViewInfo(this.jsvBaseView, { x: 0, y: 0 })
119
+ new Forge.ViewInfo(this.jsvBaseView)
120
120
  );
121
121
  }
122
122
  // 构建QRCdoe view
@@ -34,7 +34,7 @@
34
34
  <script>
35
35
  import { Forge, ForgeExtension } from "../../../dom/jsv-forge-define";
36
36
 
37
- let buildForgeView = (pointRes, sprayStyle) => {
37
+ let buildForgeView = (pointRes, sprayStyle, sizeRef) => {
38
38
  if (!pointRes) {
39
39
  return -1;
40
40
  }
@@ -88,13 +88,10 @@ let buildForgeView = (pointRes, sprayStyle) => {
88
88
  sprayStyle.deltaWidth === 0 ? 1 : 2 * sprayStyle.deltaWidth;
89
89
  const view_height =
90
90
  sprayStyle.deltaHeight === 0 ? 1 : 2 * sprayStyle.deltaHeight;
91
+ sizeRef.width = view_width;
92
+ sizeRef.height = view_height;
91
93
  return ForgeExtension.RootActivity.ViewStore.add(
92
- new Forge.ViewInfo(spray_view, {
93
- x: 0,
94
- y: 0,
95
- width: view_width,
96
- height: view_height,
97
- })
94
+ new Forge.ViewInfo(spray_view)
98
95
  );
99
96
  };
100
97
 
@@ -111,6 +108,10 @@ export default {
111
108
  },
112
109
  data() {
113
110
  return {
111
+ size: {
112
+ width: 0,
113
+ height: 0
114
+ },
114
115
  viewId: -1,
115
116
  };
116
117
  },
@@ -123,11 +124,11 @@ export default {
123
124
  },
124
125
  },
125
126
  created() {
126
- this.viewId = buildForgeView(this.pointRes, this.sprayStyle);
127
+ this.viewId = buildForgeView(this.pointRes, this.sprayStyle, this.size);
127
128
  },
128
129
  updated() {
129
130
  this.unloadView();
130
- this.viewId = buildForgeView(this.pointRes, this.sprayStyle);
131
+ this.viewId = buildForgeView(this.pointRes, this.sprayStyle, this.size);
131
132
  },
132
133
  beforeUnmount() {
133
134
  this.unloadView();
@@ -136,5 +137,7 @@ export default {
136
137
  </script>
137
138
 
138
139
  <template>
139
- <div :jsv_innerview="viewId"></div>
140
+ <div
141
+ :style="{width: size.width, height: size.height}"
142
+ :jsv_innerview="viewId"></div>
140
143
  </template>
@@ -1,6 +1,5 @@
1
- import JsvSpriteAnim from './JsvSpriteAnim.vue';
2
- import SpriteController from './SpriteController.js';
1
+ import JsvSpriteAnim from "./JsvSpriteAnim.vue";
2
+ import { SpriteController } from "./SpriteController.js";
3
3
 
4
4
  export default JsvSpriteAnim;
5
5
  export { SpriteController };
6
-
@@ -21,6 +21,7 @@
21
21
  * onBlur {Function} 失去焦点的回调
22
22
  * swipeType {String} 切换方式,目前只支持 translate,之后可能会添加 opacity 等方式
23
23
  * smoothTranslate {boolean} 平滑模式动画开关
24
+ * reverseSwipe {boolean} 反转滚动方向,默认值为false. 默认滚动方向是正向, 既向index增大的方向, 反转后为反向, 既向index减小的方向
24
25
  * public methods:
25
26
  * slideTo
26
27
  * @description 滚动到指定id
@@ -123,6 +124,10 @@ export default {
123
124
  type: Boolean,
124
125
  default: false,
125
126
  },
127
+ reverseSwipe: {
128
+ type: Boolean,
129
+ default: false,
130
+ }
126
131
  },
127
132
  computed: {
128
133
  indicatorLayout() {
@@ -263,7 +268,7 @@ export default {
263
268
  clearInterval(this.timeoutHandler);
264
269
  }
265
270
  this.timeoutHandler = setInterval(() => {
266
- this._trigger(1);
271
+ this._trigger(this.reverseSwipe ? -1 : 1);
267
272
  }, this.autoplayInterval);
268
273
  }
269
274
  },
@@ -23,6 +23,7 @@
23
23
  * backgroundImage {String} 组件背景图
24
24
  * backgroundColor {String} 组件背景颜色
25
25
  * scale {float} 当前 item 的放大倍数, 默认为1
26
+ * reverseSwipe {boolean} 反转滚动方向,默认值为false. 默认滚动方向是正向, 既向index增大的方向, 反转后为反向, 既向index减小的方向
26
27
  -->
27
28
 
28
29
  <script>
@@ -120,6 +121,10 @@ export default {
120
121
  backgroundColor: {
121
122
  type: String,
122
123
  },
124
+ reverseSwipe: {
125
+ type: Boolean,
126
+ default: false,
127
+ }
123
128
  },
124
129
  computed: {
125
130
  indicatorLayout() {
@@ -311,7 +316,7 @@ export default {
311
316
  if (this.autoplayInterval > 0) {
312
317
  this.intervalHandler = setInterval(() => {
313
318
  this.preOffset = this.offset;
314
- this.offset = this.offset + 1;
319
+ this.offset = this.offset + this.reverseSwipe ? -1 : 1;
315
320
  }, this.autoplayInterval);
316
321
  }
317
322
  },
@@ -204,7 +204,8 @@ export default {
204
204
 
205
205
  if (decorate && decorate.type == DECORATE_NINEPATCH_ALPHA_MIX && decorate.animTime > 0) {
206
206
  // Ninepatch模式可以设置长宽的过渡动画
207
- transition = `left ${this.animTime}s, top ${this.animTime}s, width ${this.animTime}s, height ${this.animTime}s`;
207
+ let anim_time = decorate.animTime;
208
+ transition = `left ${anim_time}s, top ${anim_time}s, width ${anim_time}s, height ${anim_time}s`;
208
209
  }
209
210
 
210
211
  return transition;
@@ -237,21 +238,25 @@ export default {
237
238
  }
238
239
 
239
240
  // 4.设置texture的动画形变
240
- this.forgeAnimation = new Forge.CssKeyframeAnimation(
241
- "@keyframes test" + this.animation,
242
- this.duration,
243
- null,
244
- 1,
245
- 1
246
- );
247
- this.forgeAnimation.EnableDelay(this.delay).SetRepeat(this.repeat);
248
- this.forgeAnimation.SetAnimationListener(
249
- new Forge.AnimationListener(
241
+ if (this.animation) {
242
+ this.forgeAnimation = new Forge.CssKeyframeAnimation(
243
+ "@keyframes test" + this.animation,
244
+ this.duration,
250
245
  null,
251
- this._onAnimationEnd,
252
- null
253
- )
254
- );
246
+ 1,
247
+ 1
248
+ );
249
+ this.forgeAnimation.EnableDelay(this.delay).SetRepeat(this.repeat);
250
+ this.forgeAnimation.SetAnimationListener(
251
+ new Forge.AnimationListener(
252
+ null,
253
+ this._onAnimationEnd,
254
+ null
255
+ )
256
+ );
257
+ } else {
258
+ this.forgeAnimation = null;
259
+ }
255
260
 
256
261
  // 5. inner view标准处理
257
262
  this.viewStoreRef = ForgeExtension.RootActivity
@@ -259,12 +264,7 @@ export default {
259
264
  : Forge.sViewStore;
260
265
 
261
266
  this.innerViewId = this.viewStoreRef.add(
262
- new Forge.ViewInfo(this.innerView, {
263
- x: 0,
264
- y: 0,
265
- width: this.width,
266
- height: this.height,
267
- })
267
+ new Forge.ViewInfo(this.innerView)
268
268
  );
269
269
  }
270
270
  },
@@ -285,6 +285,10 @@ export default {
285
285
  <template>
286
286
  <div
287
287
  :style="{
288
+ top: top,
289
+ left: left,
290
+ width: width,
291
+ height: height,
288
292
  transition: getTransition(),
289
293
  }"
290
294
  :jsv_innerview="innerViewId">
@@ -41,15 +41,9 @@ export default {
41
41
  // 通过内置函数构造定制的LayoutView
42
42
  this.innerView = new Forge.LayoutView(textureSetting);
43
43
  this.innerViewId = ForgeExtension.RootActivity.ViewStore.add(
44
- new Forge.ViewInfo(this.innerView, null)
44
+ new Forge.ViewInfo(this.innerView)
45
45
  );
46
46
  }
47
-
48
- // 更新宽高
49
- this.innerView.ResetLayoutParams({
50
- width: this.style.width,
51
- height: this.style.height,
52
- });
53
47
  },
54
48
  },
55
49
  created() {
@@ -81,7 +75,12 @@ export default {
81
75
  ></div>
82
76
  <div
83
77
  :jsv_innerview="innerViewId"
84
- :style="{ left: style.left, top: style.top }"
78
+ :style="{
79
+ left: style.left,
80
+ top: style.top,
81
+ width: style.width,
82
+ height: style.height
83
+ }"
85
84
  >
86
85
  <slot></slot>
87
86
  </div>
@@ -0,0 +1,141 @@
1
+ <!--
2
+ * 【模块 export 内容】
3
+ * JsvVisibleSensor: 可视区域监控器
4
+ * props说明:
5
+ * horizonShown {number} (可选, 可响应式, 默认1.0完全露出)横轴百分比区域完全显示时(左边或右边完全露出,仅中间段判断会失效),
6
+ * 横轴切换到显示状态,否则为不可视状态
7
+ * verticalShown {number} (可选, 可响应式)纵轴百分比区域完全显示时(上边或下边完全露出,仅中间段判断会失效),
8
+ * 纵轴切换到显示状态,否则为不可视状态
9
+ * left {number} (可选, 可响应式)可视检测区域的left
10
+ * top {number} (可选, 可响应式)可视检测区域的top
11
+ * width {number} (可选, 可响应式)可视检测区域的width
12
+ * height {number} (可选, 可响应式)可视检测区域的height
13
+ *
14
+ * container {div reference} (可选, 可响应式)子区域参照,若为null,则认为检测可视区域为全屏幕
15
+ *
16
+ * callback {function} (必须, 可响应式)可视变化时的回调处理, 参数
17
+ * (old_horizantal_visible, new_horizantal_visible, old_vertical_visible, new_vertical_visible)
18
+ -->
19
+
20
+ <template>
21
+ <div ref="viewRef" :style="{
22
+ top: props.top,
23
+ left: props.left,
24
+ width: props.width,
25
+ height: props.height,
26
+ }" >
27
+ <slot/>
28
+ </div>
29
+ </template>
30
+
31
+ <script setup>
32
+ import { reactive, ref, toRaw, watchEffect, onMounted, defineExpose } from 'vue'
33
+ import { Forge } from "jsview/dom/jsv-forge-define";
34
+
35
+ const props = defineProps({
36
+ // (支持reactive)可视区域设定
37
+ horizonShown: Number,
38
+ verticalShown: Number,
39
+
40
+ // (支持reactive)Container, 父区域的div引用,
41
+ container: Object,
42
+
43
+ // (不支持reactive)回调处理
44
+ callback: Function,
45
+
46
+ // (支持reactive)位置信息
47
+ left: {
48
+ type: Number,
49
+ default: 0,
50
+ },
51
+ top: {
52
+ type: Number,
53
+ default: 0,
54
+ },
55
+ width: {
56
+ type: Number,
57
+ require: true,
58
+ },
59
+ height: {
60
+ type: Number,
61
+ require: true,
62
+ },
63
+
64
+ // (支持reactive)是否激活,仍然在渲染树时,非必须可以通过enable关闭以节省CPU开销
65
+ enable: {
66
+ type: Boolean,
67
+ default: true,
68
+ }
69
+ });
70
+
71
+ // 内部状态变量
72
+ const viewRef = ref(null);
73
+ const viewMounted = reactive({status: false})
74
+ let sensorRef = null;
75
+
76
+ // 变更检测范围
77
+ watchEffect(()=>{
78
+ if (viewMounted.status) {
79
+ let horizon = fixAreaValue(props.horizonShown);
80
+ let vertical = fixAreaValue(props.verticalShown);
81
+
82
+ sensorRef.ResetArea({horizon, vertical})
83
+ }
84
+ })
85
+
86
+ // 变更enable状态
87
+ watchEffect(()=>{
88
+ if (viewMounted.status) {
89
+ sensorRef.Enable(props.enable)
90
+ }
91
+ })
92
+
93
+ // 检测container变化
94
+ watchEffect(()=>{
95
+ if (viewMounted.status) {
96
+ if (props.container) {
97
+ window.MyContainerView = toRaw(props.container);
98
+
99
+ let jsv_main_view_ref = toRaw(props.container).jsvMainView;
100
+ if (jsv_main_view_ref) {
101
+ sensorRef.ResetContainer(toRaw(props.container).jsvMainView);
102
+ } else {
103
+ console.error("Error: container is NOT a div");
104
+ }
105
+ } else {
106
+ sensorRef.ResetContainer(null); // 无container
107
+ }
108
+ }
109
+ })
110
+
111
+ onMounted(()=>{
112
+ console.log("JsvVisibleSensor: on mounted");
113
+
114
+ sensorRef = new Forge.VisibleSensor(toRaw(viewRef.value).jsvMainView, (old_h, new_h, old_v, new_v)=>{
115
+ // 获得横向和纵向的新旧状态值
116
+ if (props.callback) {
117
+ props.callback(old_h, new_h, old_v, new_v);
118
+ }
119
+ });
120
+ viewMounted.status = true;
121
+ })
122
+
123
+ // 外部方法
124
+ defineExpose({
125
+
126
+ })
127
+
128
+ // 内部方法
129
+ function fixAreaValue(origin_value) {
130
+ if (origin_value > 1) {
131
+ console.warn(`will limited to 1 origin=${origin_value}`);
132
+ return 1;
133
+ } else if (origin_value < 0) {
134
+ console.warn(`will limited to 0 origin=${origin_value}`);
135
+ return 0;
136
+ } else {
137
+ return origin_value;
138
+ }
139
+ }
140
+
141
+ </script>
@@ -0,0 +1,9 @@
1
+ //考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as
2
+ import * as JsvVisibleSensor from "./JsvVisibleSensor.vue";
3
+
4
+ let _JsvVisibleSensor = JsvVisibleSensor;
5
+ // if (window.JsvWidgetWrapperGroup && window.JsvWidgetWrapperGroup.BrowserVisibleSensor) {
6
+ // JsvVisibleSensor = window.JsvWidgetWrapperGroup.BrowserVisibleSensor;
7
+ // }
8
+
9
+ export default _JsvVisibleSensor.default
@@ -0,0 +1,42 @@
1
+ /*
2
+ * @Author: ChenChanghua
3
+ * @Date: 2022-07-05 11:00:51
4
+ * @LastEditors: ChenChanghua
5
+ * @LastEditTime: 2022-07-08 17:08:08
6
+ * @Description: file content
7
+ */
8
+ export { default as JsvActorMove, JsvActorMoveControl } from "./JsvActorMove";
9
+ export { default as JsvApic, LoopType } from "./JsvApic";
10
+ export { default as JsvInput, InputType } from "./JsvInput";
11
+ export {
12
+ default as JsvPreload,
13
+ buildPreloadInfo,
14
+ buildDownloadInfo,
15
+ } from "./JsvPreload";
16
+ export { default as JsvQrcode } from "./JsvQrcode";
17
+ export { default as JsvSpray } from "./JsvSpray";
18
+ export { default as JsvSpriteAnim, SpriteController } from "./JsvSpriteAnim";
19
+ export { default as JsvSwiper } from "./JsvSwiper";
20
+ export { default as JsvSwiper3D } from "./JsvSwiper3D";
21
+ export { default as JsvTextureAnim } from "./JsvTextureAnim";
22
+ export { default as JsvVisibleSensor } from "./JsvVisibleSensor";
23
+ export { default as JsvFilterView } from "./JsvFilterView.vue";
24
+ export {
25
+ default as JsvGrid,
26
+ PageType,
27
+ LineType,
28
+ FocusMoveType,
29
+ } from "./JsvGrid.vue";
30
+ export { default as JsvHole } from "./JsvHole.js";
31
+ export { default as JsvMarquee } from "./JsvMarquee.vue";
32
+ export { default as JsvMaskClipDiv } from "./JsvMaskClipDiv.vue";
33
+ export { default as JsvNativeSharedDiv } from "./JsvNativeSharedDiv.vue";
34
+ export { default as JsvNinePatch } from "./JsvNinePatch.vue";
35
+ export { default as JsvPosterDiv } from "./JsvPosterDiv.vue";
36
+ export { default as JsvPosterImage } from "./JsvPosterImage.vue";
37
+ export { default as JsvScaleTextBox } from "./JsvScaleTextBox.vue";
38
+ export { JsvSoundPool } from "./JsvSoundPool.js";
39
+ export { default as JsvTextBox } from "./JsvTextBox.vue";
40
+ export { default as JsvTouchContainer } from "./JsvTouchContainer.vue";
41
+ export { default as JsvTransparentDiv } from "./JsvTransparentDiv.vue";
42
+ export { default as JsvVideo } from "./JsvVideo.vue";
@@ -1,123 +0,0 @@
1
- <!--
2
- * 【界面概述】
3
- * 展示SimpleWidget控件的嵌套用法
4
- *
5
- * 【控件介绍】
6
- * SimpleWidget:见simpleMetroWidget
7
- * SWidgetDispatcher:向SimpleWidget分发消息的对象,用于设置SimpleWidget内部状态
8
- * 成员函数:
9
- * dispatch
10
- * @params msg {obj} 消息体,{type: SWidgetDispatcher.Type, data: 数据}
11
- * SWidgetDispatcher.Type: 消息的类型
12
- * "setFocusId": Focus时初始的焦点id data为int
13
- * "setFocusRect": Focus时距离某区域最近的item获得焦点 data为{type:EdgeDirection, rect:{x:0, y:0, widht:0, height:0}}
14
- * "updateItem": 重新描画某个item data为int
15
- * "slideToItem": 界面移到某个item处 data为int
16
- *
17
- *
18
- * 【技巧说明】
19
- * Q: 如何实现嵌套?
20
- * A: 当SimpleWidget的measure回调返回值中hasSub为true时,该item的renderItem就可以返回可获得焦点的控件
21
- *
22
- * Q: 如何实现焦点的就近切换?
23
- * A: 通过dispatcher向将要获得焦点的控件发送setFocusRect消息。
24
- -->
25
-
26
- <script>
27
- import { frameData, itemData } from "./data";
28
- import {
29
- HORIZONTAL,
30
- SimpleWidget,
31
- } from "jsview/utils/JsViewEngineWidget";
32
- import Frame from "./Frame.vue";
33
-
34
- const measures = (item) => {
35
- return {
36
- width: item.blocks.w,
37
- height: item.blocks.h,
38
- focusable: item.focusable,
39
- hasSub: item.hasSub,
40
- };
41
- };
42
- export default {
43
- components: { SimpleWidget, Frame },
44
- setup() {
45
- return {
46
- measures,
47
- name: "/advanceMetroWidget",
48
- direction: HORIZONTAL,
49
- frameData,
50
- itemData,
51
- };
52
- },
53
- methods: {
54
- onKeyDown(ev) {
55
- // 8:Backspace, 27:Escape, 10000:盒子返回键
56
- if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
57
- this.$router?.go(-1); // 有router时,是从DemoHomepage进入,回退
58
- return true;
59
- }
60
- return false;
61
- },
62
- onFocus() {
63
- this.$refs.focusNode.findBlockByName("/advanceMetroWidget").requestFocus();
64
- },
65
- },
66
-
67
- data() {
68
- return {};
69
- },
70
- mounted() {},
71
- };
72
- </script>
73
-
74
- <template>
75
- <div class="rootSize">
76
- <jsv-focus-block
77
- autoFocus
78
- ref="focusNode"
79
- :onAction="{
80
- onKeyDown: onKeyDown,
81
- onFocus: onFocus,
82
- }"
83
- >
84
- <simple-widget
85
- :name="name"
86
- :data="frameData"
87
- :width="680"
88
- :height="680"
89
- :direction="direction"
90
- :measures="measures"
91
- >
92
- <template #renderItem="{ data, query, onEdge, onAction }">
93
- <frame
94
- :name="name + '/frame_' + query.id"
95
- :data="data"
96
- :itemData="itemData"
97
- :query="query"
98
- :onEdge="onEdge"
99
- :onAction="onAction"
100
- />
101
- </template>
102
- </simple-widget>
103
- </jsv-focus-block>
104
- </div>
105
- </template>
106
-
107
- <style scoped>
108
- .rootSize {
109
- width: 1920;
110
- height: 1080;
111
- background-color: #334c4c;
112
- }
113
-
114
- .widgetPos {
115
- top: 120;
116
- left: 50;
117
- }
118
-
119
- .focusPos {
120
- top: 10;
121
- left: 10;
122
- }
123
- </style>
@@ -1,102 +0,0 @@
1
- <script>
2
- import {
3
- HORIZONTAL,
4
- SimpleWidget,
5
- SWidgetDispatcher,
6
- } from "jsview/utils/JsViewEngineWidget";
7
- import Item from "./Item.vue";
8
-
9
- export default {
10
- components: { SimpleWidget, Item },
11
- props: {
12
- itemData: Object,
13
- data: Object,
14
- query: Object,
15
- onEdge: Function,
16
- onAction: Object,
17
- name: String,
18
- },
19
- data() {
20
- return {};
21
- },
22
- setup() {
23
- let dispatcher = new SWidgetDispatcher();
24
- return {
25
- direction: HORIZONTAL,
26
- dispatcher,
27
- };
28
- },
29
- methods: {
30
- onFocus(enterRect) {
31
- if (enterRect) {
32
- const foucsInfo = {
33
- type: SWidgetDispatcher.Type.setFocusRect,
34
- data: enterRect,
35
- };
36
- this.dispatcher.dispatch(foucsInfo);
37
- }
38
- this.$refs.focusNode.findBlockByName(this.name).requestFocus();
39
- },
40
- onBlur() {},
41
- onClick() {},
42
- measures(item) {
43
- return {
44
- width: item.blocks.w,
45
- height: item.blocks.h,
46
- focusable: item.focusable,
47
- hasSub: item.hasSub,
48
- };
49
- },
50
- },
51
-
52
- created() {
53
- this.onAction.register("onFocus", this.onFocus);
54
- this.onAction.register("onBlur", this.onBlur);
55
- this.onAction.register("onClick", this.onClick);
56
- },
57
- };
58
- </script>
59
-
60
- <template>
61
- <jsv-focus-block ref="focusNode">
62
- <simple-widget
63
- :name="name"
64
- :enableTouch="true"
65
- :data="itemData"
66
- :width="data.blocks.w"
67
- :height="data.blocks.h"
68
- :padding="{ left: 10, top: 10, right: 10, bottom: 10 }"
69
- :direction="direction"
70
- :measures="measures"
71
- :onEdge="onEdge"
72
- :dispatcher="dispatcher"
73
- >
74
- <template #renderItem="{ data, query, onEdge, onAction }">
75
- <item
76
- :data="data"
77
- :query="query"
78
- :onEdge="onEdge"
79
- :onAction="onAction"
80
- />
81
- </template>
82
- </simple-widget>
83
- </jsv-focus-block>
84
- </template>
85
-
86
- <style scoped>
87
- .rootSize {
88
- width: 1920;
89
- height: 1080;
90
- background-color: "#FFFF00";
91
- }
92
-
93
- .widgetPos {
94
- top: 120;
95
- left: 50;
96
- }
97
-
98
- .focusPos {
99
- top: 10;
100
- left: 10;
101
- }
102
- </style>