@shijiu/jsview-vue 0.9.502 → 0.9.590

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 (215) 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 +34 -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 +32 -33
  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 +211 -0
  77. package/samples/MetroWidgetDemos/Advanced/ButtonItem.vue +90 -0
  78. package/samples/MetroWidgetDemos/Item.vue +67 -0
  79. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/App.vue +80 -104
  80. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/Item.vue +7 -0
  81. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/bg.jpg +0 -0
  82. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_content.png +0 -0
  83. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_left.png +0 -0
  84. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_mid.png +0 -0
  85. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_right.png +0 -0
  86. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/focus_border.png +0 -0
  87. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/holder_logo.png +0 -0
  88. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/jrbm.png +0 -0
  89. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_left.png +0 -0
  90. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_mid.png +0 -0
  91. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_right.png +0 -0
  92. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/loading.png +0 -0
  93. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/logo.png +0 -0
  94. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/mcjx.png +0 -0
  95. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tao.png +0 -0
  96. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tmall.png +0 -0
  97. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/border.png +0 -0
  98. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/ContentItem.vue +60 -86
  99. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/MyTab.vue +0 -0
  100. package/samples/MetroWidgetDemos/PerformanceTest/data.js +45 -0
  101. package/samples/MetroWidgetDemos/PingPong/App.vue +135 -0
  102. package/samples/MetroWidgetDemos/PingPong/AppPage.vue +58 -0
  103. package/samples/MetroWidgetDemos/PingPong/AppTab.vue +69 -0
  104. package/samples/MetroWidgetDemos/PingPong/Item.vue +92 -0
  105. package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +214 -0
  106. package/samples/MetroWidgetDemos/Simple/App.vue +194 -0
  107. package/samples/MetroWidgetDemos/WidgetItem.vue +89 -0
  108. package/samples/MetroWidgetDemos/data.js +204 -0
  109. package/samples/NinePatchDemo/App.vue +114 -115
  110. package/samples/NinePatchDemo/Item.vue +7 -8
  111. package/samples/Preload/App.vue +61 -63
  112. package/samples/Preload/Item.vue +21 -29
  113. package/samples/QrcodeDemo/App.vue +24 -29
  114. package/samples/SoundPool/App.vue +77 -106
  115. package/samples/SprayView/App.vue +10 -8
  116. package/samples/SpriteImage/App.vue +1 -2
  117. package/samples/TextBox/App.vue +86 -101
  118. package/samples/TextBox/RenderCenter.vue +1 -1
  119. package/samples/TextBox/RenderLeft.vue +1 -1
  120. package/samples/TextBox/RenderOneLine.vue +1 -1
  121. package/samples/TextBox/RenderRight.vue +1 -1
  122. package/samples/TextShadowDemo/App.vue +1 -2
  123. package/samples/TextureAnimation/App.vue +16 -13
  124. package/samples/TextureSize/App.vue +15 -25
  125. package/samples/ThrowMoveDemo/AccelerateDemo.vue +2 -4
  126. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +2 -3
  127. package/samples/ThrowMoveDemo/TargetDemo.vue +3 -4
  128. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +2 -3
  129. package/samples/TouchSample/App.vue +2 -3
  130. package/samples/TouchSample/Item.vue +15 -13
  131. package/samples/TouchSample/MetroWidgetHorizontal.vue +2 -2
  132. package/samples/TouchSample/MetroWidgetVertical.vue +1 -1
  133. package/samples/TouchSample/TouchContainerHorizontal.vue +4 -3
  134. package/samples/TouchSample/TouchContainerVertical.vue +3 -2
  135. package/samples/TransitPage/App.vue +20 -32
  136. package/samples/VideoDemo/App.vue +65 -81
  137. package/samples/VideoDemo/components/Button.vue +41 -52
  138. package/samples/VideoDemo/components/Controllor.vue +171 -169
  139. package/samples/VideoDemo/components/VideoFrame.vue +87 -99
  140. package/samples/VisibleSensorDemo/App.vue +167 -0
  141. package/scripts/jsview-jsmap-serve.js +42 -0
  142. package/scripts/jsview-post-install.js +1 -1
  143. package/tsconfig.json +3 -0
  144. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +204 -193
  145. package/utils/JsViewEngineWidget/JsvFocusManager.js +30 -17
  146. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +1555 -1656
  147. package/utils/JsViewEngineWidget/MetroWidget/PageUpdater.js +136 -0
  148. package/utils/JsViewEngineWidget/MetroWidget/ToolFunctions.js +18 -0
  149. package/utils/JsViewEngineWidget/TemplateParser.js +111 -1
  150. package/utils/JsViewEngineWidget/WidgetCommon.js +8 -2
  151. package/utils/JsViewEngineWidget/index.js +4 -4
  152. package/utils/JsViewPlugin/JsvPlayer/GetVersion.js +1 -1
  153. package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +264 -54
  154. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +5 -1
  155. package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
  156. package/utils/JsViewVueTools/JsvRefTaker.js +35 -0
  157. package/utils/JsViewVueTools/index.js +19 -0
  158. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +8 -4
  159. package/utils/JsViewVueWidget/JsvFilterView.vue +59 -51
  160. package/utils/JsViewVueWidget/JsvGrid.vue +139 -41
  161. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +3 -1
  162. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +8 -17
  163. package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
  164. package/utils/JsViewVueWidget/JsvPosterDiv.vue +37 -7
  165. package/utils/JsViewVueWidget/JsvPosterImage.vue +34 -13
  166. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +2 -12
  167. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +1 -1
  168. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +13 -10
  169. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -3
  170. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +25 -21
  171. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +7 -8
  172. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +141 -0
  173. package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +9 -0
  174. package/utils/JsViewVueWidget/index.js +42 -0
  175. package/samples/AdvanceMetroWidget/App.vue +0 -123
  176. package/samples/AdvanceMetroWidget/Frame.vue +0 -102
  177. package/samples/AdvanceMetroWidget/Item.vue +0 -63
  178. package/samples/AdvanceMetroWidget/data.js +0 -137
  179. package/samples/ClassNameDemo/App.vue +0 -119
  180. package/samples/ClassNameDemo/components/ContentItem.vue +0 -253
  181. package/samples/ClassNameDemo/components/LoadingView.vue +0 -43
  182. package/samples/ClassNameDemo/components/TitleView.vue +0 -24
  183. package/samples/ClassNameDemo/data.js +0 -24
  184. package/samples/FlowMultiWidget/App.vue +0 -91
  185. package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
  186. package/samples/FlowMultiWidget/components/Block.vue +0 -107
  187. package/samples/FlowMultiWidget/components/FlowPage.vue +0 -60
  188. package/samples/FlowMultiWidget/components/Item.vue +0 -103
  189. package/samples/FlowMultiWidget/components/MenuItem.vue +0 -72
  190. package/samples/FlowMultiWidget/components/MyMenu.vue +0 -90
  191. package/samples/FlowMultiWidget/data.js +0 -446
  192. package/samples/HashHistory/views/BasePage.vue +0 -19
  193. package/samples/HashHistory/views/SubPageFirst.vue +0 -10
  194. package/samples/HashHistory/views/SubPageSecond.vue +0 -10
  195. package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
  196. package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
  197. package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
  198. package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
  199. package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
  200. package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
  201. package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
  202. package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
  203. package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
  204. package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
  205. package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
  206. package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
  207. package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
  208. package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
  209. package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
  210. package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
  211. package/samples/SimpleWidgetDemo/data.js +0 -124
  212. package/utils/JsViewEngineWidget/MetroWidget/ContentView.vue +0 -63
  213. package/utils/JsViewEngineWidget/MetroWidget/DivWrapper.vue +0 -51
  214. package/utils/JsViewEngineWidget/MetroWidget/ItemView.vue +0 -213
  215. package/utils/JsViewEngineWidget/MetroWidget/RootView.vue +0 -154
@@ -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
-
@@ -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>
@@ -1,63 +0,0 @@
1
- <script>
2
- export default {
3
- props: {
4
- data: Object,
5
- query: Object,
6
- onEdge: Function,
7
- onAction: Object,
8
- },
9
- data() {
10
- return {
11
- focused: false,
12
- };
13
- },
14
- computed: {
15
- style() {
16
- return {
17
- width: this.data.blocks.w - 10,
18
- height: this.data.blocks.h - 10,
19
- color: "#FFFFFF",
20
- backgroundColor: this.focused ? "#FF0000" : this.data.color,
21
- };
22
- },
23
- },
24
- methods: {
25
- onFocus() {
26
- this.focused = true;
27
- },
28
-
29
- onBlur() {
30
- this.focused = false;
31
- },
32
-
33
- onClicked() {
34
- console.log(`item ${this.query.id} clicked`);
35
- }
36
- },
37
- created() {
38
- this.onAction.register("onFocus", this.onFocus);
39
- this.onAction.register("onBlur", this.onBlur);
40
- this.onAction.register("onClick", this.onClicked);
41
- },
42
- };
43
- </script>
44
-
45
- <template>
46
- <div :class="focused ? 'focus' : 'blur'" :style="style">
47
- {{ data.content }}
48
- </div>
49
- </template>
50
-
51
- <style scoped>
52
- .focus {
53
- transform: scale3d(1.05, 1.05, 1);
54
- transition: transform 0.25s linear;
55
- font-size: 30px;
56
- }
57
-
58
- .blur {
59
- transform: scale3d(1, 1, 1);
60
- transition: transform 0.25s linear;
61
- font-size: 30px;
62
- }
63
- </style>