@shijiu/jsview-vue-samples 2.0.1045-next-vue.0 → 2.0.1073
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/Basic/components/div/DivCssVar.vue +32 -17
- package/CommonUtils/ResourceData.js +11 -0
- package/CommonUtils/getSearchQuery.js +44 -0
- package/CssPreprocessor/utils/ContentBlock.vue +2 -1
- package/CssPreprocessor/utils/TitleBar.vue +4 -2
- package/DemoHomepage/App.vue +22 -19
- package/DemoHomepage/router.js +9 -0
- package/FilterDemo/AnimatePic.vue +6 -1
- package/GiftRain/App.vue +52 -27
- package/GiftRain/components/RedPacket.vue +17 -15
- package/JsvRadarChart/App.vue +99 -0
- package/JsvRadarChart/assets/Square.png +0 -0
- package/JsvRadarChart/assets/resultSquare.png +0 -0
- package/MetroWidgetDemos/itemSizeUpdate/App.vue +51 -0
- package/MetroWidgetDemos/itemSizeUpdate/backward/Backward.vue +107 -0
- package/MetroWidgetDemos/itemSizeUpdate/backward/Item.vue +133 -0
- package/MetroWidgetDemos/itemSizeUpdate/center/Center.vue +106 -0
- package/MetroWidgetDemos/itemSizeUpdate/center/Item.vue +118 -0
- package/MetroWidgetDemos/routeList.js +6 -0
- package/MockjsDemo/App.vue +54 -0
- package/MockjsDemo/KeyEventCatcher.vue +19 -0
- package/MockjsDemo/mock/index.js +12 -0
- package/NinePatchDemo/App.vue +2 -2
- package/NinePatchDemo/Item.vue +12 -2
- package/Preload/Item.vue +27 -10
- package/TextureAnimation/App2.vue +4 -2
- package/TouchSample/Item.vue +0 -1
- package/package.json +2 -1
|
@@ -5,6 +5,8 @@ let state = reactive({
|
|
|
5
5
|
foreColor: "#FF0000",
|
|
6
6
|
backColor: "#00FF00",
|
|
7
7
|
width:65,
|
|
8
|
+
transX: 0,
|
|
9
|
+
transY: 0,
|
|
8
10
|
});
|
|
9
11
|
onMounted(() => {
|
|
10
12
|
timerId = setInterval(() => {
|
|
@@ -12,10 +14,14 @@ onMounted(() => {
|
|
|
12
14
|
state.foreColor = "#FF0000";
|
|
13
15
|
state.backColor = "#00FF00";
|
|
14
16
|
state.width = 65;
|
|
17
|
+
state.transX = 50;
|
|
18
|
+
state.transY = 0;
|
|
15
19
|
} else {
|
|
16
20
|
state.foreColor = "#00FF00";
|
|
17
21
|
state.backColor = "#FF0000";
|
|
18
22
|
state.width = 55;
|
|
23
|
+
state.transX = 0;
|
|
24
|
+
state.transY = 50;
|
|
19
25
|
}
|
|
20
26
|
}, 3000);
|
|
21
27
|
});
|
|
@@ -30,27 +36,36 @@ onBeforeUnmount(() => {
|
|
|
30
36
|
</script>
|
|
31
37
|
|
|
32
38
|
<template>
|
|
33
|
-
<div class="block"
|
|
39
|
+
<div class="block-var">CSS class中包含变量</div>
|
|
40
|
+
|
|
41
|
+
<div class="block-kf-var">CSS keyframes中包含变量</div>
|
|
34
42
|
|
|
35
|
-
<div
|
|
36
|
-
:style="{
|
|
37
|
-
left: 90,
|
|
38
|
-
width: 65,
|
|
39
|
-
height: 65,
|
|
40
|
-
color: state.foreColor,
|
|
41
|
-
backgroundColor: state.backColor,
|
|
42
|
-
}"
|
|
43
|
-
>
|
|
44
|
-
子级元素CSS class中包含变量
|
|
45
|
-
</div>
|
|
46
43
|
</template>
|
|
47
44
|
|
|
48
45
|
<style scoped>
|
|
49
|
-
.block {
|
|
50
|
-
width: v-bind(state.width + 10);
|
|
46
|
+
.block-var {
|
|
47
|
+
width: v-bind('state.width + 10');
|
|
51
48
|
height: 65;
|
|
52
|
-
|
|
53
|
-
color: v-bind(state.
|
|
54
|
-
background-color: v-bind(state.backColor);
|
|
49
|
+
color: v-bind('state.foreColor');
|
|
50
|
+
background-color: v-bind('state.backColor');
|
|
55
51
|
}
|
|
52
|
+
|
|
53
|
+
.block-kf-var {
|
|
54
|
+
left: 100;
|
|
55
|
+
width: 65;
|
|
56
|
+
height: 65;
|
|
57
|
+
color: v-bind('state.foreColor');
|
|
58
|
+
background-color: v-bind('state.backColor');
|
|
59
|
+
animation: AnimTranslate 2s linear infinite;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@keyframes AnimTranslate {
|
|
63
|
+
from {
|
|
64
|
+
transform: translate3d(0, v-bind('state.transY'), 0);
|
|
65
|
+
}
|
|
66
|
+
to {
|
|
67
|
+
transform: translate3d(v-bind('state.transX'), 0, 0);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
56
71
|
</style>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const getSearchQuery = (url = '', obj, paramPosition) => {
|
|
2
|
+
const [searchPart = '', hashPart = ''] = url.split('#');
|
|
3
|
+
// eslint-disable-next-line no-nested-ternary
|
|
4
|
+
const position = (paramPosition === undefined) ? ((searchPart || !hashPart) ? 0 : 1) : paramPosition;
|
|
5
|
+
const setPart = position === 0 ? searchPart : hashPart;
|
|
6
|
+
const [base = '', search = ''] = setPart.split('?');
|
|
7
|
+
const originParams = {};
|
|
8
|
+
const combine = (prefix, value) => (value ? `${prefix}${value}` : '');
|
|
9
|
+
const getSearch = (data = {}) => {
|
|
10
|
+
const result = [];
|
|
11
|
+
Object.keys(data).forEach((key) => {
|
|
12
|
+
const val = data[key];
|
|
13
|
+
if (val !== null && val !== undefined) {
|
|
14
|
+
result.push([key, encodeURIComponent(val)].join('='));
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return combine('?', result.join('&'));
|
|
18
|
+
};
|
|
19
|
+
search
|
|
20
|
+
.split('&')
|
|
21
|
+
.filter((x) => x)
|
|
22
|
+
.forEach((keyvalue) => {
|
|
23
|
+
const [key = '', value = ''] = keyvalue.split('=');
|
|
24
|
+
originParams[key] = decodeURIComponent(value);
|
|
25
|
+
});
|
|
26
|
+
if (obj) {
|
|
27
|
+
// 赋值
|
|
28
|
+
Object.assign(originParams, obj);
|
|
29
|
+
switch (position) {
|
|
30
|
+
case 0:
|
|
31
|
+
// 参数在search部分,拼接方式为base+getSearch+hashPart
|
|
32
|
+
return `${base}${getSearch(originParams)}${combine('#', hashPart)}`;
|
|
33
|
+
case 1:
|
|
34
|
+
// 参数在hash部分,拼接方式为searchPart+ base+getSearch
|
|
35
|
+
return searchPart + combine('#', base + getSearch(originParams));
|
|
36
|
+
default:
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
// 取值
|
|
41
|
+
return originParams;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export {getSearchQuery}
|
|
@@ -18,12 +18,14 @@ export default {
|
|
|
18
18
|
</template>
|
|
19
19
|
|
|
20
20
|
<style scoped>
|
|
21
|
-
@import "./FontStyle.css";
|
|
22
|
-
|
|
23
21
|
.title-range {
|
|
24
22
|
left: 0;
|
|
25
23
|
top: 0;
|
|
26
24
|
width: v-bind('style.width');
|
|
27
25
|
height: 20;
|
|
28
26
|
}
|
|
27
|
+
</style>
|
|
28
|
+
<style>
|
|
29
|
+
/* css文件要单独放到没有scoped设置的style标签中,规避css属性redefine的warning */
|
|
30
|
+
@import "./FontStyle.css";
|
|
29
31
|
</style>
|
package/DemoHomepage/App.vue
CHANGED
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
import { shallowRef, onMounted } from "vue";
|
|
10
10
|
import { JsvPreload, buildPreloadInfo, jJsvRuntimeBridge, JsvFocusBlock } from "jsview";
|
|
11
11
|
import { useRouter } from "vue-router";
|
|
12
|
-
|
|
12
|
+
import { setDataUrl, getDataUrl } from "../CommonUtils/ResourceData.js"
|
|
13
|
+
import { getSearchQuery } from "../CommonUtils/getSearchQuery.js"
|
|
13
14
|
let router = useRouter();
|
|
14
|
-
|
|
15
|
+
let DemoResourceBase=shallowRef("")
|
|
15
16
|
let backgroundImageUrl = shallowRef(null);
|
|
16
17
|
|
|
17
18
|
let preloadInfo = shallowRef([]);
|
|
@@ -21,9 +22,9 @@ let _onPreloadDone = () => {
|
|
|
21
22
|
jJsvRuntimeBridge.notifyPageLoaded();
|
|
22
23
|
};
|
|
23
24
|
|
|
24
|
-
const _OnKeyDown = (ev)=>{
|
|
25
|
+
const _OnKeyDown = (ev) => {
|
|
25
26
|
// 结果默认传下来的返回键
|
|
26
|
-
if(ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
|
|
27
|
+
if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
|
|
27
28
|
router?.go(-1); // 有router时,是从DemoHomepage进入,回退
|
|
28
29
|
return true;
|
|
29
30
|
}
|
|
@@ -31,11 +32,19 @@ const _OnKeyDown = (ev)=>{
|
|
|
31
32
|
return false;
|
|
32
33
|
};
|
|
33
34
|
|
|
35
|
+
//解析url
|
|
36
|
+
let query = getSearchQuery(window.location.href, undefined, 0)
|
|
37
|
+
if (query.DemoResourceBase) {
|
|
38
|
+
setDataUrl(query.DemoResourceBase)
|
|
39
|
+
//无网络环境下使用
|
|
40
|
+
DemoResourceBase.value = getDataUrl()
|
|
41
|
+
}
|
|
34
42
|
onMounted(() => {
|
|
35
43
|
console.log("simulate async get background url");
|
|
36
44
|
setTimeout(() => {
|
|
37
45
|
console.log("simulate background url got");
|
|
38
|
-
backgroundImageUrl.value =
|
|
46
|
+
backgroundImageUrl.value = DemoResourceBase.value ? `${DemoResourceBase.value}/BackgroundLongmao.jpg`
|
|
47
|
+
:
|
|
39
48
|
"https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/BackgroundLongmao.jpg";
|
|
40
49
|
preloadInfo.value = [buildPreloadInfo(backgroundImageUrl.value)];
|
|
41
50
|
}, 0);
|
|
@@ -51,21 +60,15 @@ export default {
|
|
|
51
60
|
|
|
52
61
|
<template>
|
|
53
62
|
<div>
|
|
54
|
-
<jsv-preload
|
|
55
|
-
:key="backgroundImageUrl"
|
|
56
|
-
:preloadList="preloadInfo"
|
|
57
|
-
:onPreloadDone="_onPreloadDone"
|
|
58
|
-
/>
|
|
63
|
+
<jsv-preload :key="backgroundImageUrl" :preloadList="preloadInfo" :onPreloadDone="_onPreloadDone" />
|
|
59
64
|
<div :style="{
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
<jsv-focus-block
|
|
65
|
-
:
|
|
66
|
-
|
|
67
|
-
}"
|
|
68
|
-
>
|
|
65
|
+
width: 1280,
|
|
66
|
+
height: 720,
|
|
67
|
+
backgroundImage: backgroundImageUrl,
|
|
68
|
+
}" />
|
|
69
|
+
<jsv-focus-block :onAction="{
|
|
70
|
+
onKeyDown: _OnKeyDown
|
|
71
|
+
}">
|
|
69
72
|
<router-view v-slot="{ Component, route }">
|
|
70
73
|
<keep-alive>
|
|
71
74
|
<component v-if="route.meta.keepAlive" :is="Component" />
|
package/DemoHomepage/router.js
CHANGED
|
@@ -187,10 +187,19 @@ let routeList = [
|
|
|
187
187
|
path: '/Operations/FocusMoveStyle',
|
|
188
188
|
component: () => import('jsview-vue-samples/FocusMoveStyle/App.vue'),
|
|
189
189
|
},
|
|
190
|
+
{
|
|
191
|
+
name: 'Mockjs',
|
|
192
|
+
path: '/feature/MockjsDemo',
|
|
193
|
+
component: () => import('jsview-vue-samples/MockjsDemo/App.vue'),
|
|
194
|
+
},
|
|
190
195
|
{
|
|
191
196
|
name:'红包雨',
|
|
192
197
|
path:'/Game/GiftRain',
|
|
193
198
|
component:()=>import('jsview-vue-samples/GiftRain/App.vue'),
|
|
199
|
+
},{
|
|
200
|
+
name:'雷达图',
|
|
201
|
+
path:'/Game/RadarChart',
|
|
202
|
+
component:()=>import('jsview-vue-samples/JsvRadarChart/App.vue')
|
|
194
203
|
}
|
|
195
204
|
];
|
|
196
205
|
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
|
|
2
|
+
import { getDataUrl } from "../CommonUtils/ResourceData";
|
|
3
|
+
//无网络环境下使用
|
|
4
|
+
const DemoResourceBase = getDataUrl()
|
|
5
|
+
const item_url = DemoResourceBase ?
|
|
6
|
+
`${DemoResourceBase}/27bda620942566673ab449a3ef765321.png`
|
|
7
|
+
:
|
|
3
8
|
"http://oss.image.51vtv.cn/homepage/20210209/27bda620942566673ab449a3ef765321.png";
|
|
4
9
|
</script>
|
|
5
10
|
|
package/GiftRain/App.vue
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
<div
|
|
4
4
|
:style="{ width: 1920, height: 1080, overflow: 'hidden', transform: 'scale3d(0.67,0.67,1)', left: -220 * 1.5 + 8, top: -170 - 8 }">
|
|
5
5
|
<JsvPreload :preloadList="preload_info"></JsvPreload>
|
|
6
|
-
<div
|
|
7
|
-
:style="{ backgroundImage: bg, width: 1920, height: 1080, overflow: 'hidden' }">
|
|
6
|
+
<div :style="{ backgroundImage: resourceMap.bg, width: 1920, height: 1080, overflow: 'hidden' }">
|
|
8
7
|
<Score :score="score"></Score>
|
|
9
8
|
<JsvActorMove key="JsvSpriteTranslate" :style="{
|
|
10
9
|
top: 476 * 1.5,
|
|
@@ -51,7 +50,7 @@
|
|
|
51
50
|
|
|
52
51
|
</div>
|
|
53
52
|
<!-- 音频 -->
|
|
54
|
-
<JsvSystemAudio key="AudioBg" :src="_AudioBgUrl" :loop="true" :onRef="onRef1" :onLoad="audioOnLoad" />
|
|
53
|
+
<JsvSystemAudio key="AudioBg" :src="resourceMap._AudioBgUrl" :loop="true" :onRef="onRef1" :onLoad="audioOnLoad" />
|
|
55
54
|
|
|
56
55
|
<JsvSystemAudio v-if="!_DisableEffectSound" :onRef="onRef2" :loop="true" />
|
|
57
56
|
|
|
@@ -61,43 +60,69 @@
|
|
|
61
60
|
</template>
|
|
62
61
|
<script setup>
|
|
63
62
|
/* eslint-disable */
|
|
64
|
-
import { JsvFocusBlock, JsvActorMove, JsvActorMoveControl, jJsvRuntimeBridge, JsvPreload, buildPreloadInfo,JsvSystemAudio} from "jsview";
|
|
65
|
-
import { shallowRef, onMounted, onBeforeUnmount } from "vue";
|
|
63
|
+
import { JsvFocusBlock, JsvActorMove, JsvActorMoveControl, jJsvRuntimeBridge, JsvPreload, buildPreloadInfo, JsvSystemAudio } from "jsview";
|
|
64
|
+
import { shallowRef, onMounted, onBeforeUnmount, provide } from "vue";
|
|
66
65
|
import { useRouter } from "vue-router";
|
|
67
66
|
import Score from "./components/Score.vue";
|
|
68
67
|
import RedPacket from "./components/RedPacket.vue";
|
|
69
68
|
import Sound from "./common/Sound.js"
|
|
69
|
+
import { getDataUrl } from "../CommonUtils/ResourceData"
|
|
70
70
|
//音频Sound
|
|
71
71
|
const MySound = new Sound()
|
|
72
|
+
//接收是否有DemoResourceBase,没有则正常走公共网络地址。
|
|
73
|
+
const DemoResourceBase = getDataUrl()
|
|
72
74
|
//预加载信息
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
const resourceMap = {
|
|
76
|
+
kimi_normal: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_normal.png',
|
|
77
|
+
kimi_smile: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_smile.png',
|
|
78
|
+
kimi_boom: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_boom.png',
|
|
79
|
+
red_packet: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/red.png',
|
|
80
|
+
bigRed_packet: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bigred.png',
|
|
81
|
+
boom_image: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/boom.png',
|
|
82
|
+
bg: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bg.jpg',
|
|
83
|
+
_ScoreBg: "http://oss.image.qcast.cn/demo_images/red_packet_rain/score_bg.png",
|
|
84
|
+
add1: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/add1.png',
|
|
85
|
+
add5: "http://oss.image.qcast.cn/demo_images/red_packet_rain/add5.png",
|
|
86
|
+
min1: "http://oss.image.qcast.cn/demo_images/red_packet_rain/min1.png",
|
|
87
|
+
_AudioBgUrl: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewAudio/MiniGameBackgroundMusic-redpack.mp3"
|
|
88
|
+
}
|
|
89
|
+
if (DemoResourceBase) {
|
|
90
|
+
console.log('存在');
|
|
91
|
+
console.log(DemoResourceBase);
|
|
92
|
+
//正则进行替换
|
|
93
|
+
for (let i in resourceMap) {
|
|
94
|
+
//此正则规则是替换掉最后一个 / 前面的字符
|
|
95
|
+
resourceMap[i] = resourceMap[i].replace(/.*\/(.*)/, `${DemoResourceBase}/$1`);
|
|
96
|
+
}
|
|
97
|
+
//修改后暴露给子组件
|
|
98
|
+
provide("resourceMap", resourceMap)
|
|
99
|
+
} else {
|
|
100
|
+
//暴露给子组件
|
|
101
|
+
provide("resourceMap", resourceMap)
|
|
102
|
+
}
|
|
80
103
|
const preload_info = [
|
|
81
|
-
buildPreloadInfo(kimi_normal),
|
|
82
|
-
buildPreloadInfo(kimi_smile),
|
|
83
|
-
buildPreloadInfo(kimi_boom),
|
|
84
|
-
buildPreloadInfo(red_packet),
|
|
85
|
-
buildPreloadInfo(bigRed_packet),
|
|
86
|
-
buildPreloadInfo(boom_image),
|
|
87
|
-
buildPreloadInfo(bg)
|
|
104
|
+
buildPreloadInfo(resourceMap.kimi_normal),
|
|
105
|
+
buildPreloadInfo(resourceMap.kimi_smile),
|
|
106
|
+
buildPreloadInfo(resourceMap.kimi_boom),
|
|
107
|
+
buildPreloadInfo(resourceMap.red_packet),
|
|
108
|
+
buildPreloadInfo(resourceMap.bigRed_packet),
|
|
109
|
+
buildPreloadInfo(resourceMap.boom_image),
|
|
110
|
+
buildPreloadInfo(resourceMap.bg),
|
|
111
|
+
buildPreloadInfo(resourceMap.add1),
|
|
112
|
+
buildPreloadInfo(resourceMap.add5),
|
|
113
|
+
buildPreloadInfo(resourceMap.min1)
|
|
88
114
|
];
|
|
89
115
|
//定义不需要响应式的变量
|
|
90
116
|
let _CurrentRain = null;
|
|
91
117
|
//音频ref
|
|
92
118
|
let _Audio = null;
|
|
93
|
-
let _AudioBgUrl = "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewAudio/MiniGameBackgroundMusic-redpack.mp3";
|
|
94
119
|
//背景音频ref
|
|
95
120
|
let _BgAudio = null;
|
|
96
121
|
let _IsRunning = false;
|
|
97
122
|
let _DisableEffectSound = true;
|
|
98
123
|
let _TranslateControl = new JsvActorMoveControl()
|
|
99
124
|
//定义需要响应式的变量
|
|
100
|
-
let kimi = shallowRef(
|
|
125
|
+
let kimi = shallowRef(resourceMap.kimi_normal)
|
|
101
126
|
let score = shallowRef(0)
|
|
102
127
|
let min_score_image = shallowRef(null)
|
|
103
128
|
let add_score_image = shallowRef(null)
|
|
@@ -126,22 +151,22 @@ const _onImpactTracer = (rain) => {
|
|
|
126
151
|
switch (rain.type) {
|
|
127
152
|
case 0:
|
|
128
153
|
scoreAddAnim.value = "scoreUp 0.2s";
|
|
129
|
-
kimi.value =
|
|
130
|
-
add_score_image.value =
|
|
154
|
+
kimi.value = resourceMap.kimi_normal;
|
|
155
|
+
add_score_image.value = resourceMap.add1;
|
|
131
156
|
score.value += 1;
|
|
132
157
|
MySound.playGetSound()
|
|
133
158
|
break;
|
|
134
159
|
case 1:
|
|
135
160
|
scoreAddAnim.value = "scoreUp 0.2s";
|
|
136
|
-
kimi.value =
|
|
137
|
-
add_score_image.value =
|
|
161
|
+
kimi.value = resourceMap.kimi_smile;
|
|
162
|
+
add_score_image.value = resourceMap.add5;
|
|
138
163
|
MySound.playGetSound()
|
|
139
164
|
score.value += 5;
|
|
140
165
|
break;
|
|
141
166
|
case 2:
|
|
142
167
|
scoreMinAnim.value = "scoreUp 0.2s";
|
|
143
|
-
min_score_image.value =
|
|
144
|
-
kimi.value =
|
|
168
|
+
min_score_image.value = resourceMap.min1;
|
|
169
|
+
kimi.value = resourceMap.kimi_boom;
|
|
145
170
|
score.value -= 1;
|
|
146
171
|
MySound.playBoomSound()
|
|
147
172
|
if (score.value < 0) {
|
|
@@ -1,38 +1,40 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
3
|
<div key="timer" :style="{
|
|
4
|
-
width: 140*1.5,
|
|
5
|
-
height: 140*1.5,
|
|
4
|
+
width: 140 * 1.5,
|
|
5
|
+
height: 140 * 1.5,
|
|
6
6
|
backgroundImage: _ScoreBg,
|
|
7
|
-
top: 40*1.5,
|
|
8
|
-
left: 40*1.5,
|
|
7
|
+
top: 40 * 1.5,
|
|
8
|
+
left: 40 * 1.5,
|
|
9
9
|
textAlign: 'center',
|
|
10
|
-
lineHeight: 140*1.5,
|
|
10
|
+
lineHeight: 140 * 1.5,
|
|
11
11
|
color: 'rgba(255,0,0,1.0)',
|
|
12
|
-
fontSize: 72*1.5
|
|
12
|
+
fontSize: 72 * 1.5
|
|
13
13
|
}">{{ timer }}</div>
|
|
14
14
|
<SpriteTranslate v-for="(item, index) in itemList" :MoneyBag="props.MoneyBag" :onImpactTracer="onImpactTracer"
|
|
15
15
|
:onDestory="_RemoveItem" :key="`spritetranslate${item.key}`" :item=item />
|
|
16
|
-
</div>
|
|
16
|
+
</div>
|
|
17
17
|
</template>
|
|
18
18
|
|
|
19
19
|
<script setup>
|
|
20
|
-
import { shallowRef, defineProps, onMounted, onBeforeUnmount } from 'vue';
|
|
20
|
+
import { shallowRef, defineProps, onMounted, onBeforeUnmount, inject } from 'vue';
|
|
21
21
|
import SpriteTranslate from './SpriteTranslate.vue';
|
|
22
22
|
//定义props
|
|
23
23
|
const props = defineProps({
|
|
24
24
|
onImpactTracer: Function,
|
|
25
25
|
MoneyBag: Object,
|
|
26
|
-
_ScoreMinAnimationEnd:Function,
|
|
27
|
-
_ScoreAddAnimationEnd:Function
|
|
26
|
+
_ScoreMinAnimationEnd: Function,
|
|
27
|
+
_ScoreAddAnimationEnd: Function
|
|
28
28
|
})
|
|
29
|
+
//接收
|
|
30
|
+
const resourceMap = inject("resourceMap")
|
|
29
31
|
let _Index = 0;
|
|
30
32
|
// 随机生成列表
|
|
31
|
-
const _RedImage =
|
|
32
|
-
const _BigRedImage =
|
|
33
|
-
const _BoomImage =
|
|
34
|
-
const _ScoreBg =
|
|
35
|
-
let itemList =shallowRef([])
|
|
33
|
+
const _RedImage = resourceMap.red_packet;
|
|
34
|
+
const _BigRedImage = resourceMap.bigRed_packet;
|
|
35
|
+
const _BoomImage = resourceMap.boom_image;
|
|
36
|
+
const _ScoreBg = resourceMap._ScoreBg;
|
|
37
|
+
let itemList = shallowRef([])
|
|
36
38
|
let timer = shallowRef(60)
|
|
37
39
|
const onImpactTracer = props.onImpactTracer;
|
|
38
40
|
let _TimerOutId = null;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
* @Author: ZhengYi
|
|
3
|
+
* @Date: 2023-04-26
|
|
4
|
+
* @LastEditors: ZhengYi
|
|
5
|
+
* @LastEditTime: 2023-04-26
|
|
6
|
+
* @Description: file content
|
|
7
|
+
-->
|
|
8
|
+
<template>
|
|
9
|
+
<jsv-focus-block autoFocus :onAction="actionDefines">
|
|
10
|
+
<div :style="{
|
|
11
|
+
textAlign: 'center',
|
|
12
|
+
fontSize: 30,
|
|
13
|
+
lineHeight: 50,
|
|
14
|
+
color: '#ffffff',
|
|
15
|
+
left: 100,
|
|
16
|
+
top: 20,
|
|
17
|
+
width: 1280 - 200,
|
|
18
|
+
height: 50,
|
|
19
|
+
backgroundColor: 'rgba(27,38,151,0.8)',
|
|
20
|
+
}">按左键各个方向随机减少,按右键各个方向随机增加</div>
|
|
21
|
+
<JsvRadarChart :data="data" :backgroundUrl="bgImageUrl" :foregroundUrl="resultSquare" :style="style"
|
|
22
|
+
:fontSize="fontSize" :extendOffset="70" :fontColor="'#ff3212'" :radius="200" />
|
|
23
|
+
<JsvRadarChart :data="data2" :backgroundUrl="bgImageUrl" :foregroundUrl="resultSquare" :style="style2"
|
|
24
|
+
:fontSize="fontSize" :extendOffset="50" :fontColor="'#FFF231'" :radius="200" />
|
|
25
|
+
</jsv-focus-block>
|
|
26
|
+
</template>
|
|
27
|
+
|
|
28
|
+
<script setup>
|
|
29
|
+
import { JsvRadarChart } from "jsview";
|
|
30
|
+
import resultSquare from "./assets/resultSquare.png"
|
|
31
|
+
import bgImageUrl from "./assets/Square.png"
|
|
32
|
+
import { onMounted, ref } from 'vue';
|
|
33
|
+
import { jJsvRuntimeBridge } from 'jsview';
|
|
34
|
+
import { useRouter } from "vue-router";
|
|
35
|
+
const router = useRouter();
|
|
36
|
+
const data = ref([
|
|
37
|
+
{ title: '语文', value: 70 },
|
|
38
|
+
{ title: '数学', value: 98 },
|
|
39
|
+
{ title: '英语', value: 40 },
|
|
40
|
+
{ title: '化学', value: 80 },
|
|
41
|
+
{ title: '生物', value: 92 },
|
|
42
|
+
{ title: '物理', value: 88 },
|
|
43
|
+
])
|
|
44
|
+
const data2 = ref([
|
|
45
|
+
{ title: '语文', value: 30 },
|
|
46
|
+
{ title: '数学', value: 40 },
|
|
47
|
+
{ title: '英语', value: 50 },
|
|
48
|
+
{ title: '化学', value: 40 },
|
|
49
|
+
{ title: '生物', value: 44 },
|
|
50
|
+
])
|
|
51
|
+
|
|
52
|
+
const style = {
|
|
53
|
+
top: 400,
|
|
54
|
+
left: 300
|
|
55
|
+
}
|
|
56
|
+
const style2 = {
|
|
57
|
+
top: 400,
|
|
58
|
+
left: 950
|
|
59
|
+
}
|
|
60
|
+
const fontSize = 30;
|
|
61
|
+
|
|
62
|
+
const onKeyDown = (ev) => {
|
|
63
|
+
if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
|
|
64
|
+
router.go(-1)
|
|
65
|
+
} else if (ev.keyCode == 39) {
|
|
66
|
+
data.value.forEach((item, index) => {
|
|
67
|
+
item.value += Math.random() * 10
|
|
68
|
+
if (item.value >= 100) {
|
|
69
|
+
item.value = 100
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
data2.value.forEach((item, index) => {
|
|
73
|
+
item.value += Math.random() * 10
|
|
74
|
+
if (item.value >= 100) {
|
|
75
|
+
item.value = 100
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
} else if (ev.keyCode == 37) {
|
|
79
|
+
data.value.forEach((item, index) => {
|
|
80
|
+
item.value -= Math.random() * 10
|
|
81
|
+
if (item.value <= 10) {
|
|
82
|
+
item.value == 8
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
data2.value.forEach((item, index) => {
|
|
86
|
+
item.value -= Math.random() * 10
|
|
87
|
+
if (item.value <= 10) {
|
|
88
|
+
item.value == 8
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const actionDefines = {
|
|
94
|
+
onKeyDown
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<style scoped></style>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
* @Author: ChenChanghua
|
|
3
|
+
* @Date: 2023-03-08 14:52:08
|
|
4
|
+
* @Description: file content
|
|
5
|
+
-->
|
|
6
|
+
<script setup>
|
|
7
|
+
import { useFocusHub } from "jsview";
|
|
8
|
+
import Center from "./center/Center.vue";
|
|
9
|
+
import Backward from "./backward/Backward.vue";
|
|
10
|
+
|
|
11
|
+
import { onMounted } from "vue";
|
|
12
|
+
|
|
13
|
+
const focusHub = useFocusHub();
|
|
14
|
+
|
|
15
|
+
onMounted(() => {
|
|
16
|
+
focusHub.setFocus("itemResizeCenter");
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<template>
|
|
21
|
+
<div
|
|
22
|
+
:style="{
|
|
23
|
+
width: 1280,
|
|
24
|
+
height: 720,
|
|
25
|
+
backgroundColor: '#007788',
|
|
26
|
+
}"
|
|
27
|
+
>
|
|
28
|
+
<div :style="{ left: 150, top: 10 }" class="text">
|
|
29
|
+
获焦一秒后放大, 放大动画以中心为锚点
|
|
30
|
+
</div>
|
|
31
|
+
<div :style="{ left: 150, top: 50 }">
|
|
32
|
+
<center />
|
|
33
|
+
</div>
|
|
34
|
+
<div :style="{ left: 150, top: 260 }" class="text">
|
|
35
|
+
获焦一秒后放大, 放大动画以左侧为锚点
|
|
36
|
+
</div>
|
|
37
|
+
<div :style="{ left: 150, top: 300 }">
|
|
38
|
+
<backward />
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</template>
|
|
42
|
+
|
|
43
|
+
<style scoped>
|
|
44
|
+
.text {
|
|
45
|
+
width: 600;
|
|
46
|
+
height: 30;
|
|
47
|
+
line-height: 30;
|
|
48
|
+
font-size: 25;
|
|
49
|
+
color: #ffffff;
|
|
50
|
+
}
|
|
51
|
+
</style>
|