control.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <div class="controlcon">
  3. <Pano v-if="currentScene.type == 'pano'" />
  4. <Fdkk v-else />
  5. </div>
  6. </template>
  7. <script setup>
  8. import Pano from "./control.pano";
  9. import Fdkk from "./control.fdkk";
  10. import {
  11. ref,
  12. watch,
  13. computed,
  14. onMounted,
  15. watchEffect,
  16. nextTick,
  17. unref,
  18. } from "vue";
  19. import { useStore } from "vuex";
  20. import { useMusicPlayer, useSoundPlayer } from "@/utils/sound";
  21. //背景音乐
  22. const musicPlayer = useMusicPlayer();
  23. //解说音乐
  24. const soundPlayer = useSoundPlayer();
  25. const store = useStore();
  26. const currentScene = computed(() => store.getters["scene/currentScene"]);
  27. const metadata = computed(() => store.getters["scene/metadata"]);
  28. const isDoneforCover = computed(() => store.getters["scene/isDoneforCover"]);
  29. const isShowCover = computed(
  30. () => metadata.value.coverInfo?.isShowCover || false
  31. );
  32. const setExplanation = (from) => {
  33. if (
  34. "explanation" in currentScene.value &&
  35. "audioUrl" in currentScene.value.explanation
  36. ) {
  37. console.log("设置解说", from);
  38. let { audioUrl, openByDefault, repeat } = currentScene.value.explanation;
  39. // showCommentaryPlaying.value = false;
  40. store.commit("functions/setCommentaryUrl", {
  41. src: audioUrl,
  42. loop: repeat,
  43. openByDefault: openByDefault,
  44. });
  45. useSoundPlayer.player.isLock = false;
  46. useSoundPlayer.player.watchPlay();
  47. }
  48. };
  49. const stopExplanation = (from) => {
  50. console.log("stop解说", from);
  51. useSoundPlayer.player.isLock = true;
  52. soundPlayer.paused();
  53. setTimeout(() => soundPlayer.paused(), 100);
  54. };
  55. const resumeExplanation = () => {
  56. console.log("resume解说");
  57. useSoundPlayer.player.isLock = false;
  58. useSoundPlayer.player.watchPlay();
  59. };
  60. const resetExplanation = (from) => {
  61. console.log("清空解说", from);
  62. store.commit("functions/setCommentaryUrl", "");
  63. useSoundPlayer.player.isLock = true;
  64. soundPlayer.paused();
  65. };
  66. watch([isShowCover, isDoneforCover], (val) => {
  67. if (val[0] && val[1]) {
  68. resumeExplanation(2);
  69. }
  70. if (val[0] && !val[1]) {
  71. stopExplanation(2);
  72. }
  73. });
  74. watchEffect(() => {
  75. if (currentScene.value.explanation) {
  76. let { audioUrl } = currentScene.value.explanation;
  77. if (audioUrl) {
  78. //解说有变,初始化按钮状态
  79. setExplanation(1);
  80. if (unref(isShowCover)) {
  81. stopExplanation(1);
  82. }
  83. } else {
  84. resetExplanation(1);
  85. }
  86. } else {
  87. resetExplanation(2);
  88. }
  89. });
  90. </script>
  91. <style lang="scss" scoped>
  92. .controlcon {
  93. height: 36px;
  94. background: rgba(0, 0, 0, 0.4);
  95. border-radius: 18px;
  96. backdrop-filter: blur(1px);
  97. max-width: calc(90vw - 100px);
  98. overflow-x: auto;
  99. overflow-y: hidden;
  100. }
  101. </style>