@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.
Files changed (88) hide show
  1. package/dom/bin/jsview-browser-debug-dom.min.js +1 -1
  2. package/dom/bin/jsview-dom.min.js +1 -1
  3. package/dom/bin/jsview-engine-js-browser.min.js +1 -1
  4. package/dom/target_core_revision.js +4 -4
  5. package/package.json +1 -1
  6. package/samples/Basic/components/anim/AnimTransition.vue +4 -4
  7. package/samples/DemoHomepage/App.vue +30 -6
  8. package/samples/DemoHomepage/components/TabFrame.vue +7 -0
  9. package/samples/DemoHomepage/router.js +21 -18
  10. package/samples/DemoHomepage/views/Homepage.vue +5 -1
  11. package/samples/FilterDemo/VideoLayer.vue +2 -2
  12. package/samples/FocusBlockDemos/AutoFocus/App.vue +56 -0
  13. package/samples/FocusBlockDemos/AutoFocus/BaseBlock.vue +82 -0
  14. package/samples/FocusBlockDemos/AutoFocus/DialogBlock.vue +89 -0
  15. package/samples/FocusBlockDemos/AutoFocus/DialogContorls.js +47 -0
  16. package/samples/FocusBlockDemos/AutoFocus/FocusNamesDefine.js +9 -0
  17. package/samples/FocusBlockDemos/AutoFocus/PlaneBlock.vue +71 -0
  18. package/samples/FocusBlockDemos/ProgressiveFocusControl/App.vue +84 -0
  19. package/samples/FocusBlockDemos/ProgressiveFocusControl/BaseBlock.vue +77 -0
  20. package/samples/FocusBlockDemos/ProgressiveFocusControl/DownPlaneBlock.vue +83 -0
  21. package/samples/FocusBlockDemos/ProgressiveFocusControl/FocusNamesDefine.js +12 -0
  22. package/samples/FocusBlockDemos/ProgressiveFocusControl/UpPlaneBlock.vue +83 -0
  23. package/samples/GiftRain/App.vue +248 -0
  24. package/samples/GiftRain/audio/boom.mp3 +0 -0
  25. package/samples/GiftRain/audio/get.mp3 +0 -0
  26. package/samples/GiftRain/common/Sound.js +48 -0
  27. package/samples/GiftRain/components/RedPacket.vue +161 -0
  28. package/samples/GiftRain/components/Score.vue +55 -0
  29. package/samples/GiftRain/components/SpriteTranslate.vue +72 -0
  30. package/samples/GridDemo/Item.vue +1 -0
  31. package/samples/ImpactStop/App.vue +2 -2
  32. package/samples/Marquee/App.vue +34 -3
  33. package/samples/MetroWidgetDemos/PingPong/App.vue +22 -11
  34. package/samples/MetroWidgetDemos/PingPong/AppPage.vue +3 -3
  35. package/samples/MetroWidgetDemos/{Item.vue → PingPong/Item.vue} +1 -3
  36. package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +3 -3
  37. package/samples/MetroWidgetDemos/{WidgetItem.vue → PingPong/WidgetItem.vue} +6 -1
  38. package/samples/MetroWidgetDemos/basic/App.vue +162 -0
  39. package/samples/MetroWidgetDemos/basic/Item.vue +43 -0
  40. package/samples/MetroWidgetDemos/direction/App.vue +158 -0
  41. package/samples/MetroWidgetDemos/direction/Item.vue +45 -0
  42. package/samples/MetroWidgetDemos/focusableItemBasic/App.vue +67 -0
  43. package/samples/MetroWidgetDemos/{Advanced → focusableItemBasic}/ButtonItem.vue +16 -20
  44. package/samples/MetroWidgetDemos/focusableItemMetroWidget/App.vue +74 -0
  45. package/samples/MetroWidgetDemos/{Advanced/widgets → focusableItemMetroWidget}/Item.vue +12 -30
  46. package/samples/MetroWidgetDemos/{Advanced/widgets → focusableItemMetroWidget}/WidgetItem.vue +10 -9
  47. package/samples/MetroWidgetDemos/focusableItemMix/App.vue +88 -0
  48. package/samples/MetroWidgetDemos/focusableItemMix/ButtonItem.vue +86 -0
  49. package/samples/MetroWidgetDemos/focusableItemMix/Item.vue +43 -0
  50. package/samples/MetroWidgetDemos/index.js +6 -0
  51. package/samples/MetroWidgetDemos/layoutType/App.vue +180 -0
  52. package/samples/MetroWidgetDemos/layoutType/Item.vue +45 -0
  53. package/samples/MetroWidgetDemos/padding/App.vue +222 -0
  54. package/samples/MetroWidgetDemos/padding/Item.vue +64 -0
  55. package/samples/MetroWidgetDemos/routeList.js +64 -0
  56. package/samples/MetroWidgetDemos/slideSetting/App.vue +225 -0
  57. package/samples/MetroWidgetDemos/slideSetting/Item.vue +45 -0
  58. package/samples/NinePatchDemo/App.vue +78 -122
  59. package/samples/NinePatchDemo/Item.vue +28 -26
  60. package/samples/Swiper/App.vue +148 -0
  61. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +15 -12
  62. package/utils/JsViewEngineWidget/TemplateParser.js +6 -1
  63. package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +17 -1
  64. package/utils/JsViewPlugin/JsvAudio/JsvAudio.vue +15 -38
  65. package/utils/JsViewPlugin/JsvAudio/version.js +10 -10
  66. package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
  67. package/utils/JsViewVueTools/JsvTextTools.js +26 -3
  68. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +1 -1
  69. package/utils/JsViewVueWidget/JsvFilterView.vue +1 -1
  70. package/utils/JsViewVueWidget/JsvMarquee.vue +81 -20
  71. package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
  72. package/utils/JsViewVueWidget/JsvPosterDiv.vue +1 -1
  73. package/utils/JsViewVueWidget/JsvPosterImage.vue +1 -1
  74. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +43 -9
  75. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +115 -79
  76. package/utils/JsViewVueWidget/JsvSwiper/index.js +3 -2
  77. package/utils/JsViewVueWidget/JsvTextBox.vue +1 -1
  78. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +1 -1
  79. package/samples/MetroWidgetDemos/Advanced/App.vue +0 -46
  80. package/samples/MetroWidgetDemos/Advanced/Buttons.vue +0 -70
  81. package/samples/MetroWidgetDemos/Advanced/Mixed.vue +0 -77
  82. package/samples/MetroWidgetDemos/Advanced/widgets/Widgets.vue +0 -116
  83. package/samples/MetroWidgetDemos/Advanced/widgets/focus1.png +0 -0
  84. package/samples/MetroWidgetDemos/Simple/AbsoluteTemplate.vue +0 -75
  85. package/samples/MetroWidgetDemos/Simple/App.vue +0 -45
  86. package/samples/MetroWidgetDemos/Simple/RelativeTemplate.vue +0 -111
  87. package/samples/MetroWidgetDemos/data.js +0 -205
  88. 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,12 @@
1
+ const FocusNames = {
2
+ UpPlane: "UpPlane",
3
+ DownPlane: "DownPlane",
4
+ BoxA: "A",
5
+ BoxB: "B",
6
+ BoxC: "C",
7
+ Box1: "1",
8
+ Box2: "2",
9
+ Box3: "3",
10
+ }
11
+
12
+ export default FocusNames;
@@ -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 ;