@shijiu/jsview-vue 0.9.766 → 0.9.804
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/dom/bin/jsview-browser-debug-dom.min.js +1 -1
- package/dom/bin/jsview-dom.min.js +1 -1
- package/dom/bin/jsview-engine-js-browser.min.js +1 -1
- package/dom/target_core_revision.js +4 -4
- package/package.json +1 -1
- package/samples/Basic/components/anim/AnimTransition.vue +4 -4
- package/samples/DemoHomepage/App.vue +30 -6
- package/samples/DemoHomepage/components/TabFrame.vue +7 -0
- package/samples/DemoHomepage/router.js +21 -18
- package/samples/DemoHomepage/views/Homepage.vue +5 -1
- package/samples/FilterDemo/VideoLayer.vue +2 -2
- package/samples/FocusBlockDemos/AutoFocus/App.vue +56 -0
- package/samples/FocusBlockDemos/AutoFocus/BaseBlock.vue +82 -0
- package/samples/FocusBlockDemos/AutoFocus/DialogBlock.vue +89 -0
- package/samples/FocusBlockDemos/AutoFocus/DialogContorls.js +47 -0
- package/samples/FocusBlockDemos/AutoFocus/FocusNamesDefine.js +9 -0
- package/samples/FocusBlockDemos/AutoFocus/PlaneBlock.vue +71 -0
- package/samples/FocusBlockDemos/ProgressiveFocusControl/App.vue +84 -0
- package/samples/FocusBlockDemos/ProgressiveFocusControl/BaseBlock.vue +77 -0
- package/samples/FocusBlockDemos/ProgressiveFocusControl/DownPlaneBlock.vue +83 -0
- package/samples/FocusBlockDemos/ProgressiveFocusControl/FocusNamesDefine.js +12 -0
- package/samples/FocusBlockDemos/ProgressiveFocusControl/UpPlaneBlock.vue +83 -0
- package/samples/GiftRain/App.vue +248 -0
- package/samples/GiftRain/audio/boom.mp3 +0 -0
- package/samples/GiftRain/audio/get.mp3 +0 -0
- package/samples/GiftRain/common/Sound.js +48 -0
- package/samples/GiftRain/components/RedPacket.vue +161 -0
- package/samples/GiftRain/components/Score.vue +55 -0
- package/samples/GiftRain/components/SpriteTranslate.vue +72 -0
- package/samples/GridDemo/Item.vue +1 -0
- package/samples/ImpactStop/App.vue +2 -2
- package/samples/Marquee/App.vue +34 -3
- package/samples/MetroWidgetDemos/PingPong/App.vue +22 -11
- package/samples/MetroWidgetDemos/PingPong/AppPage.vue +3 -3
- package/samples/MetroWidgetDemos/{Item.vue → PingPong/Item.vue} +1 -3
- package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +3 -3
- package/samples/MetroWidgetDemos/{WidgetItem.vue → PingPong/WidgetItem.vue} +6 -1
- package/samples/MetroWidgetDemos/basic/App.vue +162 -0
- package/samples/MetroWidgetDemos/basic/Item.vue +43 -0
- package/samples/MetroWidgetDemos/direction/App.vue +158 -0
- package/samples/MetroWidgetDemos/direction/Item.vue +45 -0
- package/samples/MetroWidgetDemos/focusableItemBasic/App.vue +67 -0
- package/samples/MetroWidgetDemos/{Advanced → focusableItemBasic}/ButtonItem.vue +16 -20
- package/samples/MetroWidgetDemos/focusableItemMetroWidget/App.vue +74 -0
- package/samples/MetroWidgetDemos/{Advanced/widgets → focusableItemMetroWidget}/Item.vue +12 -30
- package/samples/MetroWidgetDemos/{Advanced/widgets → focusableItemMetroWidget}/WidgetItem.vue +10 -9
- package/samples/MetroWidgetDemos/focusableItemMix/App.vue +88 -0
- package/samples/MetroWidgetDemos/focusableItemMix/ButtonItem.vue +86 -0
- package/samples/MetroWidgetDemos/focusableItemMix/Item.vue +43 -0
- package/samples/MetroWidgetDemos/index.js +6 -0
- package/samples/MetroWidgetDemos/layoutType/App.vue +180 -0
- package/samples/MetroWidgetDemos/layoutType/Item.vue +45 -0
- package/samples/MetroWidgetDemos/padding/App.vue +222 -0
- package/samples/MetroWidgetDemos/padding/Item.vue +64 -0
- package/samples/MetroWidgetDemos/routeList.js +64 -0
- package/samples/MetroWidgetDemos/slideSetting/App.vue +225 -0
- package/samples/MetroWidgetDemos/slideSetting/Item.vue +45 -0
- package/samples/NinePatchDemo/App.vue +78 -122
- package/samples/NinePatchDemo/Item.vue +28 -26
- package/samples/Swiper/App.vue +148 -0
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +15 -12
- package/utils/JsViewEngineWidget/TemplateParser.js +6 -1
- package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +17 -1
- package/utils/JsViewPlugin/JsvAudio/JsvAudio.vue +15 -38
- package/utils/JsViewPlugin/JsvAudio/version.js +10 -10
- package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
- package/utils/JsViewVueTools/JsvTextTools.js +26 -3
- package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +1 -1
- package/utils/JsViewVueWidget/JsvFilterView.vue +1 -1
- package/utils/JsViewVueWidget/JsvMarquee.vue +81 -20
- package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
- package/utils/JsViewVueWidget/JsvPosterDiv.vue +1 -1
- package/utils/JsViewVueWidget/JsvPosterImage.vue +1 -1
- package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +43 -9
- package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +115 -79
- package/utils/JsViewVueWidget/JsvSwiper/index.js +3 -2
- package/utils/JsViewVueWidget/JsvTextBox.vue +1 -1
- package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +1 -1
- package/samples/MetroWidgetDemos/Advanced/App.vue +0 -46
- package/samples/MetroWidgetDemos/Advanced/Buttons.vue +0 -70
- package/samples/MetroWidgetDemos/Advanced/Mixed.vue +0 -77
- package/samples/MetroWidgetDemos/Advanced/widgets/Widgets.vue +0 -116
- package/samples/MetroWidgetDemos/Advanced/widgets/focus1.png +0 -0
- package/samples/MetroWidgetDemos/Simple/AbsoluteTemplate.vue +0 -75
- package/samples/MetroWidgetDemos/Simple/App.vue +0 -45
- package/samples/MetroWidgetDemos/Simple/RelativeTemplate.vue +0 -111
- package/samples/MetroWidgetDemos/data.js +0 -205
- package/utils/JsViewVueWidget/JsvSwiper/Indicator.vue +0 -35
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { shallowRef } from "vue";
|
|
3
|
+
import { DefaultKeyCodeMap } from "jsview"
|
|
4
|
+
|
|
5
|
+
const props = defineProps({
|
|
6
|
+
name: String,
|
|
7
|
+
style: {
|
|
8
|
+
type: Object,
|
|
9
|
+
default: {},
|
|
10
|
+
},
|
|
11
|
+
onLeftRight: Function,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const hasFocused = shallowRef(false);
|
|
15
|
+
|
|
16
|
+
const onFocusFunc = () => {
|
|
17
|
+
console.log(`子节点 ${props.name} 获得焦点`);
|
|
18
|
+
hasFocused.value = true;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const onBlurFunc = () => {
|
|
22
|
+
console.log(`子节点 ${props.name} 失去焦点`);
|
|
23
|
+
hasFocused.value = false;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const onDispatchKeyDownFunc = (ev)=>{
|
|
27
|
+
console.log(`子节点 ${props.name} 收到下发按键 code=${ev.keyCode}`);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const onKeyDownFunc = (ev)=>{
|
|
32
|
+
console.log(`子节点 ${props.name} 收到回流按键 code=${ev.keyCode}`);
|
|
33
|
+
|
|
34
|
+
// 将按键转化为left/right指令
|
|
35
|
+
let keyConsumed = true;
|
|
36
|
+
switch(ev.keyCode) {
|
|
37
|
+
case DefaultKeyCodeMap.Left:
|
|
38
|
+
props.onLeftRight?.("left");
|
|
39
|
+
break;
|
|
40
|
+
case DefaultKeyCodeMap.Right:
|
|
41
|
+
props.onLeftRight?.("right");
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
keyConsumed = false;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (keyConsumed) {
|
|
48
|
+
console.log(`子节点 ${props.name} 截断按键回流处理`)
|
|
49
|
+
}
|
|
50
|
+
return keyConsumed;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
</script>
|
|
54
|
+
|
|
55
|
+
<template>
|
|
56
|
+
<jsv-focus-block
|
|
57
|
+
:name="name"
|
|
58
|
+
:onAction="{
|
|
59
|
+
onDispatchKeyDown: onDispatchKeyDownFunc,
|
|
60
|
+
onKeyDown: onKeyDownFunc,
|
|
61
|
+
onFocus: onFocusFunc,
|
|
62
|
+
onBlur: onBlurFunc,
|
|
63
|
+
}"
|
|
64
|
+
>
|
|
65
|
+
<div
|
|
66
|
+
:style="{
|
|
67
|
+
...props.style,
|
|
68
|
+
width: 100,
|
|
69
|
+
height: 100,
|
|
70
|
+
fontSize: 35,
|
|
71
|
+
backgroundColor: hasFocused ? 'rgba(255,0,0,1)' : 'rgba(0,255,0,1)',
|
|
72
|
+
}"
|
|
73
|
+
>
|
|
74
|
+
{{ props.name }}
|
|
75
|
+
</div>
|
|
76
|
+
</jsv-focus-block>
|
|
77
|
+
</template>
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { inject } from "vue"
|
|
3
|
+
import { useFocusHub } from "jsview"
|
|
4
|
+
import BaseBlock from "./BaseBlock.vue";
|
|
5
|
+
import FocusNames from "./FocusNamesDefine"
|
|
6
|
+
|
|
7
|
+
const props = defineProps({
|
|
8
|
+
style: {
|
|
9
|
+
type: Object,
|
|
10
|
+
default: {},
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
let focusHub = useFocusHub();
|
|
15
|
+
let ChildBlockNames = [FocusNames.Box1, FocusNames.Box2, FocusNames.Box3];
|
|
16
|
+
let globalColumn = inject("globalColumn"); // 从App获取的全局coloumn信息
|
|
17
|
+
let lastIndex = 0;
|
|
18
|
+
let planeName = FocusNames.DownPlane;
|
|
19
|
+
|
|
20
|
+
const onFocusFunc = () => {
|
|
21
|
+
console.log(`父节点 ${planeName} 获得焦点`);
|
|
22
|
+
|
|
23
|
+
// 让子焦点获焦
|
|
24
|
+
lastIndex = globalColumn.index; // 同步全局节点信息
|
|
25
|
+
focusHub.setFocus(ChildBlockNames[lastIndex]);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const onBlurFunc = () => {
|
|
29
|
+
console.log(`父节点 ${planeName} 失去焦点`);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const onDispatchKeyDownFunc = (ev)=>{
|
|
33
|
+
console.log(`父节点 ${planeName} 收到下发按键 code=${ev.keyCode}`);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const onKeyDownFunc = (ev)=>{
|
|
38
|
+
console.log(`父节点 ${planeName} 收到回流按键 code=${ev.keyCode}`);
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const leftRightFunc = (action)=>{
|
|
43
|
+
let indexChanged = false;
|
|
44
|
+
|
|
45
|
+
if (action == "left") {
|
|
46
|
+
if (lastIndex >= 0) {
|
|
47
|
+
lastIndex--;
|
|
48
|
+
indexChanged = true;
|
|
49
|
+
console.log(`父节点 ${planeName} 收到left指令 切换子节点到${ChildBlockNames[lastIndex]}`);
|
|
50
|
+
focusHub.setFocus(ChildBlockNames[lastIndex]);
|
|
51
|
+
}
|
|
52
|
+
} else if (action = "right") {
|
|
53
|
+
if (lastIndex < ChildBlockNames.length - 1) {
|
|
54
|
+
lastIndex++;
|
|
55
|
+
indexChanged = true;
|
|
56
|
+
console.log(`父节点 ${planeName} 收到left指令 切换子节点到${ChildBlockNames[lastIndex]}`);
|
|
57
|
+
focusHub.setFocus(ChildBlockNames[lastIndex]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (indexChanged) {
|
|
62
|
+
// 回传lastIndex columen, 以方便Plane切换后保持column
|
|
63
|
+
globalColumn.index = lastIndex;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<template>
|
|
69
|
+
<jsv-focus-block
|
|
70
|
+
:name="planeName"
|
|
71
|
+
:onAction="{
|
|
72
|
+
onDispatchKeyDown: onDispatchKeyDownFunc,
|
|
73
|
+
onKeyDown: onKeyDownFunc,
|
|
74
|
+
onFocus: onFocusFunc,
|
|
75
|
+
onBlur: onBlurFunc,
|
|
76
|
+
}"
|
|
77
|
+
:style="props.style"
|
|
78
|
+
>
|
|
79
|
+
<base-block :name="ChildBlockNames[0]" :style="{left:150 * 1}" :onLeftRight="leftRightFunc" />
|
|
80
|
+
<base-block :name="ChildBlockNames[1]" :style="{left:150 * 2}" :onLeftRight="leftRightFunc" />
|
|
81
|
+
<base-block :name="ChildBlockNames[2]" :style="{left:150 * 3}" :onLeftRight="leftRightFunc" />
|
|
82
|
+
</jsv-focus-block>
|
|
83
|
+
</template>
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { inject } from "vue"
|
|
3
|
+
import { useFocusHub } from "jsview"
|
|
4
|
+
import BaseBlock from "./BaseBlock.vue";
|
|
5
|
+
import FocusNames from "./FocusNamesDefine"
|
|
6
|
+
|
|
7
|
+
const props = defineProps({
|
|
8
|
+
style: {
|
|
9
|
+
type: Object,
|
|
10
|
+
default: {},
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
let focusHub = useFocusHub();
|
|
15
|
+
let ChildBlockNames = [FocusNames.BoxA, FocusNames.BoxB, FocusNames.BoxC];
|
|
16
|
+
let globalColumn = inject("globalColumn"); // 从App获取的全局coloumn信息
|
|
17
|
+
let lastIndex = 0;
|
|
18
|
+
let planeName = FocusNames.UpPlane;
|
|
19
|
+
|
|
20
|
+
const onFocusFunc = () => {
|
|
21
|
+
console.log(`父节点 ${planeName} 获得焦点`);
|
|
22
|
+
|
|
23
|
+
// 让子焦点获焦
|
|
24
|
+
lastIndex = globalColumn.index; // 同步全局节点信息
|
|
25
|
+
focusHub.setFocus(ChildBlockNames[lastIndex]);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const onBlurFunc = () => {
|
|
29
|
+
console.log(`父节点 ${planeName} 失去焦点`);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const onDispatchKeyDownFunc = (ev)=>{
|
|
33
|
+
console.log(`父节点 ${planeName} 收到下发按键 code=${ev.keyCode}`);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const onKeyDownFunc = (ev)=>{
|
|
38
|
+
console.log(`父节点 ${planeName} 收到回流按键 code=${ev.keyCode}`);
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const leftRightFunc = (action)=>{
|
|
43
|
+
let indexChanged = false;
|
|
44
|
+
|
|
45
|
+
if (action == "left") {
|
|
46
|
+
if (lastIndex >= 0) {
|
|
47
|
+
lastIndex--;
|
|
48
|
+
indexChanged = true;
|
|
49
|
+
console.log(`父节点 ${planeName} 收到left指令 切换子节点到${ChildBlockNames[lastIndex]}`);
|
|
50
|
+
focusHub.setFocus(ChildBlockNames[lastIndex]);
|
|
51
|
+
}
|
|
52
|
+
} else if (action = "right") {
|
|
53
|
+
if (lastIndex < ChildBlockNames.length - 1) {
|
|
54
|
+
lastIndex++;
|
|
55
|
+
indexChanged = true;
|
|
56
|
+
console.log(`父节点 ${planeName} 收到left指令 切换子节点到${ChildBlockNames[lastIndex]}`);
|
|
57
|
+
focusHub.setFocus(ChildBlockNames[lastIndex]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (indexChanged) {
|
|
62
|
+
// 回传lastIndex columen, 以方便Plane切换后保持column
|
|
63
|
+
globalColumn.index = lastIndex;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<template>
|
|
69
|
+
<jsv-focus-block
|
|
70
|
+
:name="planeName"
|
|
71
|
+
:onAction="{
|
|
72
|
+
onDispatchKeyDown: onDispatchKeyDownFunc,
|
|
73
|
+
onKeyDown: onKeyDownFunc,
|
|
74
|
+
onFocus: onFocusFunc,
|
|
75
|
+
onBlur: onBlurFunc,
|
|
76
|
+
}"
|
|
77
|
+
:style="props.style"
|
|
78
|
+
>
|
|
79
|
+
<base-block :name="ChildBlockNames[0]" :style="{left:150 * 1}" :onLeftRight="leftRightFunc" />
|
|
80
|
+
<base-block :name="ChildBlockNames[1]" :style="{left:150 * 2}" :onLeftRight="leftRightFunc" />
|
|
81
|
+
<base-block :name="ChildBlockNames[2]" :style="{left:150 * 3}" :onLeftRight="leftRightFunc" />
|
|
82
|
+
</jsv-focus-block>
|
|
83
|
+
</template>
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<jsv-focus-block autoFocus ref="App" :onAction="actionDefines">
|
|
3
|
+
<div
|
|
4
|
+
:style="{ width: 1920, height: 1080, overflow: 'hidden', transform: 'scale3d(0.67,0.67,1)', left: -220 * 1.5 + 8, top: -170 - 8 }">
|
|
5
|
+
<JsvPreload :preloadList="preload_info"></JsvPreload>
|
|
6
|
+
<div
|
|
7
|
+
:style="{ backgroundImage: bg, width: 1920, height: 1080, overflow: 'hidden' }">
|
|
8
|
+
<Score :score="score"></Score>
|
|
9
|
+
<JsvActorMove key="JsvSpriteTranslate" :style="{
|
|
10
|
+
top: 476 * 1.5,
|
|
11
|
+
left: 220 * 1.5,
|
|
12
|
+
width: 194 * 1.5,
|
|
13
|
+
height: 244 * 1.5,
|
|
14
|
+
}" :control=_TranslateControl>
|
|
15
|
+
<div key="kimi" :style="{
|
|
16
|
+
top: 0,
|
|
17
|
+
left: 0,
|
|
18
|
+
width: 194 * 1.5,
|
|
19
|
+
height: 244 * 1.5,
|
|
20
|
+
backgroundImage: kimi,
|
|
21
|
+
}">
|
|
22
|
+
<div key="MoneyBag" ref="moneyBag" :style="{
|
|
23
|
+
top: 22 * 1.3,
|
|
24
|
+
left: 7,
|
|
25
|
+
width: 180 * 1.5,
|
|
26
|
+
height: 100 * 1.5,
|
|
27
|
+
backgroundColor: 'rgba(0,0,0,0)'
|
|
28
|
+
}"></div>
|
|
29
|
+
<div :style="{
|
|
30
|
+
top: 0,
|
|
31
|
+
left: 40 * 1.5,
|
|
32
|
+
width: 81 * 1.5,
|
|
33
|
+
height: 74 * 1.5,
|
|
34
|
+
visibility: scoreMinAnim !== null ? 'visible' : 'hidden',
|
|
35
|
+
backgroundImage: min_score_image,
|
|
36
|
+
animation: scoreMinAnim,
|
|
37
|
+
}" @animationend=_ScoreMinAnimationEnd />
|
|
38
|
+
<div :style="{
|
|
39
|
+
top: 0,
|
|
40
|
+
left: 40 * 1.5,
|
|
41
|
+
width: 81 * 1.5,
|
|
42
|
+
height: 74 * 1.5,
|
|
43
|
+
visibility: scoreAddAnim !== null ? 'visible' : 'hidden',
|
|
44
|
+
backgroundImage: add_score_image,
|
|
45
|
+
animation: scoreAddAnim,
|
|
46
|
+
}" @animationend=_ScoreAddAnimationEnd />
|
|
47
|
+
</div>
|
|
48
|
+
</JsvActorMove>
|
|
49
|
+
<RedPacket :MoneyBag="moneyBag" :onImpactTracer="_onImpactTracer" :_ScoreMinAnimationEnd="_ScoreMinAnimationEnd"
|
|
50
|
+
:_ScoreAddAnimationEnd="_ScoreAddAnimationEnd" />
|
|
51
|
+
|
|
52
|
+
</div>
|
|
53
|
+
<!-- 音频 -->
|
|
54
|
+
<JsvAudio key="AudioBg" :src="_AudioBgUrl" :loop="true" :onRef="onRef1" :onLoad="audioOnLoad" />
|
|
55
|
+
|
|
56
|
+
<JsvAudio v-if="!_DisableEffectSound" :onRef="onRef2" :loop="true" />
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
</div>
|
|
60
|
+
</jsv-focus-block>
|
|
61
|
+
</template>
|
|
62
|
+
<script setup>
|
|
63
|
+
/* eslint-disable */
|
|
64
|
+
import { JsvFocusBlock, JsvActorMove, JsvActorMoveControl, jJsvRuntimeBridge, JsvPreload, buildPreloadInfo } from "jsview";
|
|
65
|
+
import JsvAudio, { globalLoadJsvAudioPlugin } from "jsview/utils/JsViewPlugin/JsvAudio"
|
|
66
|
+
import { shallowRef, onMounted, onBeforeUnmount } from "vue";
|
|
67
|
+
import { useRouter } from "vue-router";
|
|
68
|
+
import Score from "./components/Score.vue";
|
|
69
|
+
import RedPacket from "./components/RedPacket.vue";
|
|
70
|
+
import Sound from "./common/Sound.js"
|
|
71
|
+
//音频Sound
|
|
72
|
+
const MySound = new Sound()
|
|
73
|
+
//加载音频插件 jsview/utils/JsViewPlugin/JsvAudio
|
|
74
|
+
globalLoadJsvAudioPlugin((status) => {
|
|
75
|
+
console.log("Audio plugin load status", status);
|
|
76
|
+
});
|
|
77
|
+
//预加载信息
|
|
78
|
+
const kimi_normal = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_normal.png';
|
|
79
|
+
const kimi_smile = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_smile.png';
|
|
80
|
+
const kimi_boom = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_boom.png';
|
|
81
|
+
const red_packet = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/red.png';
|
|
82
|
+
const bigRed_packet = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bigred.png'
|
|
83
|
+
const boom_image = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/boom.png'
|
|
84
|
+
const bg = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bg.jpg'
|
|
85
|
+
const preload_info = [
|
|
86
|
+
buildPreloadInfo(kimi_normal),
|
|
87
|
+
buildPreloadInfo(kimi_smile),
|
|
88
|
+
buildPreloadInfo(kimi_boom),
|
|
89
|
+
buildPreloadInfo(red_packet),
|
|
90
|
+
buildPreloadInfo(bigRed_packet),
|
|
91
|
+
buildPreloadInfo(boom_image),
|
|
92
|
+
buildPreloadInfo(bg)
|
|
93
|
+
];
|
|
94
|
+
//定义不需要响应式的变量
|
|
95
|
+
let _CurrentRain = null;
|
|
96
|
+
//音频ref
|
|
97
|
+
let _Audio = null;
|
|
98
|
+
let _AudioBgUrl = "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewAudio/MiniGameBackgroundMusic-redpack.mp3";
|
|
99
|
+
//背景音频ref
|
|
100
|
+
let _BgAudio = null;
|
|
101
|
+
let _IsRunning = false;
|
|
102
|
+
let _DisableEffectSound = true;
|
|
103
|
+
let _TranslateControl = new JsvActorMoveControl()
|
|
104
|
+
//定义需要响应式的变量
|
|
105
|
+
let kimi = shallowRef("http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_normal.png")
|
|
106
|
+
let score = shallowRef(0)
|
|
107
|
+
let min_score_image = shallowRef(null)
|
|
108
|
+
let add_score_image = shallowRef(null)
|
|
109
|
+
let scoreAddAnim = shallowRef(null)
|
|
110
|
+
let scoreMinAnim = shallowRef(null)
|
|
111
|
+
let moneyBag = shallowRef(null)
|
|
112
|
+
|
|
113
|
+
//定义扣分结束动画
|
|
114
|
+
const _ScoreAddAnimationEnd = (event) => {
|
|
115
|
+
// event.stopPropagation();
|
|
116
|
+
scoreAddAnim.value = null
|
|
117
|
+
console.log(" _ScoreAddAnimationEnd event:", event);
|
|
118
|
+
}
|
|
119
|
+
//定义加分结束动画
|
|
120
|
+
const _ScoreMinAnimationEnd = (event) => {
|
|
121
|
+
// event.stopPropagation();
|
|
122
|
+
scoreMinAnim.value = null
|
|
123
|
+
console.log(" _ScoreMinAnimationEnd event:", event);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
//定义碰撞函数
|
|
127
|
+
const _onImpactTracer = (rain) => {
|
|
128
|
+
if (rain !== null && rain !== _CurrentRain) {
|
|
129
|
+
_CurrentRain = rain;
|
|
130
|
+
console.log("_onImpactTracer rain:", rain);
|
|
131
|
+
switch (rain.type) {
|
|
132
|
+
case 0:
|
|
133
|
+
scoreAddAnim.value = "scoreUp 0.2s";
|
|
134
|
+
kimi.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_normal.png";
|
|
135
|
+
add_score_image.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/add1.png";
|
|
136
|
+
score.value += 1;
|
|
137
|
+
MySound.playGetSound()
|
|
138
|
+
break;
|
|
139
|
+
case 1:
|
|
140
|
+
scoreAddAnim.value = "scoreUp 0.2s";
|
|
141
|
+
kimi.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_smile.png";
|
|
142
|
+
add_score_image.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/add5.png";
|
|
143
|
+
MySound.playGetSound()
|
|
144
|
+
score.value += 5;
|
|
145
|
+
break;
|
|
146
|
+
case 2:
|
|
147
|
+
scoreMinAnim.value = "scoreUp 0.2s";
|
|
148
|
+
min_score_image.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/min1.png";
|
|
149
|
+
kimi.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_boom.png";
|
|
150
|
+
score.value -= 1;
|
|
151
|
+
MySound.playBoomSound()
|
|
152
|
+
if (score.value < 0) {
|
|
153
|
+
score.value = 0;
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//键盘松开时应该暂停动作
|
|
162
|
+
const onKeyUp = (ev) => {
|
|
163
|
+
console.log("onKeyUp in : ", ev);
|
|
164
|
+
if (ev.keyCode === 37 || ev.keyCode === 39) {
|
|
165
|
+
_IsRunning = false;
|
|
166
|
+
_TranslateControl.pause((x, y) => {
|
|
167
|
+
console.log(`_TranslateControl pause x:${x}`);
|
|
168
|
+
});
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const router = useRouter();
|
|
175
|
+
//定义键盘按下
|
|
176
|
+
const onKeyDown = (ev) => {
|
|
177
|
+
if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
|
|
178
|
+
router.go(-1)
|
|
179
|
+
} else if (ev.keyCode === 37) {
|
|
180
|
+
console.log(" ev.keyCode === 37 ");
|
|
181
|
+
if (!_IsRunning) {
|
|
182
|
+
_TranslateControl.moveToX(0, 400 * 1.5, null);
|
|
183
|
+
_IsRunning = true;
|
|
184
|
+
}
|
|
185
|
+
} else if (ev.keyCode === 39) {
|
|
186
|
+
console.log(" ev.keyCode === 39");
|
|
187
|
+
if (!_IsRunning) {
|
|
188
|
+
_TranslateControl.moveToX((1280 - 220 - 194) * 1.5, 400 * 1.5, null);
|
|
189
|
+
_IsRunning = true;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
//注册
|
|
196
|
+
const actionDefines = {
|
|
197
|
+
onKeyDown,
|
|
198
|
+
onKeyUp
|
|
199
|
+
}
|
|
200
|
+
//定义音频回调
|
|
201
|
+
const onRef1 = (ref) => {
|
|
202
|
+
_BgAudio = ref
|
|
203
|
+
}
|
|
204
|
+
const onRef2 = (ref) => {
|
|
205
|
+
_Audio = ref
|
|
206
|
+
}
|
|
207
|
+
const audioOnLoad = () => {
|
|
208
|
+
console.log("audio on load")
|
|
209
|
+
_BgAudio.play()
|
|
210
|
+
}
|
|
211
|
+
onMounted(() => {
|
|
212
|
+
//初始化音效
|
|
213
|
+
MySound.initSound();
|
|
214
|
+
//摘画布
|
|
215
|
+
jJsvRuntimeBridge.notifyPageLoaded();
|
|
216
|
+
window.BgAudio = _BgAudio;
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
//卸载之前摧毁音效
|
|
220
|
+
onBeforeUnmount(() => {
|
|
221
|
+
MySound.destroy();
|
|
222
|
+
});
|
|
223
|
+
</script>
|
|
224
|
+
|
|
225
|
+
<style scoped>
|
|
226
|
+
@keyframes scoreUp {
|
|
227
|
+
from {
|
|
228
|
+
transform: translate3d(0, 0, 0);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
to {
|
|
232
|
+
transform: translate3d(0, -20, 0);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
@keyframes rainDown {
|
|
237
|
+
from {
|
|
238
|
+
transform: translate3d(0, -780, 0);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
to {
|
|
242
|
+
transform: translate3d(0, 0, 0);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
;
|
|
247
|
+
;
|
|
248
|
+
</style>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { JsvSoundPool } from "jsview";
|
|
2
|
+
import getAudio from "../audio/get.mp3";
|
|
3
|
+
import boomAudio from "../audio/boom.mp3";
|
|
4
|
+
|
|
5
|
+
class Sound {
|
|
6
|
+
initSound() {
|
|
7
|
+
this.soundPool = new JsvSoundPool(10);
|
|
8
|
+
this.soundPool.request(
|
|
9
|
+
`url(${getAudio})`,
|
|
10
|
+
null,
|
|
11
|
+
1,
|
|
12
|
+
(state, audioController) => {
|
|
13
|
+
console.log("load get audio ", state)
|
|
14
|
+
if (state === 0) {
|
|
15
|
+
Sound._AudioController1 = audioController;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
this.soundPool.request(
|
|
20
|
+
`url(${boomAudio})`,
|
|
21
|
+
null,
|
|
22
|
+
1,
|
|
23
|
+
(state, audioController) => {
|
|
24
|
+
console.log("load boom audio ", state)
|
|
25
|
+
if (state === 0) {
|
|
26
|
+
Sound._AudioController2 = audioController;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
playGetSound() {
|
|
33
|
+
if (Sound._AudioController1) {
|
|
34
|
+
Sound._AudioController1.play();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
playBoomSound() {
|
|
39
|
+
if (Sound._AudioController2) {
|
|
40
|
+
Sound._AudioController2.play();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
destroy () {
|
|
44
|
+
this.soundPool.destroy()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
export default Sound ;
|