Browse Source

指法向演唱模式切换的时候影藏,刷新谱面时值变化 修改

黄琪勇 11 months ago
parent
commit
24830c513d

+ 19 - 4
src/page-instrument/header-top/index.tsx

@@ -248,7 +248,7 @@ export default defineComponent({
     // 是否显示引导
     const showGuide = ref(false);
     const showStudentGuide = ref(false);
-
+    let  displayFingeringCache = false // 指法缓存
     /** 设置按钮 */
     const settingBtn = computed(() => {
       // 音频播放中 禁用
@@ -697,10 +697,25 @@ export default defineComponent({
                   state.playType = "play";
                   state.playSource = state.music ? "music" : "background";
                 }
-                // 有歌词的时候,切换播放模式,需要重新渲染谱面
-                if (state.xmlHasLyric) {
+                // 有指法并且显示指法的时候 切换到演唱模式 需要影藏指法
+                let isRefresh = false
+                if(state.isShowFingering && state.fingeringInfo.name && (state.setting.displayFingering || displayFingeringCache)){
+                  if(state.playType === "sing"){
+                    state.setting.displayFingering = false
+                    displayFingeringCache = true
+                  } else {
+                    state.setting.displayFingering = displayFingeringCache
+                    displayFingeringCache = false
+                  }
+                  // 如果是竖屏指法和一行谱的时候 改变指法值的时候state 会调用刷新 refreshMusicSvg 所以下面不调用
+                  if (state.fingeringInfo.direction === "vertical" && !state.isSingleLine) {
+                    isRefresh = true
+                  }
+                }
+                // 有歌词的时候,切换播放模式,需要重新渲染谱面  指法不刷新谱面的时候
+                if (state.xmlHasLyric && !isRefresh) {
                   refreshMusicSvg();
-                } else {
+                } else if(!isRefresh) {
                   handlerModeChange(oldPlayType, oldPlaySource, true);
                 }
                 showToast({

+ 1 - 1
src/page-instrument/header-top/settting/index.tsx

@@ -48,7 +48,7 @@ export default defineComponent({
                 <div class={styles.content}>
                     <div class={styles.conBox}>
                         {
-                            state.isShowFingering && state.fingeringInfo.name && ["practise", "follow"].includes(state.modeType) &&
+                            state.isShowFingering && state.fingeringInfo.name && ["practise", "follow"].includes(state.modeType) && state.playType === "play" &&
                                 <div class={styles.cellBox}>
                                 <div class={styles.tit}>指法</div>
                                     <Switch v-model={state.setting.displayFingering}></Switch>

+ 2 - 18
src/page-instrument/view-detail/index.tsx

@@ -252,24 +252,8 @@ export default defineComponent({
         );
         throw new Error("webApi_beatTimes 完成");
       }
-      // 根据当前文件有没有 设置当前的播放模式
-      if(!state.music){
-        if(state.accompany){
-          state.playSource = "background"
-        }else{
-          if(state.fanSong){
-            state.playType = "sing"
-            state.playSource = "music"
-          }else if(state.banSong){
-            state.playType = "sing"
-            state.playSource = "background"
-          }else if(state.mingSong){
-            state.playType = "sing"
-            state.playSource = "mingSong"
-          }
-          handlerModeChange("play", "music")
-        }
-      }
+      // 刷新时值
+      handlerModeChange("play", "music")
       /**
        * 2024.1.25
        * 设置节拍器,跟练需要播放系统节拍器,所以不需要判断needTick状态

+ 26 - 6
src/state.ts

@@ -1387,6 +1387,23 @@ function initMusicSource(data: any, track?: string) {
   return musicObj
 }
 const setState = (data: any, index: number) => {
+  // 根据当前文件有没有 设置当前的播放模式
+  if(!state.music){
+    if(state.accompany){
+      state.playSource = "background"
+    }else{
+      if(state.fanSong){
+        state.playType = "sing"
+        state.playSource = "music"
+      }else if(state.banSong){
+        state.playType = "sing"
+        state.playSource = "background"
+      }else if(state.mingSong){
+        state.playType = "sing"
+        state.playSource = "mingSong"
+      }
+    }
+  }
   state.appName = "COLEXIU";
   state.detailId = data.bizId;
   state.xmlUrl = data.xmlFileUrl;
@@ -1401,7 +1418,7 @@ const setState = (data: any, index: number) => {
   /**
    * 单曲,指法根据用户当前的乐器来显示,如果没有则取musicSheetSoundList第一个track
    */
-  let musicalCode = !storeData.user?.instrumentId ? data.musicSheetSoundList?.[0]?.track || '' : data.musicSheetSoundList?.find((item: any) => item?.musicalInstrumentId == storeData.user?.instrumentId)?.track || '';
+  let musicalCode = !storeData.user?.instrumentId ? data.musicSheetSoundList.find((item:any)=>{ return item.audioPlayType === "PLAY" })?.track || '' : data.musicSheetSoundList?.find((item: any) => item?.musicalInstrumentId == storeData.user?.instrumentId && item.audioPlayType === "PLAY")?.track || '';
   const pitchSubject = musicalInstrumentCodeInfo.find((n) => n.code.toLocaleLowerCase() === subjectCode.toLocaleLowerCase())
   const pitchMusical = musicalInstrumentCodeInfo.find((n) => n.code.toLocaleLowerCase() === musicalCode.toLocaleLowerCase())
   state.subjectCodeId = pitchSubject ? pitchSubject.id : 0
@@ -1852,11 +1869,14 @@ export const refreshMusicSvg = () => {
 watch(
   () => state.setting.displayFingering,
   () => {
-    nextTick(() => {
-      if (smoothAnimationState.osdmScrollDom) {
-        smoothAnimationState.osdmScrollDomWith = smoothAnimationState.osdmScrollDom.offsetWidth | 0
-      }
-    })
+    // 有字符 并且是竖向指法 并且是一行谱
+    if(state.fingeringInfo?.name && state.fingeringInfo.direction === "vertical" && state.isSingleLine){
+      nextTick(() => {
+        if (smoothAnimationState.osdmScrollDom) {
+          smoothAnimationState.osdmScrollDomWith = smoothAnimationState.osdmScrollDom.offsetWidth | 0
+        }
+      })
+    }
     // 如果有指法,并且是竖向指法时,切换指法时,谱面宽度变化,需要重新渲染谱面
     if (state.fingeringInfo?.name && state.fingeringInfo.direction === "vertical" && !state.isSingleLine) {
       headTopData.settingMode = false;