lanxin 6 일 전
부모
커밋
2a121dfbe7
4개의 변경된 파일69개의 추가작업 그리고 8개의 파일을 삭제
  1. 2 1
      scene/public/static/js/manage.js
  2. BIN
      scene/src/assets/image/beisuTab.png
  3. 59 2
      scene/src/views/gui/components/guide.vue
  4. 8 5
      scene/src/views/gui/menu.vue

+ 2 - 1
scene/public/static/js/manage.js

@@ -2688,7 +2688,8 @@ var SoundManager = {
         object.audio.currentTime = currentTime;
       }
       if (object.audio && object.src) {
-        object.audio.load(); // iOS 9   还需要额外的 load 一下, 否则直接 play 无效 *///https://www.cnblogs.com/interdrp/p/4211883.html   部分资料
+        // 仅在新设置 src 时 load,否则会重置 currentTime 导致 resume 时从头播放
+        if (src) object.audio.load(); // iOS 9   还需要额外的 load 一下, 否则直接 play 无效
         object.audio.play();
         object.audio.paused || (object.callback && object.callback(true));
         Log(name + "  播放 ");

BIN
scene/src/assets/image/beisuTab.png


+ 59 - 2
scene/src/views/gui/components/guide.vue

@@ -32,6 +32,14 @@
     </div>
 
     <div class="progress-box">
+      <div class="beisuTab" :class="{ beisuTabHide: !beisuTabShow }">
+        <div class="item" :class="{ active: currentBeisu == 2.0 }" @click="setBeisu(2.0)">2.0x</div>
+        <div class="item" :class="{ active: currentBeisu == 1.5 }" @click="setBeisu(1.5)">1.5x</div>
+        <div class="item" :class="{ active: currentBeisu == 1.25 }" @click="setBeisu(1.25)">1.25x</div>
+        <div class="item" :class="{ active: currentBeisu == 1.0 }" @click="setBeisu(1.0)">1.0x</div>
+        <div class="item" :class="{ active: currentBeisu == 0.8 }" @click="setBeisu(0.8)">0.8x</div>
+      </div>
+      <div class="beisu" :class="{ beisuAc: beisuTabShow }" @click="beisuTabShow = !beisuTabShow">倍速</div>
       <div class="info">
         <span>{{ guidePlayIndex < 0 ? '-' : (guidePlayIndex + 1) }}</span
         >/<span>{{ tourList.length }}</span>
@@ -55,7 +63,10 @@ export default {
   props: ["tourList"],
   data() {
     //这里存放数据
-    return {};
+    return {
+      beisuTabShow: false,
+      currentBeisu: 1.0,
+    };
   },
   //监听属性 类似于data概念
   computed: {
@@ -75,6 +86,10 @@ export default {
   },
   //方法集合
   methods: {
+    setBeisu(beisu) {
+      this.currentBeisu = beisu;
+      this.beisuTabShow = false;
+    },
     ...mapMutations(["setData", "setPanoOver"]),
     handleTour() {
       if (this.isCollapse) {
@@ -104,7 +119,7 @@ export default {
           init: () => {
             // console.error("init");
             if (this.guideIsPlay) {
-              settings.playTourNearBy ? player.director.playTourNearBy() : player.director.playTour();
+              player.director.playTourNearBy(); // 继续播放,而非从头开始
             }
           },
           slideChangeTransitionEnd: function () {
@@ -272,6 +287,48 @@ export default {
     display: flex;
     align-items: center;
     justify-content: flex-start;
+    .beisuTab {
+      width: 66px;
+      height: 137px;
+      background-image: url('../../../assets/image/beisuTab.png');
+      background-size: 100% 100%;
+      background-repeat: no-repeat;
+      background-position: center center;
+      position: absolute;
+      z-index: 1;
+      bottom: 28px;
+      display: flex;
+      flex-direction: column;
+      gap: 8px;
+      align-items: center;
+      justify-content: center;
+      padding-bottom: 10px;
+      overflow: hidden;
+      transition: all 0.3s ease-in-out;
+      .item {
+        font-size: 12px;
+        color: #fff;
+        cursor: pointer;
+        &.active {
+          color: #C7A770;
+        }
+      }
+    }
+    .beisuTabHide{
+      width: 66px;
+      height: 0;
+      padding: 0;
+      transition: all 0.3s ease-in-out;
+    }
+    .beisu {
+      font-size: 12px;
+      color: #fff;
+      margin: 0 20px;
+      cursor: pointer;
+    }
+    .beisuAc{
+      color: #C7A770;
+    }
     .info {
       font-size: 12px;
       span {

+ 8 - 5
scene/src/views/gui/menu.vue

@@ -156,7 +156,7 @@
         <div class="progress-box">
           <div class="info">
             <span>{{ guidePlayIndex + 1 }}</span
-            >/<span>{{ tourList.length }}</span>
+            >of<span>{{ tourList.length }}</span>
           </div>
           <div class="bar-box">
             <div :style="`width:${100 / tourList.length}%;left:${(guidePlayIndex * 100) / tourList.length}%;`" class="current-box"></div>
@@ -485,11 +485,14 @@ export default {
     guideIsPlay: {
       handler(val, old) {
         if (val) {
-          //导览播放
-          settings.playTourNearBy ? player.director.playTourNearBy() : player.director.playTour();
+          //导览播放:使用 playTourNearBy 继续播放,而非 playTour 从头开始
+          player.director.playTourNearBy();
         } else {
-          // 导览结束
-          player.director.tourInProgress && (player.director.stopTour(), player.director.endTourProgress());
+          // 仅 pause 音乐,不停止导览
+          if (player.director.tourInProgress) {
+            SoundManager.pause("tour");
+            player.guider3 && (player.guider3.pausedByBtn = true);
+          }
         }
       },
     },