@shijiu/jsview-vue 1.9.731 → 1.9.747

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 (217) hide show
  1. package/index.d.ts +4 -1
  2. package/index.js +4 -1
  3. package/package.json +5 -16
  4. package/samples/AnimPicture/App.vue +0 -207
  5. package/samples/AnimPicture/assets/animated_webp.webp +0 -0
  6. package/samples/AnimPicture/assets/ball_3.webp +0 -0
  7. package/samples/AnimPicture/assets/girl_run.gif +0 -0
  8. package/samples/AnimPicture/assets/quan.webp +0 -0
  9. package/samples/Basic/App.vue +0 -134
  10. package/samples/Basic/assets/border.png +0 -0
  11. package/samples/Basic/assets/border2.png +0 -0
  12. package/samples/Basic/assets/icon.png +0 -0
  13. package/samples/Basic/assets/test.jpg +0 -0
  14. package/samples/Basic/components/ContentBlock.vue +0 -38
  15. package/samples/Basic/components/FontStyle.css +0 -16
  16. package/samples/Basic/components/anim/AnimGroup.vue +0 -66
  17. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +0 -119
  18. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +0 -52
  19. package/samples/Basic/components/anim/AnimTransition.vue +0 -157
  20. package/samples/Basic/components/div/DivBackground.vue +0 -44
  21. package/samples/Basic/components/div/DivClip.vue +0 -159
  22. package/samples/Basic/components/div/DivCssScoped.vue +0 -20
  23. package/samples/Basic/components/div/DivCssVar.vue +0 -53
  24. package/samples/Basic/components/div/DivGroup1.vue +0 -47
  25. package/samples/Basic/components/div/DivGroup2.vue +0 -65
  26. package/samples/Basic/components/div/DivLayout.vue +0 -70
  27. package/samples/Basic/components/div/DivRadius.vue +0 -65
  28. package/samples/Basic/components/div/DivTransform.vue +0 -32
  29. package/samples/Basic/components/img/ImageGroup.vue +0 -31
  30. package/samples/Basic/components/img/ImgLayout.vue +0 -41
  31. package/samples/Basic/components/panel/Panel1.vue +0 -55
  32. package/samples/Basic/components/panel/Panel2.vue +0 -31
  33. package/samples/Basic/components/panel/TitleBar.vue +0 -29
  34. package/samples/Basic/components/text/TextAlign.vue +0 -66
  35. package/samples/Basic/components/text/TextEmoji.vue +0 -26
  36. package/samples/Basic/components/text/TextFontStyle.vue +0 -89
  37. package/samples/Basic/components/text/TextGroup1.vue +0 -49
  38. package/samples/Basic/components/text/TextGroup2.vue +0 -28
  39. package/samples/Basic/components/text/TextOverflow.vue +0 -110
  40. package/samples/BasicFocusControl/App.vue +0 -104
  41. package/samples/BasicFocusControl/components/BaseBlock.vue +0 -50
  42. package/samples/BasicFocusControl/components/MainArea.vue +0 -83
  43. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +0 -17
  44. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +0 -27
  45. package/samples/BasicFocusControl/components/SideBar.vue +0 -58
  46. package/samples/BasicFocusControl/components/SideBarBlock.vue +0 -27
  47. package/samples/Collision/App.vue +0 -452
  48. package/samples/ColorSpace/App.vue +0 -126
  49. package/samples/DemoHomepage/App.vue +0 -27
  50. package/samples/DemoHomepage/components/BodyFrame.vue +0 -95
  51. package/samples/DemoHomepage/components/Dialog.vue +0 -94
  52. package/samples/DemoHomepage/components/Item.vue +0 -77
  53. package/samples/DemoHomepage/components/TabFrame.vue +0 -85
  54. package/samples/DemoHomepage/router.js +0 -196
  55. package/samples/DemoHomepage/views/Homepage.vue +0 -195
  56. package/samples/FilterDemo/AnimatePic.vue +0 -58
  57. package/samples/FilterDemo/App.vue +0 -159
  58. package/samples/FilterDemo/VideoLayer.vue +0 -62
  59. package/samples/FlipCard/App.vue +0 -71
  60. package/samples/FlipCard/FlipCard.vue +0 -118
  61. package/samples/FlipCard/assets/blue_egg.png +0 -0
  62. package/samples/FlipCard/assets/red_egg.png +0 -0
  63. package/samples/FlipCard/data.js +0 -13
  64. package/samples/GridDemo/App.vue +0 -215
  65. package/samples/GridDemo/ButtonBlock.vue +0 -112
  66. package/samples/GridDemo/FocusItem.vue +0 -37
  67. package/samples/GridDemo/Item.vue +0 -93
  68. package/samples/HashHistory/App.vue +0 -115
  69. package/samples/HashHistory/components/HorizontalButtonList.vue +0 -91
  70. package/samples/HashHistory/components/Item.vue +0 -60
  71. package/samples/HashHistory/router.js +0 -41
  72. package/samples/HashHistory/views/MainPage.vue +0 -57
  73. package/samples/HashHistory/views/SubPage.vue +0 -66
  74. package/samples/ImpactStop/App.vue +0 -435
  75. package/samples/Input/App.vue +0 -164
  76. package/samples/Input/FullKeyboard.vue +0 -87
  77. package/samples/Input/InputPanel.vue +0 -131
  78. package/samples/Input/KeyboardItem.vue +0 -58
  79. package/samples/LongImage/App.vue +0 -80
  80. package/samples/LongImage/Button.vue +0 -58
  81. package/samples/LongImage/ButtonItem.vue +0 -44
  82. package/samples/LongImage/LongImageScroll.vue +0 -92
  83. package/samples/LongImage/Scroll.vue +0 -14
  84. package/samples/LongImage/assets/1280x7200.jpg +0 -0
  85. package/samples/LongText/App.vue +0 -96
  86. package/samples/LongText/Button.vue +0 -51
  87. package/samples/LongText/ButtonItem.vue +0 -44
  88. package/samples/LongText/LongTextScroll.vue +0 -192
  89. package/samples/LongText/Scroll.vue +0 -14
  90. package/samples/Marquee/App.vue +0 -247
  91. package/samples/Marquee/longText.js +0 -14
  92. package/samples/MaskClip/App.vue +0 -122
  93. package/samples/MaskClip/images/mask-025/config.json +0 -29
  94. package/samples/MaskClip/images/mask-025/res/1.png +0 -0
  95. package/samples/MaskClip/images/mask-025/res/2.png +0 -0
  96. package/samples/MaskClip/images/mask-025/res/3.png +0 -0
  97. package/samples/MaskClip/images/mask-025/res/4.png +0 -0
  98. package/samples/MaskClip/images/mask-025/res/icon.png +0 -0
  99. package/samples/MaskClip/images/mask-025/res/stroke.png +0 -0
  100. package/samples/MaskClip/images/php.jpg +0 -0
  101. package/samples/MetroWidgetDemos/Advanced/App.vue +0 -46
  102. package/samples/MetroWidgetDemos/Advanced/ButtonItem.vue +0 -90
  103. package/samples/MetroWidgetDemos/Advanced/Buttons.vue +0 -70
  104. package/samples/MetroWidgetDemos/Advanced/Mixed.vue +0 -77
  105. package/samples/MetroWidgetDemos/Advanced/widgets/Item.vue +0 -83
  106. package/samples/MetroWidgetDemos/Advanced/widgets/WidgetItem.vue +0 -89
  107. package/samples/MetroWidgetDemos/Advanced/widgets/Widgets.vue +0 -116
  108. package/samples/MetroWidgetDemos/Advanced/widgets/focus1.png +0 -0
  109. package/samples/MetroWidgetDemos/Item.vue +0 -85
  110. package/samples/MetroWidgetDemos/PerformanceTest/App.vue +0 -210
  111. package/samples/MetroWidgetDemos/PerformanceTest/Item.vue +0 -90
  112. package/samples/MetroWidgetDemos/PerformanceTest/assets/bg.jpg +0 -0
  113. package/samples/MetroWidgetDemos/PerformanceTest/assets/coupon_content.png +0 -0
  114. package/samples/MetroWidgetDemos/PerformanceTest/assets/coupon_left.png +0 -0
  115. package/samples/MetroWidgetDemos/PerformanceTest/assets/coupon_mid.png +0 -0
  116. package/samples/MetroWidgetDemos/PerformanceTest/assets/coupon_right.png +0 -0
  117. package/samples/MetroWidgetDemos/PerformanceTest/assets/focus_border.png +0 -0
  118. package/samples/MetroWidgetDemos/PerformanceTest/assets/holder_logo.png +0 -0
  119. package/samples/MetroWidgetDemos/PerformanceTest/assets/jrbm.png +0 -0
  120. package/samples/MetroWidgetDemos/PerformanceTest/assets/line_left.png +0 -0
  121. package/samples/MetroWidgetDemos/PerformanceTest/assets/line_mid.png +0 -0
  122. package/samples/MetroWidgetDemos/PerformanceTest/assets/line_right.png +0 -0
  123. package/samples/MetroWidgetDemos/PerformanceTest/assets/loading.png +0 -0
  124. package/samples/MetroWidgetDemos/PerformanceTest/assets/logo.png +0 -0
  125. package/samples/MetroWidgetDemos/PerformanceTest/assets/mcjx.png +0 -0
  126. package/samples/MetroWidgetDemos/PerformanceTest/assets/tao.png +0 -0
  127. package/samples/MetroWidgetDemos/PerformanceTest/assets/tmall.png +0 -0
  128. package/samples/MetroWidgetDemos/PerformanceTest/border.png +0 -0
  129. package/samples/MetroWidgetDemos/PerformanceTest/components/ContentItem.vue +0 -386
  130. package/samples/MetroWidgetDemos/PerformanceTest/components/MyTab.vue +0 -129
  131. package/samples/MetroWidgetDemos/PerformanceTest/data.js +0 -45
  132. package/samples/MetroWidgetDemos/PingPong/App.vue +0 -135
  133. package/samples/MetroWidgetDemos/PingPong/AppPage.vue +0 -73
  134. package/samples/MetroWidgetDemos/PingPong/AppTab.vue +0 -62
  135. package/samples/MetroWidgetDemos/PingPong/TabItem.vue +0 -84
  136. package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +0 -214
  137. package/samples/MetroWidgetDemos/Simple/AbsoluteTemplate.vue +0 -75
  138. package/samples/MetroWidgetDemos/Simple/App.vue +0 -45
  139. package/samples/MetroWidgetDemos/Simple/RelativeTemplate.vue +0 -111
  140. package/samples/MetroWidgetDemos/WidgetItem.vue +0 -89
  141. package/samples/MetroWidgetDemos/data.js +0 -205
  142. package/samples/NinePatchDemo/App.vue +0 -145
  143. package/samples/NinePatchDemo/Item.vue +0 -69
  144. package/samples/NinePatchDemo/assets/border.png +0 -0
  145. package/samples/Preload/App.vue +0 -135
  146. package/samples/Preload/Item.vue +0 -32
  147. package/samples/Preload/data.js +0 -23
  148. package/samples/Preload/images/awesomeface.png +0 -0
  149. package/samples/Preload/images/cat.jpg +0 -0
  150. package/samples/Preload/images/rank.png +0 -0
  151. package/samples/Preload/images/rank_focus.png +0 -0
  152. package/samples/Preload/images/rule.png +0 -0
  153. package/samples/Preload/images/rule_focus.png +0 -0
  154. package/samples/Preload/images/start.png +0 -0
  155. package/samples/Preload/images/start_focus.png +0 -0
  156. package/samples/QrcodeDemo/App.vue +0 -68
  157. package/samples/ScaleDownNeon/App.vue +0 -107
  158. package/samples/SoundPool/App.vue +0 -134
  159. package/samples/SoundPool/bgmusic.mp3 +0 -0
  160. package/samples/SoundPool/coin.mp3 +0 -0
  161. package/samples/SoundPool/jump.mp3 +0 -0
  162. package/samples/SoundPool/lose.mp3 +0 -0
  163. package/samples/SoundPool/run.mp3 +0 -0
  164. package/samples/SprayView/App.vue +0 -272
  165. package/samples/SprayView/assets/snow.png +0 -0
  166. package/samples/SpriteImage/App.vue +0 -173
  167. package/samples/SpriteImage/images/cat_run.png +0 -0
  168. package/samples/SpriteImage/images/egg_break.json +0 -116
  169. package/samples/SpriteImage/images/egg_break.png +0 -0
  170. package/samples/SpriteImage/images/sprite.png +0 -0
  171. package/samples/TextBox/App.vue +0 -91
  172. package/samples/TextBox/RenderCenter.vue +0 -133
  173. package/samples/TextBox/RenderLeft.vue +0 -138
  174. package/samples/TextBox/RenderOneLine.vue +0 -101
  175. package/samples/TextBox/RenderRight.vue +0 -131
  176. package/samples/TextShadowDemo/App.vue +0 -91
  177. package/samples/TextureAnimation/App.vue +0 -336
  178. package/samples/TextureAnimation/App2.vue +0 -111
  179. package/samples/TextureAnimation/assets/blackWhiteGrid.png +0 -0
  180. package/samples/TextureAnimation/assets/light.png +0 -0
  181. package/samples/TextureAnimation/assets/light2.png +0 -0
  182. package/samples/TextureAnimation/assets/mask.png +0 -0
  183. package/samples/TextureAnimation/assets/php.jpg +0 -0
  184. package/samples/TextureAnimation/assets/php2.png +0 -0
  185. package/samples/TextureAnimation/assets/swipLight.png +0 -0
  186. package/samples/TextureSize/App.vue +0 -132
  187. package/samples/TextureSize/bmpDemo.bmp +0 -0
  188. package/samples/TextureSize/jpegDemo.jpeg +0 -0
  189. package/samples/TextureSize/jpgDemo.jpg +0 -0
  190. package/samples/TextureSize/pngDemo.png +0 -0
  191. package/samples/TextureSize/pngNoAlphaDemo.png +0 -0
  192. package/samples/ThrowMoveDemo/AccelerateDemo.vue +0 -116
  193. package/samples/ThrowMoveDemo/App.vue +0 -114
  194. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +0 -115
  195. package/samples/ThrowMoveDemo/TargetDemo.vue +0 -116
  196. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +0 -121
  197. package/samples/TouchSample/App.vue +0 -136
  198. package/samples/TouchSample/Item.vue +0 -103
  199. package/samples/TouchSample/MetroWidgetHorizontal.vue +0 -144
  200. package/samples/TouchSample/MetroWidgetVertical.vue +0 -144
  201. package/samples/TouchSample/TouchContainerHorizontal.vue +0 -160
  202. package/samples/TouchSample/TouchContainerVertical.vue +0 -160
  203. package/samples/TouchSample/data.js +0 -81
  204. package/samples/TransitPage/App.vue +0 -29
  205. package/samples/VideoDemo/App.vue +0 -121
  206. package/samples/VideoDemo/components/Button.vue +0 -58
  207. package/samples/VideoDemo/components/Controllor.vue +0 -197
  208. package/samples/VideoDemo/components/VideoFrame.vue +0 -140
  209. package/samples/VisibleSensorDemo/App.vue +0 -234
  210. package/samples/assets/bmpDemo.bmp +0 -0
  211. package/samples/assets/jpegDemo.jpeg +0 -0
  212. package/samples/assets/pngDemo.png +0 -0
  213. package/samples/assets/pngNoAlphaDemo.png +0 -0
  214. package/samples/assets/webpDemo.webp +0 -0
  215. package/tsconfig.json +0 -47
  216. package/utils/index.d.ts +0 -3
  217. package/utils/index.js +0 -10
@@ -1,159 +0,0 @@
1
- <!--
2
- * @Author: ChenChanghua
3
- * @Date: 2022-04-20 21:05:26
4
- * @LastEditors: ChenChanghua
5
- * @LastEditTime: 2022-07-08 11:16:52
6
- * @Description: file content
7
- -->
8
- <script setup>
9
- import { ref, shallowRef, reactive, onMounted } from "vue";
10
- import { useRouter } from "vue-router";
11
- import { jJsvRuntimeBridge, JsvFilterView } from "jsview";
12
- import sample from "../assets/jpegDemo.jpeg";
13
- import webpSample from "../assets/webpDemo.webp";
14
- import AnimatePic from "./AnimatePic.vue";
15
- import VideoLayer from "./VideoLayer.vue";
16
-
17
- let viewId = -1;
18
- let enableFilter = ref(true);
19
- let filterType = reactive({
20
- type: "gray-down",
21
- });
22
-
23
- const router = useRouter();
24
-
25
- const _onKeyDown = (ev) => {
26
- if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
27
- router.go(-1); // 有router时,是从DemoHomepage进入,回退
28
- } else {
29
- if (ev.keyCode == 13) {
30
- if (filterType.type == null) {
31
- filterType.type = "gray-down";
32
- } else {
33
- filterType.type = null;
34
- }
35
- }
36
- }
37
- return true;
38
- };
39
- onMounted(() => {
40
- jJsvRuntimeBridge.notifyPageLoaded();
41
- });
42
- </script>
43
-
44
- <template>
45
- <jsv-focus-block
46
- autoFocus
47
- :onAction="{
48
- onKeyDown: _onKeyDown,
49
- }"
50
- :style="{
51
- width: 1920,
52
- height: 1080,
53
- backgroundColor: '#007788',
54
- }"
55
- >
56
- <div
57
- id="main-test"
58
- :style="{
59
- left: 400,
60
- }"
61
- >
62
- <jsv-filter-view
63
- :width="501"
64
- :height="401"
65
- ref="filter1"
66
- :filterType="this.filterType.type"
67
- >
68
- <div
69
- :style="{
70
- left: 0,
71
- top: 0,
72
- width: 400,
73
- height: 350,
74
- backgroundImage: `url(${sample})`,
75
- }"
76
- ></div>
77
- <!-- 测试双层FBO (FilterView + opacity变化) 的透过处理(video播放) -->
78
- <video-layer :top="20" :left="45" :width="310" :height="310" />
79
- </jsv-filter-view>
80
- <div
81
- :style="{
82
- left: 450,
83
- top: 0,
84
- width: 400,
85
- height: 350,
86
- backgroundImage: `url(${sample})`,
87
- }"
88
- ></div>
89
-
90
- <jsv-filter-view
91
- :top="400"
92
- :width="402"
93
- :height="402"
94
- ref="filter2"
95
- :filterType="this.filterType.type"
96
- >
97
- <div
98
- :style="{
99
- width: 300,
100
- height: 300,
101
- backgroundImage: `url(${webpSample})`,
102
- }"
103
- ></div>
104
- <!-- 测试FBO + 形变效果 -->
105
- <animate-pic />
106
- </jsv-filter-view>
107
- <div
108
- :style="{
109
- left: 450,
110
- top: 400,
111
- width: 300,
112
- height: 300,
113
- backgroundImage: `url(${webpSample})`,
114
- }"
115
- ></div>
116
- </div>
117
- </jsv-focus-block>
118
- <div
119
- className="guideText"
120
- :style="{
121
- left: 10,
122
- top: 30,
123
- width: 400,
124
- height: 200,
125
- }"
126
- >
127
- {{
128
- `1. 布局说明: \n\
129
- 第1行第1列为黑白图(含透明动画+video),第2列为原图\n\
130
- 第2行第1列为黑白图(透明+变形动画),第2列为原图\n\
131
- \n\
132
- 2. 操作说明
133
- 按OK键关闭/开启第1列的黑白滤镜\n\
134
- \n\
135
- 3. 观测内容\n\
136
- A. 第1列是否正常切换黑白/彩色效果\n\
137
- B. 第1列的上下两个区域是否都含有淡出的动画
138
- C. 第1行第1列是否看到视频(彩色)\n\
139
- `
140
- }}
141
- </div>
142
- </template>
143
-
144
- <style scoped>
145
- .guideText {
146
- color: #ffffff;
147
- font-size: 16;
148
- line-height: 18;
149
- }
150
-
151
- @keyframes rotate {
152
- from {
153
- transform: rotate3d(0, 0, 1, 0);
154
- }
155
- to {
156
- transform: rotate3d(0, 0, 1, 360deg);
157
- }
158
- }
159
- </style>
@@ -1,62 +0,0 @@
1
- <script setup>
2
- import { JsvVideo } from "jsview";
3
-
4
- const props = defineProps({
5
- top: {
6
- type: Number,
7
- default: 0,
8
- },
9
- left: {
10
- type: Number,
11
- default: 0,
12
- },
13
- width: {
14
- type: Number,
15
- require: true,
16
- },
17
- height: {
18
- type: Number,
19
- require: true,
20
- },
21
- });
22
-
23
- // const video_url = "http://qcast-image.oss-cn-qingdao.aliyuncs.com/homepage/20210207/52fae4231350c85fec605b47bbe479c5.mp4";
24
- const video_url =
25
- "http://qcast-image.oss-cn-qingdao.aliyuncs.com/homepage/20190726/4cc4e6a8fd7d9d9c707ed4c4da27ca9d.mp4";
26
- </script>
27
-
28
- <style scoped>
29
- @keyframes opacityVideoDemo_CompositeOpacity {
30
- from {
31
- opacity: 0.1;
32
- }
33
- to {
34
- }
35
- }
36
- </style>
37
-
38
- <template>
39
- <div
40
- className="blockStyle"
41
- :style="{
42
- top: props.top,
43
- left: props.left,
44
- width: props.width,
45
- height: props.height,
46
- backgroundColor: '#0000FF',
47
- animation: 'opacityVideoDemo_CompositeOpacity 3s infinite',
48
- }"
49
- >
50
- <jsv-video
51
- :src="video_url"
52
- autoplay="autoplay"
53
- loop="loop"
54
- :style="{
55
- top: 5,
56
- left: 5,
57
- width: props.width - 10,
58
- height: props.height - 10,
59
- }"
60
- />
61
- </div>
62
- </template>
@@ -1,71 +0,0 @@
1
- <script setup>
2
- import { useRouter } from "vue-router";
3
- import { ref, shallowRef } from "vue";
4
- import { HORIZONTAL, MetroWidget } from "jsview";
5
- import FlipCard from "./FlipCard.vue";
6
- import { data } from "./data.js";
7
- import redEgg from "./assets/red_egg.png";
8
- import blueEgg from "./assets/blue_egg.png";
9
-
10
- const name = "/flipCard";
11
- const focusNode = shallowRef(null);
12
- const router = useRouter();
13
-
14
- const onKeyDown = (ev) => {
15
- // 8:Backspace, 27:Escape, 10000:盒子返回键
16
- if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
17
- router.go(-1); // 有router时,是从DemoHomepage进入,回退
18
- return true;
19
- }
20
-
21
- return false;
22
- };
23
- const measures = (item) => {
24
- return {
25
- width: item.blocks.w,
26
- height: item.blocks.h,
27
- focusable: item.focusable,
28
- hasSub: item.hasSub,
29
- };
30
- };
31
- const onFocus = () => {
32
- focusNode.value.findBlockByName(name).requestFocus();
33
- };
34
- </script>
35
-
36
- <template>
37
- <jsv-focus-block
38
- ref="focusNode"
39
- autoFocus
40
- :onAction="{
41
- onKeyDown: onKeyDown,
42
- onFocus: onFocus,
43
- }"
44
- >
45
- <metro-widget
46
- :name="name"
47
- :width="1280"
48
- :height="720"
49
- :padding="{ left: 50, top: 100, right: 20, bottom: 20 }"
50
- :data="data"
51
- :direction="HORIZONTAL"
52
- :measures="measures"
53
- >
54
- <template #renderItem="{ data, query, onEdge, onAction }">
55
- <FlipCard
56
- :data="data"
57
- :query="query"
58
- :onEdge="onEdge"
59
- :onAction="onAction"
60
- :width="191"
61
- :height="252"
62
- :backImg="redEgg"
63
- :foreImg="blueEgg"
64
- :perspective="300"
65
- :initFlipped="false"
66
- :name="name + '/' + data.id"
67
- />
68
- </template>
69
- </metro-widget>
70
- </jsv-focus-block>
71
- </template>
@@ -1,118 +0,0 @@
1
- <script setup>
2
- import { ref, shallowRef } from "vue";
3
- const props = defineProps({
4
- initFlipped: Boolean,
5
- width: Number,
6
- height: Number,
7
- backImg: String,
8
- foreImg: String,
9
- perspective: Number,
10
- data: Object,
11
- query: Object,
12
- onEdge: Function,
13
- onAction: Object,
14
- name: String,
15
- });
16
-
17
- let flipAnim = ref("");
18
- let flipped = ref(props.initFlipped);
19
- let focused = ref(false);
20
- let keyLocked = false;
21
- let focusNode = shallowRef(null);
22
-
23
- const onFocus = () => {
24
- focused.value = true;
25
- focusNode.value.findBlockByName(props.name).requestFocus();
26
- };
27
- const onBlur = () => {
28
- focused.value = false;
29
- };
30
- const onClick = () => {};
31
- const onFlipped = () => {
32
- flipped.value = !flipped.value;
33
- keyLocked = false;
34
- };
35
- const onKeyDown = (ev) => {
36
- if (keyLocked) {
37
- return true;
38
- } else {
39
- if (ev.keyCode === 13) {
40
- flipAnim.value = flipped.value ? "flip 1s" : "flipBack 1s";
41
- return true;
42
- }
43
- }
44
- return false;
45
- };
46
- props.onAction.register("onFocus", onFocus);
47
- props.onAction.register("onBlur", onBlur);
48
- props.onAction.register("onClick", onClick);
49
- </script>
50
-
51
- <template>
52
- <jsv-focus-block
53
- ref="focusNode"
54
- :name="name"
55
- :onAction="{
56
- onKeyDown: onKeyDown,
57
- }"
58
- >
59
- <div :style="{ width, height, perspective }">
60
- <div
61
- :style="{
62
- width,
63
- height,
64
- animation: flipAnim,
65
- transformStyle: 'preserve-3d',
66
- backgroundColor: '#FFFF00',
67
- }"
68
- :onAnimationEnd="onFlipped"
69
- >
70
- <div
71
- :style="{
72
- width,
73
- height,
74
- backgroundImage: backImg,
75
- backfaceVisibility: 'hidden',
76
- transform: flipped ? '' : 'rotate3d(0,1,0,180deg)',
77
- }"
78
- ></div>
79
- <div
80
- :style="{
81
- width,
82
- height,
83
- backgroundImage: foreImg,
84
- backfaceVisibility: 'hidden',
85
- transform: flipped ? 'rotate3d(0,1,0,-180deg)' : '',
86
- }"
87
- ></div>
88
- </div>
89
- </div>
90
- <div
91
- v-if="focused"
92
- :style="{ width: 20, height: 20, backgroundColor: '#FF0000' }"
93
- ></div>
94
- </jsv-focus-block>
95
- </template>
96
- <style>
97
- @keyframes flip {
98
- from {
99
- transform: rotate3d(0, 1, 0, 0deg);
100
- transform-origin: center center;
101
- }
102
- to {
103
- transform: rotate3d(0, 1, 0, 180deg);
104
- transform-origin: center center;
105
- }
106
- }
107
-
108
- @keyframes flipBack {
109
- from {
110
- transform: rotate3d(0, 1, 0, 0deg);
111
- transform-origin: center center;
112
- }
113
- to {
114
- transform: rotate3d(0, 1, 0, -180deg);
115
- transform-origin: center center;
116
- }
117
- }
118
- </style>
Binary file
@@ -1,13 +0,0 @@
1
- let data = [];
2
- for (let i = 0; i < 12; i++) {
3
- data.push({
4
- blocks: {
5
- w: 200,
6
- h: 300
7
- },
8
- focusable: true,
9
- id: i
10
- });
11
- }
12
-
13
- export { data }
@@ -1,215 +0,0 @@
1
- <!--
2
- * @Author: ChenChanghua
3
- * @Date: 2022-05-06 19:32:53
4
- * @LastEditors: ChenChanghua
5
- * @LastEditTime: 2022-07-08 11:39:09
6
- * @Description: file content
7
- -->
8
- <script setup>
9
- import { jJsvRuntimeBridge, JsvGrid, LineType, EdgeDirection } from "jsview";
10
- import { reactive, ref, shallowRef, onMounted } from "vue";
11
- import { useRouter } from "vue-router";
12
- import ItemVue from "./Item.vue";
13
- import FocusItem from "./FocusItem.vue";
14
- const lineType = new LineType(1, 3);
15
- const name1 = "updatePage1";
16
- const name2 = "updatePage2";
17
- const widget1 = shallowRef(null);
18
- const widget2 = shallowRef(null);
19
- const router = useRouter();
20
- const _provideData1 = () => {
21
- let data = [];
22
- for (let i = 0; i < 113; i++) {
23
- data.push({
24
- content: i + "_CCCCCCCCCCCCCCCCCCCCCCC",
25
- });
26
- }
27
- return data;
28
- };
29
- const _provideData2 = () => {
30
- let data2 = [];
31
- for (let i = 0; i < 113; i++) {
32
- data2.push({
33
- name: i + "_D",
34
- baseColor: i,
35
- });
36
- }
37
- return data2;
38
- };
39
- const _provideData3 = () => {
40
- return [];
41
- };
42
-
43
- const _onEdge1 = (info) => {
44
- if (info.direction == EdgeDirection.right) {
45
- widget2.value.getFocusBlockRef().findBlockByName(name2).requestFocus();
46
- }
47
- };
48
- const _onEdge2 = (info) => {
49
- if (info.direction == EdgeDirection.left) {
50
- widget1.value.getFocusBlockRef().findBlockByName(name1).requestFocus();
51
- }
52
- };
53
- const _onKeyDown = (ev) => {
54
- console.log("app onkeydown");
55
- if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
56
- router.go(-1); // 有router时,是从DemoHomepage进入,回退
57
- }
58
- return true;
59
- };
60
-
61
- onMounted(() => {
62
- jJsvRuntimeBridge.notifyPageLoaded();
63
- widget2.value.getFocusBlockRef()?.findBlockByName(name2).requestFocus();
64
- });
65
- </script>
66
-
67
- <template>
68
- <jsv-focus-block
69
- autoFocus
70
- :onAction="{
71
- onKeyDown: _onKeyDown,
72
- }"
73
- :style="{
74
- width: 1920,
75
- height: 1080,
76
- backgroundColor: '#FFFFFF',
77
- }"
78
- ><jsv-grid
79
- ref="widget1"
80
- :name="name1"
81
- :left="50"
82
- :top="50"
83
- :provideData="_provideData1"
84
- :row="4"
85
- :column="5"
86
- :itemSize="{
87
- width: 100,
88
- height: 50,
89
- }"
90
- :gapInfo="{
91
- row: 10,
92
- column: 10,
93
- }"
94
- :verticalUpdate="true"
95
- :columnFirst="true"
96
- :onEdge="_onEdge1"
97
- :initFocusId="21"
98
- :loopUpdate="true"
99
- >
100
- <template #renderItem="{ userData, widgetData, onAction }">
101
- <item-vue
102
- :userData="userData"
103
- :widgetData="widgetData"
104
- :onAction="onAction"
105
- />
106
- </template>
107
- </jsv-grid>
108
- <div
109
- :style="{
110
- left: 100,
111
- top: 300,
112
- width: 300,
113
- height: 50,
114
- fontSize: 30,
115
- }"
116
- >
117
- 纵向排布, 翻页模式
118
- </div>
119
- <div
120
- :style="{
121
- left: 700,
122
- }"
123
- >
124
- <jsv-grid
125
- ref="widget2"
126
- :name="name2"
127
- :left="50"
128
- :top="50"
129
- :provideData="_provideData2"
130
- :row="4"
131
- :column="5"
132
- :itemSize="{
133
- width: 100,
134
- height: 50,
135
- }"
136
- :gapInfo="{
137
- row: 10,
138
- column: 10,
139
- }"
140
- :verticalUpdate="false"
141
- :columnFirst="true"
142
- :onEdge="_onEdge2"
143
- :updateType="lineType"
144
- :initFocusId="0"
145
- >
146
- <template #renderItem="{ userData, widgetData, onAction }">
147
- <focus-item
148
- :userData="userData"
149
- :widgetData="widgetData"
150
- :onAction="onAction"
151
- />
152
- </template>
153
- </jsv-grid>
154
- <div
155
- :style="{
156
- left: 100,
157
- top: 300,
158
- width: 300,
159
- height: 50,
160
- fontSize: 30,
161
- }"
162
- >
163
- 横向排布, 逐行刷新
164
- </div>
165
- </div>
166
-
167
- <div
168
- :style="{
169
- top: 500,
170
- }"
171
- >
172
- <jsv-grid
173
- ref="widget3"
174
- name="empty"
175
- :left="50"
176
- :top="50"
177
- :provideData="_provideData3"
178
- :row="4"
179
- :column="5"
180
- :itemSize="{
181
- width: 100,
182
- height: 50,
183
- }"
184
- :gapInfo="{
185
- row: 10,
186
- column: 10,
187
- }"
188
- :verticalUpdate="false"
189
- :columnFirst="true"
190
- :onEdge="_onEdge2"
191
- :updateType="lineType"
192
- :initFocusId="0"
193
- >
194
- <template #renderItem="{ userData, widgetData, onAction }">
195
- <item-vue
196
- :userData="userData"
197
- :widgetData="widgetData"
198
- :onAction="onAction"
199
- />
200
- </template>
201
- </jsv-grid>
202
- <div
203
- :style="{
204
- left: 100,
205
- top: 300,
206
- width: 300,
207
- height: 50,
208
- fontSize: 30,
209
- }"
210
- >
211
- 空数据
212
- </div>
213
- </div>
214
- </jsv-focus-block>
215
- </template>