@shijiu/jsview-vue-samples 2.0.1073 → 2.0.1106

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 (90) hide show
  1. package/Basic/components/div/DivBackground.vue +13 -25
  2. package/Basic/components/img/ImageGroup.vue +14 -20
  3. package/Basic/components/img/ImgLayout.vue +59 -68
  4. package/BasicFocusControl/components/BaseBlock.vue +11 -17
  5. package/BasicFocusControl/components/MainAreaLeftBlock.vue +2 -2
  6. package/BasicFocusControl/components/MainAreaRightBlock.vue +2 -2
  7. package/BasicFocusControl/components/SideBarBlock.vue +2 -2
  8. package/CssPreprocessor/App.vue +40 -51
  9. package/CssPreprocessor/Less/App.vue +6 -14
  10. package/CssPreprocessor/Scss/App.vue +6 -14
  11. package/CssPreprocessor/Scss/components/scss-group1/ScssOperations.vue +0 -1
  12. package/CssPreprocessor/Stylus/App.vue +6 -14
  13. package/CssPreprocessor/utils/ContentBlock.vue +30 -12
  14. package/CssPreprocessor/utils/ContentList.vue +23 -14
  15. package/CssPreprocessor/utils/Panel.vue +34 -23
  16. package/CssPreprocessor/utils/TitleBar.vue +7 -9
  17. package/DemoHomepage/components/BodyFrame.vue +54 -78
  18. package/DemoHomepage/components/Dialog.vue +38 -43
  19. package/DemoHomepage/components/Item.vue +52 -55
  20. package/DemoHomepage/components/TabFrame.vue +43 -72
  21. package/DemoHomepage/router.js +1 -1
  22. package/GiftRain/App.vue +10 -4
  23. package/GridDemo/App.vue +5 -5
  24. package/GridDemo/FocusItem.vue +3 -5
  25. package/GridDemo/Item.vue +4 -24
  26. package/HashHistory/App.vue +0 -10
  27. package/HashHistory/views/MainPage.vue +0 -1
  28. package/ImpactStop/App.vue +0 -1
  29. package/Input/App.vue +106 -150
  30. package/Input/FullKeyboard.vue +18 -28
  31. package/Input/InputPanel.vue +87 -109
  32. package/Input/KeyboardItem.vue +35 -45
  33. package/JsvRadarChart/App.vue +16 -19
  34. package/LongImage/Button.vue +2 -3
  35. package/LongText/App.vue +0 -3
  36. package/LongText/Button.vue +0 -1
  37. package/LongText/LongTextScroll.vue +0 -4
  38. package/Marquee/App.vue +1 -0
  39. package/MetroWidgetDemos/PerformanceTest/App.vue +2 -3
  40. package/MetroWidgetDemos/PerformanceTest/Item.vue +52 -55
  41. package/MetroWidgetDemos/PerformanceTest/components/ContentItem.vue +26 -26
  42. package/MetroWidgetDemos/PerformanceTest/components/MyTab.vue +86 -95
  43. package/MetroWidgetDemos/PingPong/App.vue +56 -89
  44. package/MetroWidgetDemos/PingPong/AppPage.vue +3 -3
  45. package/MetroWidgetDemos/PingPong/Item.vue +1 -1
  46. package/MetroWidgetDemos/PingPong/TabItem.vue +3 -3
  47. package/MetroWidgetDemos/PingPong/WidgetItem.vue +1 -1
  48. package/MetroWidgetDemos/SkeletonDiagram/App.vue +2 -4
  49. package/MetroWidgetDemos/basic/Item.vue +1 -1
  50. package/MetroWidgetDemos/direction/App.vue +0 -2
  51. package/MetroWidgetDemos/direction/Item.vue +1 -1
  52. package/MetroWidgetDemos/focusableItemBasic/App.vue +1 -1
  53. package/MetroWidgetDemos/focusableItemBasic/ButtonItem.vue +1 -1
  54. package/MetroWidgetDemos/focusableItemMetroWidget/App.vue +1 -1
  55. package/MetroWidgetDemos/focusableItemMetroWidget/Item.vue +1 -1
  56. package/MetroWidgetDemos/focusableItemMetroWidget/WidgetItem.vue +1 -1
  57. package/MetroWidgetDemos/focusableItemMix/App.vue +1 -1
  58. package/MetroWidgetDemos/focusableItemMix/ButtonItem.vue +1 -1
  59. package/MetroWidgetDemos/focusableItemMix/Item.vue +1 -1
  60. package/MetroWidgetDemos/itemSizeUpdate/backward/Item.vue +23 -25
  61. package/MetroWidgetDemos/layoutType/App.vue +0 -2
  62. package/MetroWidgetDemos/layoutType/Item.vue +1 -1
  63. package/MetroWidgetDemos/ninePatchFocusPage/App.vue +0 -1
  64. package/MetroWidgetDemos/ninePatchFocusPage/PageRow.vue +1 -1
  65. package/MetroWidgetDemos/padding/App.vue +0 -2
  66. package/MetroWidgetDemos/padding/Item.vue +1 -1
  67. package/MetroWidgetDemos/slideSetting/Item.vue +1 -1
  68. package/MockjsDemo/App.vue +26 -11
  69. package/MockjsDemo/mock/index.js +9 -1
  70. package/QrcodeDemo/App.vue +0 -1
  71. package/SoundPool/App.vue +1 -2
  72. package/SpriteImage/App.vue +89 -125
  73. package/Swiper/App.vue +1 -3
  74. package/TestNativeSharedView/App.vue +104 -48
  75. package/TextBox/RenderCenter.vue +89 -113
  76. package/TextBox/RenderLeft.vue +89 -113
  77. package/TextBox/RenderOneLine.vue +7 -10
  78. package/TextBox/RenderRight.vue +8 -11
  79. package/TextShadowDemo/App.vue +54 -75
  80. package/TextureAnimation/App.vue +175 -287
  81. package/TextureAnimation/App2.vue +1 -5
  82. package/ThrowMoveDemo/AccelerateDemo.vue +40 -71
  83. package/ThrowMoveDemo/App.vue +13 -23
  84. package/ThrowMoveDemo/TargetDemo.vue +24 -53
  85. package/ThrowMoveDemo/UDParabolicDemo.vue +31 -60
  86. package/VideoDemo/App.vue +71 -116
  87. package/package.json +1 -1
  88. package/VideoDemo/components/Button.vue +0 -58
  89. package/VideoDemo/components/Controllor.vue +0 -197
  90. package/VideoDemo/components/VideoFrame.vue +0 -140
@@ -4,7 +4,7 @@
4
4
  * @Description: 一个简单的按左右键, 焦点在左右两个view来回切换的控件
5
5
  -->
6
6
  <script setup>
7
- import { ref, shallowRef } from "vue";
7
+ import { ref } from "vue";
8
8
  import { useFocusHub } from "jsview";
9
9
 
10
10
  const props = defineProps({
@@ -4,7 +4,7 @@
4
4
  * @Description: file content
5
5
  -->
6
6
  <script setup>
7
- import { ref, shallowRef, inject } from "vue";
7
+ import { ref } from "vue";
8
8
 
9
9
  const props = defineProps({
10
10
  data: Object,
@@ -33,29 +33,7 @@ const duration = 200;
33
33
 
34
34
  let timeoutHandler = -1;
35
35
 
36
- const getResizeAnchor = () => {
37
- if (props.query.index == 0) {
38
- return 0;
39
- } else if (props.query.index == props.dataLength - 1) {
40
- return 1;
41
- } else {
42
- return 0.5;
43
- }
44
- };
45
-
46
- const locateSetting = {
47
- type: METRO_WIDGET_CONST.ITEM_RESIZE.CUSTOMER_SET,
48
- func: (oldRect, newRect, oldItemPadding) => {
49
- if (oldItemPadding + newRect.width > props.widgetLayout.width) {
50
- return (
51
- props.widgetLayout.width - newRect.width - props.widgetPadding.right
52
- );
53
- } else {
54
- return oldItemPadding;
55
- }
56
- },
57
- };
58
-
36
+ let originPadding;
59
37
  const animInfo = {
60
38
  duration: duration,
61
39
  onEnd: () => {
@@ -74,7 +52,22 @@ const onFocus = () => {
74
52
  width: width.value,
75
53
  height: props.data.height,
76
54
  },
77
- locateSetting,
55
+ {
56
+ type: METRO_WIDGET_CONST.ITEM_RESIZE.CUSTOMER_SET,
57
+ func: (oldRect, newRect, oldItemPadding) => {
58
+ originPadding = oldItemPadding;
59
+ if (oldItemPadding + newRect.width > props.widgetLayout.width) {
60
+ //新的item超出了widget的宽度
61
+ return (
62
+ props.widgetLayout.width -
63
+ newRect.width -
64
+ props.widgetPadding.right
65
+ );
66
+ } else {
67
+ return oldItemPadding;
68
+ }
69
+ },
70
+ },
78
71
  animInfo
79
72
  );
80
73
  }, 1000); /* 延迟1秒变化 */
@@ -91,7 +84,12 @@ const onBlur = () => {
91
84
  width: width.value,
92
85
  height: props.data.height,
93
86
  },
94
- locateSetting,
87
+ {
88
+ type: METRO_WIDGET_CONST.ITEM_RESIZE.CUSTOMER_SET,
89
+ func: (oldRect, newRect, oldItemPadding) => {
90
+ return originPadding;
91
+ },
92
+ },
95
93
  animInfo
96
94
  );
97
95
  }
@@ -8,8 +8,6 @@ import { MetroWidget, HORIZONTAL, useFocusHub, EdgeDirection } from "jsview";
8
8
  import Item from "./Item.vue";
9
9
  import { onMounted } from "vue";
10
10
 
11
- const TAG = "MetroWidgetDemo";
12
-
13
11
  const focusHub = useFocusHub();
14
12
 
15
13
  const randomColor = () => {
@@ -4,7 +4,7 @@
4
4
  * @Description: file content
5
5
  -->
6
6
  <script setup>
7
- import { ref, shallowRef, inject } from "vue";
7
+ import { ref, shallowRef } from "vue";
8
8
 
9
9
  const props = defineProps({
10
10
  data: Object,
@@ -7,7 +7,6 @@
7
7
  import {
8
8
  MetroWidget,
9
9
  VERTICAL,
10
- EdgeDirection,
11
10
  useFocusHub,
12
11
  JsvNinePatch,
13
12
  } from "jsview";
@@ -1,7 +1,7 @@
1
1
 
2
2
  <script setup>
3
3
  import { HORIZONTAL, MetroWidget, useFocusHub } from "jsview";
4
- import { ref, shallowRef } from "vue";
4
+ import { shallowRef } from "vue";
5
5
  import Item from "./Item.vue";
6
6
 
7
7
  const props = defineProps({
@@ -8,8 +8,6 @@ import { MetroWidget, HORIZONTAL, useFocusHub, EdgeDirection } from "jsview";
8
8
  import Item from "./Item.vue";
9
9
  import { onMounted } from "vue";
10
10
 
11
- const TAG = "MetroWidgetDemo";
12
-
13
11
  const focusHub = useFocusHub();
14
12
 
15
13
  const randomColor = () => {
@@ -4,7 +4,7 @@
4
4
  * @Description: file content
5
5
  -->
6
6
  <script setup>
7
- import { ref, shallowRef, inject } from "vue";
7
+ import { ref, shallowRef } from "vue";
8
8
 
9
9
  const props = defineProps({
10
10
  data: Object,
@@ -4,7 +4,7 @@
4
4
  * @Description: file content
5
5
  -->
6
6
  <script setup>
7
- import { ref, shallowRef, inject } from "vue";
7
+ import { ref, shallowRef } from "vue";
8
8
 
9
9
  const props = defineProps({
10
10
  data: Object,
@@ -2,6 +2,8 @@
2
2
  import KeyEventCatcher from './KeyEventCatcher.vue';
3
3
  import resImage from '../assets/pngNoAlphaDemo.png';
4
4
  import { ref } from 'vue';
5
+
6
+ // 打开注释为只在开发环境下生效
5
7
  // if(process.env.NODE_ENV == 'development') {
6
8
  await import('./mock/index.js')
7
9
  // }
@@ -11,8 +13,9 @@ export default {
11
13
  KeyEventCatcher,
12
14
  },
13
15
  data() {
14
- const defName = "这是Mock前的数据"
16
+ const defName = "这是Mock前的本地数据"
15
17
  return {
18
+ index: 0,
16
19
  defName: defName,
17
20
  name: ref(defName),
18
21
  resImage: resImage,
@@ -20,18 +23,30 @@ export default {
20
23
  },
21
24
  mounted() {
22
25
  setInterval(async () => {
23
- if (this.name != this.defName) {
24
- this.name = this.defName;
25
- } else {
26
+ this.index = (this.index + 1) % 3
27
+
28
+ let url = null;
29
+ switch(this.index) {
30
+ case 0:
31
+ this.name = this.defName;
32
+ break;
33
+ case 1:
34
+ url = '/api/testData';
35
+ break;
36
+ case 2:
37
+ url = 'http://test.com/api/testData';
38
+ break;
39
+ }
40
+ if (url) {
26
41
  const xhr = new XMLHttpRequest();
27
- xhr.open('GET', '/api/testData');
42
+ xhr.open('GET', url);
28
43
  xhr.onload = () => {
29
- if (xhr.status !== 200) {
30
- console.error('Failed to get data from mockjs')
31
- return;
44
+ try {
45
+ const jsonData = JSON.parse(xhr.responseText);
46
+ this.name = jsonData.data.name;
47
+ } catch(ex) {
48
+ console.error('Failed to get data from mockjs', ex)
32
49
  }
33
- const jsonData = JSON.parse(xhr.responseText);
34
- this.name = jsonData.data.name;
35
50
  };
36
51
  xhr.send();
37
52
  }
@@ -43,7 +58,7 @@ export default {
43
58
 
44
59
  <template>
45
60
  <KeyEventCatcher/>
46
- <div :style="{left:450, top: 200, width:500,
61
+ <div :style="{left:450, top:200, width:800,
47
62
  fontSize: 50, color: '#6688FF'}">
48
63
  {{ name }}
49
64
  </div>
@@ -5,7 +5,15 @@ console.log("Generating mock data...");
5
5
  Mock.mock('/api/testData', 'get', {
6
6
  code: 0,
7
7
  data: {
8
- name: '从Mockjs获取的数据'
8
+ name: '从Mockjs同域名获取的数据'
9
+ }
10
+ })
11
+
12
+
13
+ Mock.mock('http://test.com/api/testData', 'get', {
14
+ code: 0,
15
+ data: {
16
+ name: '从Mockjs跨域名获取的数据'
9
17
  }
10
18
  })
11
19
 
@@ -1,6 +1,5 @@
1
1
  <script setup>
2
2
  import { JsvQrcode } from "jsview";
3
- import { ref } from "vue";
4
3
  import { useRouter } from "vue-router";
5
4
 
6
5
  const router = useRouter();
package/SoundPool/App.vue CHANGED
@@ -12,11 +12,10 @@ import {
12
12
  JsvAudio,
13
13
  globalLoadJsvAudioPlugin,
14
14
  } from "jsview";
15
- import { onMounted, onBeforeUnmount, shallowRef, toRaw } from "vue";
15
+ import { onMounted, onBeforeUnmount, shallowRef } from "vue";
16
16
  import { useRouter } from "vue-router";
17
17
 
18
18
  import bgMusic from "./bgmusic.mp3";
19
- // const bgMusic = "http://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/VideoTestSample/bg_30s_music.mp3";
20
19
 
21
20
  const router = useRouter();
22
21
  const soundPool = new JsvSoundPool(10);
@@ -25,149 +25,113 @@
25
25
  * A: meta.size为整张切图的大小;frames中为每一帧的位置和大小信息,目前仅支持统一大小的帧
26
26
  -->
27
27
 
28
- <script>
28
+ <script setup>
29
29
  import { SpriteController, JsvSpriteAnim } from "jsview";
30
30
  import spriteImage from "./images/egg_break.png";
31
31
  import config_json from "./images/egg_break.json";
32
- export default {
33
- components: {
34
- JsvSpriteAnim,
35
- },
36
- setup() {
37
- return {
38
- spriteImage: spriteImage,
39
- config_json: config_json,
40
- };
41
- },
42
- data() {
43
- console.log(
44
- "test spriteImage =",
45
- spriteImage,
46
- "/n config_json=",
47
- config_json
48
- );
49
- const sprite_info = this._formatInfo();
50
- console.log("test sprite_into =", sprite_info);
51
- const view_size = {
52
- w: sprite_info.maxW,
53
- h: sprite_info.maxH,
54
- };
55
- console.log("test view_size =", view_size);
56
- return {
57
- sprite_info,
58
- view_size,
59
- spriteController: new SpriteController(),
60
- show: true,
61
- };
62
- },
63
- methods: {
64
- spriteAnimEnd() {
65
- this.show = false;
66
- },
67
- onKeyDown(ev) {
68
- if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
69
- this.$router?.go(-1); // 有router时,是从DemoHomepage进入,回退
70
- return true;
71
- }
72
- return true;
73
- },
74
- _formatInfo() {
75
- const info = {
76
- frames: [],
77
- meta: {
78
- size: this.config_json.meta.size,
79
- },
80
- };
32
+ import { shallowRef } from "vue"
33
+ import { useRouter } from "vue-router";
81
34
 
82
- let frames_ref = info.frames;
83
- let max_width = 0;
84
- let max_height = 0;
35
+ console.log("test spriteImage =", spriteImage, "/n config_json=", config_json);
36
+ const router = useRouter();
85
37
 
86
- for (let i = 0; i < this.config_json.frames.length; i++) {
87
- const target = this.config_json.frames[i].spriteSourceSize;
88
- frames_ref.push({
89
- target,
90
- source: this.config_json.frames[i].frame,
91
- });
92
- const sprite_with = target.x + target.w;
93
- const sprite_height = target.y + target.h;
94
- if (sprite_with > max_width) {
95
- max_width = sprite_with;
96
- }
97
- if (sprite_height > max_height) {
98
- max_height = sprite_height;
99
- }
100
- }
101
- return { info, maxW: max_width, maxH: max_height };
38
+ const _formatInfo = () => {
39
+ const info = {
40
+ frames: [],
41
+ meta: {
42
+ size: config_json.meta.size,
102
43
  },
103
- },
44
+ };
45
+
46
+ let frames_ref = info.frames;
47
+ let max_width = 0;
48
+ let max_height = 0;
49
+
50
+ for (let i = 0; i < config_json.frames.length; i++) {
51
+ const target = config_json.frames[i].spriteSourceSize;
52
+ frames_ref.push({
53
+ target,
54
+ source: config_json.frames[i].frame,
55
+ });
56
+ const sprite_with = target.x + target.w;
57
+ const sprite_height = target.y + target.h;
58
+ if (sprite_with > max_width) {
59
+ max_width = sprite_with;
60
+ }
61
+ if (sprite_height > max_height) {
62
+ max_height = sprite_height;
63
+ }
64
+ }
65
+ return { info, maxW: max_width, maxH: max_height };
66
+ }
67
+
68
+ const spriteController = new SpriteController()
69
+ const sprite_info = _formatInfo();
70
+ console.log("test sprite_into =", sprite_info);
71
+
72
+ const view_size = {
73
+ w: sprite_info.maxW,
74
+ h: sprite_info.maxH,
104
75
  };
76
+
77
+ let show = shallowRef(true)
78
+
79
+ const spriteAnimEnd = () => {
80
+ show.value = false;
81
+ }
82
+ const onKeyDown = (ev) => {
83
+ if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
84
+ router?.go(-1); // 有router时,是从DemoHomepage进入,回退
85
+ return true;
86
+ }
87
+ return true;
88
+ }
105
89
  </script>
106
90
 
107
91
  <template>
108
- <jsv-focus-block
109
- autoFocus
110
- :onAction="{
111
- onKeyDown: onKeyDown,
112
- }"
113
- >
114
- <div
115
- :style="{
116
- textAlign: 'center',
117
- fontSize: 30,
118
- lineHeight: 50,
119
- color: '#ffffff',
120
- left: 200,
121
- top: 100,
122
- width: 434,
123
- height: 50,
124
- backgroundColor: 'rgba(27,38,151,0.8)',
125
- }"
126
- >
92
+ <jsv-focus-block autoFocus :onAction="{
93
+ onKeyDown: onKeyDown,
94
+ }">
95
+ <div :style="{
96
+ textAlign: 'center',
97
+ fontSize: 30,
98
+ lineHeight: 50,
99
+ color: '#ffffff',
100
+ left: 200,
101
+ top: 100,
102
+ width: 434,
103
+ height: 50,
104
+ backgroundColor: 'rgba(27,38,151,0.8)',
105
+ }">
127
106
  精灵图效果
128
107
  </div>
129
108
  <!--
130
109
  通过show进行 清理精灵图,用于验证精灵图清理后,StyleSheet中cssRules的keyFrame清理工作能正常完成
131
110
  -->
132
- <div
133
- v-if="this.show"
134
- :style="{ left: 200, top: 150, transform: 'scale3d(2.5, 2.5, 1)' }"
135
- >
136
- <JsvSpriteAnim
137
- :spriteInfo="sprite_info.info"
138
- :loop="10"
139
- :viewSize="view_size"
140
- :duration="0.8"
141
- :controller="this.spriteController"
142
- :autostart="true"
143
- :onAnimEnd="spriteAnimEnd"
144
- :imageUrl="spriteImage"
145
- />
111
+ <div v-if="show" :style="{ left: 200, top: 150, transform: 'scale3d(2.5, 2.5, 1)' }">
112
+ <JsvSpriteAnim :spriteInfo="sprite_info.info" :loop="10" :viewSize="view_size" :duration="0.8"
113
+ :controller="spriteController" :autostart="true" :onAnimEnd="spriteAnimEnd" :imageUrl="spriteImage" />
146
114
  </div>
147
115
 
148
- <div
149
- :style="{
150
- textAlign: 'center',
151
- fontSize: 30,
152
- lineHeight: 50,
153
- color: '#ffffff',
154
- left: 700,
155
- top: 100,
156
- width: 434,
157
- height: 50,
158
- backgroundColor: 'rgba(27,38,151,0.8)',
159
- }"
160
- >
116
+ <div :style="{
117
+ textAlign: 'center',
118
+ fontSize: 30,
119
+ lineHeight: 50,
120
+ color: '#ffffff',
121
+ left: 700,
122
+ top: 100,
123
+ width: 434,
124
+ height: 50,
125
+ backgroundColor: 'rgba(27,38,151,0.8)',
126
+ }">
161
127
  原始图片
162
128
  </div>
163
- <div
164
- :style="{
165
- left: 700,
166
- top: 150,
167
- width: 434,
168
- height: 372,
169
- backgroundImage: `url(${spriteImage})`,
170
- }"
171
- />
129
+ <div :style="{
130
+ left: 700,
131
+ top: 150,
132
+ width: 434,
133
+ height: 372,
134
+ backgroundImage: `url(${spriteImage})`,
135
+ }" />
172
136
  </jsv-focus-block>
173
137
  </template>
package/Swiper/App.vue CHANGED
@@ -6,12 +6,10 @@
6
6
 
7
7
  <script setup>
8
8
  import { JsvSwiper, useFocusHub, EdgeDirection } from "jsview";
9
- import { ref, onMounted } from "vue";
9
+ import { onMounted } from "vue";
10
10
 
11
11
  const focusHub = useFocusHub();
12
12
 
13
- const mySwiper = ref(null);
14
-
15
13
  function randomColor() {
16
14
  let randomColor = Math.round(Math.random() * 2 ** 24).toString(16);
17
15
  return (