@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
@@ -1,197 +0,0 @@
1
- <script setup>
2
- import { inject } from "vue";
3
- import { useRouter } from "vue-router";
4
- import Button from "./Button.vue";
5
-
6
- const props = defineProps({
7
- style: {
8
- type: Object,
9
- default() {
10
- return { width: 1400, height: 50 };
11
- },
12
- },
13
- });
14
- const router = useRouter();
15
-
16
- const useTexture = inject("useTexture");
17
- const objectFit = inject("objectFit");
18
- const videoRect = inject("videoRect");
19
- const playVideo = inject("playVideo");
20
- const seekVideo = inject("seekVideo");
21
- const enableAnimation = inject("enableAnimation");
22
- const videoTime = inject("videoTime");
23
- const objectFitTitle = inject("objectFitTitle");
24
- let objectFitIndex = 0;
25
- let focusedItemIndex = 0;
26
-
27
- const setObjectFit = (index) => {
28
- if (typeof index === "number") {
29
- objectFitIndex = index;
30
- } else {
31
- objectFitIndex = ++objectFitIndex % objectFitData.length;
32
- }
33
- const data = objectFitData[objectFitIndex];
34
- objectFit.value = data.objectFit;
35
- objectFitTitle.value = data.name;
36
- videoRect.value = {
37
- left: (1280 - data.width) / 2,
38
- top: 50,
39
- width: data.width,
40
- height: 500,
41
- };
42
- };
43
-
44
- const buttonList = [
45
- {
46
- name: "ToVideoMode",
47
- onClick: () => {
48
- playVideo.value = null; // 停止并初始化播放
49
- enableAnimation.value = false;
50
- videoTime.currentTime = 0;
51
- videoTime.duration = 0;
52
- useTexture.value = !useTexture.value;
53
- },
54
- isModeButton: true,
55
- },
56
- {
57
- name: "Play",
58
- onClick: () => {
59
- playVideo.value = !playVideo.value;
60
- },
61
- isPlayButton: true,
62
- },
63
- {
64
- name: "Forward",
65
- onClick: () => {
66
- seekVideo.value = seekVideo.value !== 5 ? 5 : 5.1 /* 为了触发ref更新 */;
67
- },
68
- },
69
- {
70
- name: "Rewind",
71
- onClick: () => {
72
- seekVideo.value =
73
- seekVideo.value !== -5 ? -5 : -5.1 /* 为了触发ref更新 */;
74
- },
75
- },
76
- {
77
- name: "ObjectFit",
78
- onClick: setObjectFit,
79
- },
80
- {
81
- name: "StartAnimation",
82
- onClick: () => {
83
- enableAnimation.value = !enableAnimation.value;
84
- },
85
- isAnimationButton: true,
86
- },
87
- ];
88
- const objectFitData = [
89
- { name: "contain-horizontal", objectFit: "contain", width: 1200 },
90
- { name: "contain-vertical", objectFit: "contain", width: 400 },
91
- { name: "fill", objectFit: "fill", width: 1200 },
92
- { name: "none-horizontal", objectFit: "none", width: 1200 },
93
- { name: "none-vertical", objectFit: "none", width: 400 },
94
- { name: "cover-horizontal", objectFit: "cover", width: 1200 },
95
- { name: "cover-vertical", objectFit: "cover", width: 400 },
96
- ];
97
-
98
- const getButtonData = () => {
99
- let length = buttonList.length;
100
- if (!useTexture.value) {
101
- // 只有texture方式可以做animation
102
- length -= 1;
103
- }
104
-
105
- let data = [];
106
- for (let idx = 0; idx < length; idx++) {
107
- const button = buttonList[idx];
108
- data.push({
109
- ...button,
110
- size: {
111
- width: 180,
112
- height: 40,
113
- },
114
- });
115
- }
116
- return data;
117
- };
118
- const getButtonDataLength = () => {
119
- let length = buttonList.length;
120
- if (!useTexture.value) {
121
- // 只有texture方式可以做animation
122
- length -= 1;
123
- }
124
-
125
- return length;
126
- };
127
- const onKeyDown = (ev) => {
128
- // 8:Backspace, 27:Escape, 10000:盒子返回键
129
- if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
130
- router?.go(-1); // 有router时,回退
131
- return true;
132
- }
133
-
134
- let changeFocusTo = -1;
135
- const buttonCount = getButtonDataLength();
136
- switch (ev.keyCode) {
137
- case 37: // Left
138
- changeFocusTo = (focusedItemIndex - 1 + buttonCount) % buttonCount;
139
- break;
140
- case 39: // Right
141
- changeFocusTo = (focusedItemIndex + 1) % buttonCount;
142
- break;
143
- default:
144
- break;
145
- }
146
- if (changeFocusTo >= 0) {
147
- ev.ownerNode
148
- .findBlockByName("video-" + (changeFocusTo + 10).toString())
149
- .requestFocus();
150
- focusedItemIndex = changeFocusTo;
151
- return true;
152
- }
153
-
154
- return false;
155
- };
156
-
157
- const getShowName = (item) => {
158
- if (item.isModeButton) {
159
- return useTexture.value ? "ToVideoMode" : "ToOffscreenMode";
160
- } else if (item.isPlayButton) {
161
- return playVideo.value ? "Pause" : "Play";
162
- } else if (item.isAnimationButton) {
163
- return enableAnimation.value ? "StopAnimation" : "StartAnimation";
164
- }
165
- return item.name;
166
- };
167
-
168
- useTexture.value = false;
169
- setObjectFit(0);
170
- playVideo.value = !window.jsvIsBrowserDebug; // jsview自动播放该视频 TODO h5需做相应调整;
171
- enableAnimation.value = false;
172
- </script>
173
-
174
- <template>
175
- <div :style="style" :key="useTexture" :set="(leftOffset = 0)">
176
- <jsv-focus-block :onKeyDown="onKeyDown">
177
- <Button
178
- v-for="(item, index) in getButtonData()"
179
- :key="index"
180
- :set="(leftOffset += item.size.width + 10)"
181
- :style="{
182
- left: leftOffset - item.size.width,
183
- width: item.size.width,
184
- height: item.size.height,
185
- }"
186
- :autoFocus="index === 0"
187
- :name="'video-' + (index + 10).toString()"
188
- :onClick="item.onClick"
189
- >
190
- {{ getShowName(item) }}
191
- </Button>
192
- </jsv-focus-block>
193
- </div>
194
- </template>
195
-
196
- <style scoped>
197
- </style>
@@ -1,140 +0,0 @@
1
- <script setup>
2
- import { inject, watch, onMounted } from "vue";
3
- import { JsvVideo } from "jsview";
4
-
5
- const useTexture = inject("useTexture");
6
- const objectFit = inject("objectFit");
7
- const videoRect = inject("videoRect");
8
- const playVideo = inject("playVideo");
9
- const seekVideo = inject("seekVideo");
10
- const enableAnimation = inject("enableAnimation");
11
- const videoTime = inject("videoTime");
12
- const playStatus = inject("playStatus");
13
- const videoUrl =
14
- "http://qcast-image.oss-cn-qingdao.aliyuncs.com/homepage/20190726/4cc4e6a8fd7d9d9c707ed4c4da27ca9d.mp4";
15
- const canAutoPlay = !window.jsvIsBrowserDebug; // jsview自动播放该视频 TODO h5需做相应调整
16
- const rect = {
17
- top: 50,
18
- left: 40,
19
- width: 1200,
20
- height: 500,
21
- };
22
- let video = null;
23
-
24
- const onVideoRef = (ele) => {
25
- video = ele;
26
- };
27
-
28
- const setPlayState = (play) => {
29
- if (play) {
30
- video?.play();
31
- } else {
32
- video?.pause();
33
- }
34
- };
35
-
36
- const seekVideoStep = (time) => {
37
- if (video) {
38
- let playEnd = false;
39
- let seekTime = video.currentTime + Math.ceil(time);
40
- if (seekTime < 0) {
41
- seekTime = 0;
42
- } else if (seekTime > videoTime.duration) {
43
- seekTime = videoTime.duration;
44
- if (video.currentTime != videoTime.duration) {
45
- // 触发一次播放,收到ended事件
46
- playEnd = true;
47
- }
48
- }
49
- video.currentTime = seekTime;
50
- if (playEnd) {
51
- this.setPlayState(true);
52
- }
53
- }
54
- };
55
-
56
- const onPlayStateChange = (event) => {
57
- console.log("VideoFrame.onPlayStateChangeEvent()", event);
58
- playVideo.value = event.type === "play" ? true : false;
59
- if (!(playStatus.value == "ended" && event.type == "pause")) {
60
- // 忽略播放结束后的pause事件
61
- playStatus.value = event.type;
62
- }
63
- };
64
-
65
- const onTimeUpdate = (event) => {
66
- console.log("VideoFrame.onTimeUpdateEvent()", event);
67
- videoTime.currentTime = video.currentTime;
68
- };
69
-
70
- const onDurationChange = (event) => {
71
- console.log("VideoFrame.onDurationChangeEvent()", event);
72
- videoTime.duration = video.duration;
73
- };
74
-
75
- const onEvent = (event) => {
76
- console.log("VideoFrame.onEvent()", event);
77
- };
78
-
79
- watch(playVideo, setPlayState);
80
- watch(seekVideo, seekVideoStep);
81
-
82
- onMounted(() => {
83
- if (canAutoPlay) {
84
- playVideo.value = true;
85
- }
86
- });
87
- </script>
88
-
89
- <template>
90
- <div>
91
- <div
92
- :style="{
93
- ...videoRect,
94
- backgroundColor: 'rgb(200,100,100)',
95
- }"
96
- ></div>
97
- <JsvVideo
98
- :onRef="onVideoRef"
99
- :useTexture="useTexture"
100
- :src="videoUrl"
101
- :autoplay="canAutoPlay ? 'autoplay' : undefined"
102
- :style="{
103
- ...videoRect,
104
- objectFit: objectFit,
105
- animation:
106
- useTexture && enableAnimation ? 'offscreenAnim 3s infinite' : null,
107
- borderRadius: '80 80 160 240',
108
- }"
109
- :onCanPlay="onEvent"
110
- :onCanPlayThrough="onEvent"
111
- :onDurationChange="onDurationChange"
112
- :onEnded="onPlayStateChange"
113
- :onError="onPlayStateChange"
114
- :onLoad="onEvent"
115
- :onLoadedMetadata="onEvent"
116
- :onLoadStart="onEvent"
117
- :onPause="onPlayStateChange"
118
- :onPlay="onPlayStateChange"
119
- :onPlaying="onEvent"
120
- :onProgress="onEvent"
121
- :onSeeking="onEvent"
122
- :onSeeked="onTimeUpdate"
123
- :onStalled="onEvent"
124
- :onTimeUpdate="onTimeUpdate"
125
- />
126
- </div>
127
- </template>
128
-
129
- <style scoped>
130
- @keyframes offscreenAnim {
131
- from {
132
- transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -360deg);
133
- transform-origin: center center;
134
- }
135
- to {
136
- transform: scale3d(0.4, 0.4, 0) rotate3d(0, 0, 1, 0);
137
- transform-origin: center center;
138
- }
139
- }
140
- </style>