@shijiu/jsview-vue-samples 2.1.367-test.0 → 2.1.435
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.
- package/CoupletsTest/App.vue +37 -52
- package/CoupletsTest/widget/Fireworks/Fireworks.vue +173 -45
- package/DemoHomepage/router.js +21 -5
- package/FlexCellDemo/App.vue +315 -0
- package/FlexCellDemo/images/1.png +0 -0
- package/FlexCellDemo/images/2.png +0 -0
- package/FlexCellDemo/images/3.png +0 -0
- package/FlexCellDemo/images/4.jpg +0 -0
- package/FlexCellDemo/images/5.png +0 -0
- package/GradientTexture/App.vue +135 -0
- package/ImpactStop/App.vue +1 -1
- package/LongText/LongTextScroll.vue +3 -7
- package/QrcodeDemo/App.vue +37 -9
- package/SceneTransition/App.vue +268 -0
- package/SceneTransition/JsvSceneTransition.vue +167 -0
- package/SceneTransition/images/mask/1.png +0 -0
- package/SceneTransition/images/mask/10.png +0 -0
- package/SceneTransition/images/mask/11.png +0 -0
- package/SceneTransition/images/mask/12.png +0 -0
- package/SceneTransition/images/mask/2.png +0 -0
- package/SceneTransition/images/mask/3.png +0 -0
- package/SceneTransition/images/mask/4.png +0 -0
- package/SceneTransition/images/mask/5.png +0 -0
- package/SceneTransition/images/mask/6.png +0 -0
- package/SceneTransition/images/mask/7.png +0 -0
- package/SceneTransition/images/mask/8.png +0 -0
- package/SceneTransition/images/mask/9.png +0 -0
- package/SceneTransition/maskConfig/config1.js +101 -0
- package/SceneTransition/maskConfig/config2.js +88 -0
- package/SceneTransition/maskConfig/config3.js +102 -0
- package/SecTorTest/App.vue +145 -23
- package/SwiperTest/App.vue +4 -4
- package/TextureStoreTest/App.vue +111 -45
- package/TouchWidget/App.vue +95 -0
- package/TouchWidget/Item.vue +64 -0
- package/TouchWidget/WidgetItem.vue +96 -0
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
const ArraySet3 = [
|
|
2
|
+
{
|
|
3
|
+
left: 0,
|
|
4
|
+
top: 0,
|
|
5
|
+
width: 232,
|
|
6
|
+
height: 287,
|
|
7
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/1.png",
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
left: 213,
|
|
11
|
+
top: 0,
|
|
12
|
+
width: 588,
|
|
13
|
+
height: 315,
|
|
14
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/2.png",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
left: 223,
|
|
18
|
+
top: 0,
|
|
19
|
+
width: 582,
|
|
20
|
+
height: 316,
|
|
21
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/3.png",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
left: 811,
|
|
25
|
+
top: 62,
|
|
26
|
+
width: 469,
|
|
27
|
+
height: 257,
|
|
28
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/4.png",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
left: 943,
|
|
32
|
+
top: 0,
|
|
33
|
+
width: 337,
|
|
34
|
+
height: 162,
|
|
35
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/5.png",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
left: 0,
|
|
39
|
+
top: 260,
|
|
40
|
+
width: 272,
|
|
41
|
+
height: 460,
|
|
42
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/6.png",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
left: 86,
|
|
46
|
+
top: 168,
|
|
47
|
+
width: 728,
|
|
48
|
+
height: 350,
|
|
49
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/7.png",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
left: 806,
|
|
53
|
+
top: 223,
|
|
54
|
+
width: 474,
|
|
55
|
+
height: 133,
|
|
56
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/8.png",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
left: 706,
|
|
60
|
+
top: 0,
|
|
61
|
+
width: 295,
|
|
62
|
+
height: 319,
|
|
63
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/9.png",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
left: 51,
|
|
67
|
+
top: 319,
|
|
68
|
+
width: 765,
|
|
69
|
+
height: 401,
|
|
70
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/10.png",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
left: 688,
|
|
74
|
+
top: 321,
|
|
75
|
+
width: 304,
|
|
76
|
+
height: 399,
|
|
77
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/11.png",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
left: 814,
|
|
81
|
+
top: 320,
|
|
82
|
+
width: 345,
|
|
83
|
+
height: 400,
|
|
84
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/12.png",
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
left: 816,
|
|
88
|
+
top: 315,
|
|
89
|
+
width: 464,
|
|
90
|
+
height: 211,
|
|
91
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/13.png",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
left: 979,
|
|
95
|
+
top: 413,
|
|
96
|
+
width: 301,
|
|
97
|
+
height: 307,
|
|
98
|
+
url: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/SceneTransition/mask2/14.png",
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
export { ArraySet3 }
|
package/SecTorTest/App.vue
CHANGED
|
@@ -5,30 +5,33 @@
|
|
|
5
5
|
:centerPosition="center"
|
|
6
6
|
:radius="360"
|
|
7
7
|
:data="data"
|
|
8
|
+
:animationTime="0.5"
|
|
8
9
|
></JsvPieChart>
|
|
9
10
|
<!-- 文字说明 -->
|
|
10
11
|
<div class="text">
|
|
11
12
|
{{
|
|
12
|
-
"图为圆心在(400,400)位置,半径为360
|
|
13
|
+
"图为圆心在(400,400)位置,半径为360的饼图。此样例限制最多六个扇形。"
|
|
13
14
|
}}
|
|
14
15
|
</div>
|
|
15
16
|
<!-- 操作说明 -->
|
|
16
17
|
<div class="text1">
|
|
17
|
-
{{
|
|
18
|
+
{{
|
|
19
|
+
"按【上】键随机板块增加百分比,按【下】键随机减小板块百分比,按【左】键删除项,按【右】键增加项"
|
|
20
|
+
}}
|
|
18
21
|
</div>
|
|
19
22
|
</div>
|
|
20
23
|
</jsv-focus-block>
|
|
21
24
|
</template>
|
|
22
25
|
|
|
23
26
|
<script setup>
|
|
24
|
-
import { reactive } from "vue";
|
|
27
|
+
import { reactive, shallowRef } from "vue";
|
|
25
28
|
import { JsvPieChart } from "jsview";
|
|
26
29
|
const center = {
|
|
27
30
|
x: 400,
|
|
28
31
|
y: 400,
|
|
29
32
|
};
|
|
30
33
|
|
|
31
|
-
let data =
|
|
34
|
+
let data = shallowRef([
|
|
32
35
|
{
|
|
33
36
|
percent: 23.33,
|
|
34
37
|
color: "#0000FF",
|
|
@@ -50,28 +53,147 @@ let data = reactive([
|
|
|
50
53
|
color: "#6EFFE1",
|
|
51
54
|
},
|
|
52
55
|
]);
|
|
53
|
-
|
|
56
|
+
let TempData = reactive([]);
|
|
57
|
+
for (let i = 0; i < data.value.length; i++) {
|
|
58
|
+
TempData.push({
|
|
59
|
+
percent: data.value[i].percent,
|
|
60
|
+
color: data.value[i].color,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
54
63
|
// 生成随机整数
|
|
55
64
|
const randomNumber = () => {
|
|
56
|
-
const randomInt = Math.floor(Math.random() *
|
|
65
|
+
const randomInt = Math.floor(Math.random() * data.value.length) + 1;
|
|
57
66
|
return randomInt;
|
|
58
67
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
//随机颜色函数
|
|
69
|
+
const randomColor = () => {
|
|
70
|
+
let randomColor = Math.round(Math.random() * 2 ** 24).toString(16);
|
|
71
|
+
return (
|
|
72
|
+
"#" + new Array(6 - randomColor.length).fill("0").join("") + randomColor
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
//找出最大的百分比
|
|
76
|
+
const findMaxPercentItem = (data) => {
|
|
77
|
+
let maxPercent = 0;
|
|
78
|
+
let maxItem = null;
|
|
79
|
+
|
|
80
|
+
for (let i = 0; i < data.length; i++) {
|
|
81
|
+
if (data[i].percent > maxPercent) {
|
|
82
|
+
maxPercent = data[i].percent;
|
|
83
|
+
maxItem = data[i];
|
|
73
84
|
}
|
|
74
|
-
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return maxItem;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const onKeyDown = (ev) => {
|
|
91
|
+
switch (ev.keyCode) {
|
|
92
|
+
//删除项
|
|
93
|
+
case 37:
|
|
94
|
+
if (data.value.length >= 2) {
|
|
95
|
+
const tempPercent = TempData[TempData.length - 1].percent;
|
|
96
|
+
TempData.pop();
|
|
97
|
+
TempData[TempData.length - 1].percent += tempPercent;
|
|
98
|
+
data.value = TempData;
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
case 38:
|
|
102
|
+
//最后一项随机增加
|
|
103
|
+
const random = randomNumber();
|
|
104
|
+
TempData[TempData.length - 1].percent += random;
|
|
105
|
+
if (TempData[TempData.length - 1].percent > 100) {
|
|
106
|
+
TempData[TempData.length - 1].percent = 100;
|
|
107
|
+
for (let i = 0; i < TempData.length - 1; i++) {
|
|
108
|
+
TempData[i].percent = 0;
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
for (let i = 0; i < TempData.length - 1; i++) {
|
|
112
|
+
TempData[i].percent -= random / (TempData.length - 1);
|
|
113
|
+
if (TempData[i].percent < 0) {
|
|
114
|
+
let tempPercent = TempData[i].percent;
|
|
115
|
+
TempData[i].percent = 0;
|
|
116
|
+
let maxItem = findMaxPercentItem(TempData);
|
|
117
|
+
maxItem.percent += tempPercent;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
data.value = TempData;
|
|
122
|
+
break;
|
|
123
|
+
case 39:
|
|
124
|
+
//增加项
|
|
125
|
+
if (data.value.length >= 1 && data.value.length <= 5) {
|
|
126
|
+
TempData.push({
|
|
127
|
+
percent: 10,
|
|
128
|
+
color: randomColor(),
|
|
129
|
+
});
|
|
130
|
+
let maxItem = findMaxPercentItem(TempData);
|
|
131
|
+
maxItem.percent -= 10;
|
|
132
|
+
data.value = TempData;
|
|
133
|
+
}
|
|
134
|
+
break;
|
|
135
|
+
case 40:
|
|
136
|
+
// 随机减;
|
|
137
|
+
if (data.value[data.value.length - 1].percent == 0) {
|
|
138
|
+
// 随机减少百分比
|
|
139
|
+
let randomDecrement = randomNumber();
|
|
140
|
+
let adjusted = false;
|
|
141
|
+
|
|
142
|
+
for (let i = TempData.length - 1; i >= 0; i--) {
|
|
143
|
+
if (TempData[i].percent > 0) {
|
|
144
|
+
if (TempData[i].percent >= randomDecrement) {
|
|
145
|
+
TempData[i].percent -= randomDecrement;
|
|
146
|
+
adjusted = true;
|
|
147
|
+
break; // 成功减少,结束循环
|
|
148
|
+
} else {
|
|
149
|
+
// 如果当前项百分比不足以减去randomDecrement,则全部减去并尝试从前一个元素继续减少
|
|
150
|
+
randomDecrement -= TempData[i].percent;
|
|
151
|
+
TempData[i].percent = 0;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!adjusted) {
|
|
157
|
+
// 如果没有成功减少(所有项都为0或randomDecrement大于所有项的总和),可以选择忽略剩余的randomDecrement
|
|
158
|
+
// 或者根据需求进行特殊处理
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// 确保总和为100%
|
|
162
|
+
let totalPercent = TempData.reduce(
|
|
163
|
+
(total, item) => total + item.percent,
|
|
164
|
+
0
|
|
165
|
+
);
|
|
166
|
+
let diff = 100 - totalPercent; // 计算差异
|
|
167
|
+
|
|
168
|
+
if (diff !== 0) {
|
|
169
|
+
// 如果总和不为100%,则尝试平衡,优先从前往后增加
|
|
170
|
+
for (let i = 0; i < TempData.length && diff !== 0; i++) {
|
|
171
|
+
let availableIncrease = 100 - TempData[i].percent; // 计算当前项可增加的最大值
|
|
172
|
+
let increment = Math.min(diff, availableIncrease); // 确定实际增加的值
|
|
173
|
+
TempData[i].percent += increment;
|
|
174
|
+
diff -= increment; // 更新剩余差异
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
} else {
|
|
178
|
+
const random = randomNumber();
|
|
179
|
+
if (TempData[TempData.length - 1].percent - random < 0) {
|
|
180
|
+
const shouldNumber = TempData[TempData.length - 1].percent;
|
|
181
|
+
TempData[TempData.length - 1].percent = 0;
|
|
182
|
+
for (let i = 0; i < TempData.length - 2; i++) {
|
|
183
|
+
TempData[i].percent += shouldNumber / (TempData.length - 2);
|
|
184
|
+
}
|
|
185
|
+
} else {
|
|
186
|
+
TempData[TempData.length - 1].percent -= random;
|
|
187
|
+
for (let i = 0; i < TempData.length - 1; i++) {
|
|
188
|
+
TempData[i].percent += random / (TempData.length - 1);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
data.value = TempData;
|
|
193
|
+
break;
|
|
194
|
+
|
|
195
|
+
default:
|
|
196
|
+
break;
|
|
75
197
|
}
|
|
76
198
|
};
|
|
77
199
|
let actionDefines = {
|
|
@@ -86,7 +208,7 @@ let actionDefines = {
|
|
|
86
208
|
background-color: #007788;
|
|
87
209
|
}
|
|
88
210
|
.text {
|
|
89
|
-
width:
|
|
211
|
+
width: 500;
|
|
90
212
|
height: 60;
|
|
91
213
|
left: 700;
|
|
92
214
|
top: 300;
|
|
@@ -96,7 +218,7 @@ let actionDefines = {
|
|
|
96
218
|
}
|
|
97
219
|
.text1 {
|
|
98
220
|
width: 500;
|
|
99
|
-
height:
|
|
221
|
+
height: 90;
|
|
100
222
|
left: 700;
|
|
101
223
|
top: 440;
|
|
102
224
|
background-color: rgba(255, 255, 255, 0.5);
|
package/SwiperTest/App.vue
CHANGED
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
:onClick="onClick"
|
|
14
14
|
:onChange="onChange"
|
|
15
15
|
>
|
|
16
|
-
<template #itemView="{
|
|
16
|
+
<template #itemView="{ propsItem,defineSize,dataIndex }">
|
|
17
17
|
<div
|
|
18
18
|
:style="{
|
|
19
|
-
width:
|
|
20
|
-
height:
|
|
21
|
-
backgroundImage:
|
|
19
|
+
width: defineSize.width,
|
|
20
|
+
height: defineSize.height,
|
|
21
|
+
backgroundImage: items[dataIndex].image,
|
|
22
22
|
fontSize: 40,
|
|
23
23
|
}"
|
|
24
24
|
></div>
|
package/TextureStoreTest/App.vue
CHANGED
|
@@ -7,12 +7,16 @@
|
|
|
7
7
|
left: 200,
|
|
8
8
|
}"
|
|
9
9
|
>
|
|
10
|
-
<img
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
<img
|
|
11
|
+
:src="`jsvtexturestore://${sourceId}`"
|
|
12
|
+
class="logo-size"
|
|
13
|
+
:style="{
|
|
14
|
+
left: 50,
|
|
15
|
+
top: 50,
|
|
16
|
+
}"
|
|
17
|
+
/>
|
|
14
18
|
</div>
|
|
15
|
-
<!--
|
|
19
|
+
<!-- 圆框点九-底色 -->
|
|
16
20
|
<div
|
|
17
21
|
class="logo-bg"
|
|
18
22
|
:style="{
|
|
@@ -28,24 +32,24 @@
|
|
|
28
32
|
backgroundColor: '#FF1213',
|
|
29
33
|
top: 50,
|
|
30
34
|
}"
|
|
31
|
-
>
|
|
32
|
-
<JsvNinePatch
|
|
33
|
-
:style="{
|
|
34
|
-
left: 0,
|
|
35
|
-
top: 0,
|
|
36
|
-
width: 200,
|
|
37
|
-
height: 200,
|
|
38
|
-
}"
|
|
39
|
-
:imageUrl="`jsvtexturestore://${sourceId2}`"
|
|
40
|
-
:imageWidth="136"
|
|
41
|
-
:centerWidth="1"
|
|
42
|
-
:imageDspWidth="136"
|
|
43
|
-
:borderOutset="8"
|
|
44
|
-
:animTime="0"
|
|
45
|
-
/>
|
|
46
|
-
</div>
|
|
35
|
+
></div>
|
|
47
36
|
</div>
|
|
48
|
-
<!--
|
|
37
|
+
<!-- 圆框点九-框 -->
|
|
38
|
+
<JsvNinePatch
|
|
39
|
+
:style="{
|
|
40
|
+
left: 750,
|
|
41
|
+
top: 50,
|
|
42
|
+
width: 200,
|
|
43
|
+
height: 200,
|
|
44
|
+
}"
|
|
45
|
+
:imageUrl="`jsvtexturestore://${sourceId2}`"
|
|
46
|
+
:imageWidth="136"
|
|
47
|
+
:centerWidth="1"
|
|
48
|
+
:imageDspWidth="136"
|
|
49
|
+
:borderOutset="8"
|
|
50
|
+
:animTime="0"
|
|
51
|
+
/>
|
|
52
|
+
<!-- 方框点九-底色 -->
|
|
49
53
|
<div class="logo-bg" :style="{ left: 200, top: 360 }">
|
|
50
54
|
<div
|
|
51
55
|
class="logo-size"
|
|
@@ -54,27 +58,67 @@
|
|
|
54
58
|
backgroundColor: '#FF1213',
|
|
55
59
|
top: 50,
|
|
56
60
|
}"
|
|
57
|
-
>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
61
|
+
></div>
|
|
62
|
+
</div>
|
|
63
|
+
<!-- 方框点九-框 -->
|
|
64
|
+
<JsvNinePatch
|
|
65
|
+
:style="{
|
|
66
|
+
left: 250,
|
|
67
|
+
top: 410,
|
|
68
|
+
width: 200,
|
|
69
|
+
height: 200,
|
|
70
|
+
}"
|
|
71
|
+
:imageUrl="`jsvtexturestore://${sourceId3}`"
|
|
72
|
+
:imageWidth="136"
|
|
73
|
+
:centerWidth="1"
|
|
74
|
+
:imageDspWidth="136"
|
|
75
|
+
:borderOutset="6"
|
|
76
|
+
:animTime="0"
|
|
77
|
+
/>
|
|
78
|
+
<!-- 渐变点九-底色 -->
|
|
79
|
+
<div
|
|
80
|
+
class="logo-bg"
|
|
81
|
+
:style="{
|
|
82
|
+
left: 700,
|
|
83
|
+
top: 360,
|
|
84
|
+
}"
|
|
85
|
+
>
|
|
86
|
+
<div
|
|
87
|
+
class="logo-size"
|
|
88
|
+
:style="{
|
|
89
|
+
borderRadius: 60,
|
|
90
|
+
left: 50,
|
|
91
|
+
backgroundImage: `jsvtexturestore://${sourceId4}`,
|
|
92
|
+
top: 50,
|
|
93
|
+
}"
|
|
94
|
+
></div>
|
|
73
95
|
</div>
|
|
96
|
+
<!-- 渐变点九-框(同圆框点九框) -->
|
|
97
|
+
<JsvNinePatch
|
|
98
|
+
:style="{
|
|
99
|
+
left: 750,
|
|
100
|
+
top: 410,
|
|
101
|
+
width: 200,
|
|
102
|
+
height: 200,
|
|
103
|
+
}"
|
|
104
|
+
:imageUrl="`jsvtexturestore://${sourceId2}`"
|
|
105
|
+
:imageWidth="136"
|
|
106
|
+
:centerWidth="1"
|
|
107
|
+
:imageDspWidth="136"
|
|
108
|
+
:borderOutset="8"
|
|
109
|
+
:animTime="0"
|
|
110
|
+
/>
|
|
74
111
|
<!-- 文字说明 -->
|
|
75
|
-
<div class="text" :style="{top:320,left:200}">{{
|
|
76
|
-
<div class="text" :style="{top:320,left:700}">
|
|
77
|
-
|
|
112
|
+
<div class="text" :style="{ top: 320, left: 200 }">{{ "半圆" }}</div>
|
|
113
|
+
<div class="text" :style="{ top: 320, left: 700 }">
|
|
114
|
+
{{ "圆角NinePatch" }}
|
|
115
|
+
</div>
|
|
116
|
+
<div class="text" :style="{ top: 680, left: 200 }">
|
|
117
|
+
{{ "直角NinePatch" }}
|
|
118
|
+
</div>
|
|
119
|
+
<div class="text" :style="{ top: 680, left: 700 }">
|
|
120
|
+
{{ "渐变圆角NinePatch" }}
|
|
121
|
+
</div>
|
|
78
122
|
</div>
|
|
79
123
|
</template>
|
|
80
124
|
|
|
@@ -85,9 +129,11 @@ import { JsvTextureStoreApi } from "jsview";
|
|
|
85
129
|
let canvasRef;
|
|
86
130
|
let canvasRef2;
|
|
87
131
|
let canvasRef3;
|
|
132
|
+
let canvasRef4;
|
|
88
133
|
let sourceId = shallowRef("");
|
|
89
134
|
let sourceId2 = shallowRef("");
|
|
90
135
|
let sourceId3 = shallowRef("");
|
|
136
|
+
let sourceId4 = shallowRef("");
|
|
91
137
|
let bitmap = {
|
|
92
138
|
width: 150,
|
|
93
139
|
height: 150,
|
|
@@ -100,9 +146,14 @@ let bitmap3 = {
|
|
|
100
146
|
width: 136,
|
|
101
147
|
height: 136,
|
|
102
148
|
};
|
|
149
|
+
let bitmap4 = {
|
|
150
|
+
width: 136,
|
|
151
|
+
height: 136,
|
|
152
|
+
};
|
|
103
153
|
canvasRef = JsvTextureStoreApi.canvasTexture(bitmap.width, bitmap.height);
|
|
104
154
|
canvasRef2 = JsvTextureStoreApi.canvasTexture(bitmap2.width, bitmap2.height);
|
|
105
155
|
canvasRef3 = JsvTextureStoreApi.canvasTexture(bitmap3.width, bitmap3.height);
|
|
156
|
+
canvasRef4 = JsvTextureStoreApi.canvasTexture(bitmap4.width, bitmap4.height);
|
|
106
157
|
//第一个图
|
|
107
158
|
let centerX = bitmap.width / 2;
|
|
108
159
|
let centerY = bitmap.height / 2;
|
|
@@ -134,11 +185,26 @@ sourceId2.value = canvasRef2.commit();
|
|
|
134
185
|
let customPath3 = canvasRef3.rectPath(3, 3, 133, 133);
|
|
135
186
|
customPath3.stroke(6, "#87CEEB");
|
|
136
187
|
sourceId3.value = canvasRef3.commit();
|
|
188
|
+
//第四个图(底色即使用渐变色接口描绘)
|
|
189
|
+
const multiColorSet = {
|
|
190
|
+
color: ["#ff0000", "#0000ff", "#00ff00", "#ff00ff"],
|
|
191
|
+
position: [0, 0.3, 0.8, 1],
|
|
192
|
+
};
|
|
193
|
+
canvasRef4.drawLinearGradientRect(
|
|
194
|
+
0,
|
|
195
|
+
0,
|
|
196
|
+
0,
|
|
197
|
+
136,
|
|
198
|
+
multiColorSet.color,
|
|
199
|
+
multiColorSet.position
|
|
200
|
+
);
|
|
201
|
+
sourceId4.value = canvasRef4.commit();
|
|
137
202
|
|
|
138
203
|
onBeforeUnmount(() => {
|
|
139
204
|
JsvTextureStoreApi.deleteTexture(sourceId.value);
|
|
140
205
|
JsvTextureStoreApi.deleteTexture(sourceId2.value);
|
|
141
206
|
JsvTextureStoreApi.deleteTexture(sourceId3.value);
|
|
207
|
+
JsvTextureStoreApi.deleteTexture(sourceId4.value);
|
|
142
208
|
});
|
|
143
209
|
</script>
|
|
144
210
|
|
|
@@ -157,12 +223,12 @@ onBeforeUnmount(() => {
|
|
|
157
223
|
height: 300;
|
|
158
224
|
background-color: #007f00;
|
|
159
225
|
}
|
|
160
|
-
.text{
|
|
161
|
-
width:300;
|
|
162
|
-
height:30;
|
|
226
|
+
.text {
|
|
227
|
+
width: 300;
|
|
228
|
+
height: 30;
|
|
163
229
|
font-size: 28;
|
|
164
230
|
line-height: 30;
|
|
165
|
-
color: #
|
|
231
|
+
color: #ffffff;
|
|
166
232
|
text-align: center;
|
|
167
233
|
}
|
|
168
234
|
</style>
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
* @Author: ChenChanghua
|
|
3
|
+
* @Date: 2022-07-11 13:31:36
|
|
4
|
+
* @Description: file content
|
|
5
|
+
-->
|
|
6
|
+
<script setup>
|
|
7
|
+
import { MetroWidget, VERTICAL, useFocusHub, METRO_WIDGET_CONST } from "jsview";
|
|
8
|
+
import WidgetItem from "./WidgetItem.vue";
|
|
9
|
+
import { onMounted } from "vue";
|
|
10
|
+
|
|
11
|
+
const focusHub = useFocusHub();
|
|
12
|
+
|
|
13
|
+
const provideData = () => {
|
|
14
|
+
const data = [];
|
|
15
|
+
for (let i = 0; i < 10; i++) {
|
|
16
|
+
data.push({
|
|
17
|
+
width: 500,
|
|
18
|
+
height: 190,
|
|
19
|
+
name: "widget_" + i,
|
|
20
|
+
marginBottom: 10,
|
|
21
|
+
index: i,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return data;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const measures = (item) => {
|
|
28
|
+
return {
|
|
29
|
+
width: item.width,
|
|
30
|
+
height: item.height,
|
|
31
|
+
marginRight: item.marginRight,
|
|
32
|
+
marginBottom: item.marginBottom,
|
|
33
|
+
/**重要代码: itemSlide设置为ACT_FOCUS_RECT_EVENT, 由子MetroWidget控制滚动 */
|
|
34
|
+
itemSlide: METRO_WIDGET_CONST.ITEM_SLIDE.ACT_FOCUS_RECT_EVENT,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
onMounted(() => {
|
|
39
|
+
focusHub.setFocus("mwWidget");
|
|
40
|
+
});
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<template>
|
|
44
|
+
<div :style="{ width: 1280, height: 720, backgroundColor: '#007788' }" />
|
|
45
|
+
<div
|
|
46
|
+
:style="{
|
|
47
|
+
left: 100,
|
|
48
|
+
top: 20,
|
|
49
|
+
width: 800,
|
|
50
|
+
height: 400,
|
|
51
|
+
fontSize: 30,
|
|
52
|
+
color: '#FFFFFF',
|
|
53
|
+
}"
|
|
54
|
+
>
|
|
55
|
+
{{ `MetroWidget的item是包含MetroWidget的组件` }}
|
|
56
|
+
</div>
|
|
57
|
+
<!-- 为了保证边缘的item缩放后依旧完整显示, 需要设置padding, 注意width/height是包含padding的 -->
|
|
58
|
+
<metro-widget
|
|
59
|
+
name="mwWidget"
|
|
60
|
+
:top="10"
|
|
61
|
+
:left="50"
|
|
62
|
+
:width="660"
|
|
63
|
+
:height="600"
|
|
64
|
+
:provideData="provideData"
|
|
65
|
+
:padding="{ left: 30, right: 30 }"
|
|
66
|
+
:direction="VERTICAL"
|
|
67
|
+
:measures="measures"
|
|
68
|
+
:touchFlag="1"
|
|
69
|
+
>
|
|
70
|
+
<!-- 重要代码: 为了实现焦点就近移动, 需要传递onItemEdge回调 -->
|
|
71
|
+
<template #renderItem="{ data, onAction, onItemEdge }">
|
|
72
|
+
<widget-item :data="data" :onAction="onAction" :onItemEdge="onItemEdge" />
|
|
73
|
+
</template>
|
|
74
|
+
</metro-widget>
|
|
75
|
+
|
|
76
|
+
<div
|
|
77
|
+
:style="{
|
|
78
|
+
width: 50,
|
|
79
|
+
height: 50,
|
|
80
|
+
backgroundColor: '#ff000055',
|
|
81
|
+
animation: 'testRotate 2s infinite',
|
|
82
|
+
}"
|
|
83
|
+
></div>
|
|
84
|
+
</template>
|
|
85
|
+
|
|
86
|
+
<style scoped>
|
|
87
|
+
@keyframes testRotate {
|
|
88
|
+
from {
|
|
89
|
+
transform: rotate3d(0, 0, 1, 0deg);
|
|
90
|
+
}
|
|
91
|
+
to {
|
|
92
|
+
transform: rotate3d(0, 0, 1, 360deg);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
</style>
|