Pārlūkot izejas kodu

feat: 隐藏光标指针,使用光标跳动模式

TIANYONG 1 gadu atpakaļ
vecāks
revīzija
fc59d1d25c

+ 1 - 0
src/page-instrument/view-detail/index.module.less

@@ -67,6 +67,7 @@
         opacity: var(--corsor-opacity);
         //transform: translateX(10PX);
         z-index: 1 !important;
+        display: none; // 新版小酷AI不显示光标指针
     }
 
     .staff {

+ 14 - 15
src/state.ts

@@ -895,6 +895,7 @@ export const gotoNext = (note: any, skipNote?: boolean) => {
       console.log(error);
     }
     // 重置 或者切换演奏演唱的时候 可能出现 state.activeNoteIndex === note.i的情况 执行
+    fillWordColor();
     if (state.isSingleLine && state.playState === "paused") {
       moveSvgDom(skipNote);
     }
@@ -928,6 +929,7 @@ export const gotoNext = (note: any, skipNote?: boolean) => {
   } catch (error) {
     console.log(error);
   }
+  fillWordColor();
   // 一行谱,需要滚动小节
   if (state.isSingleLine) {
     moveSvgDom(skipNote);
@@ -1519,8 +1521,8 @@ export const addNoteBBox = (list: any[]) => {
 
 }
 
-/** 跳动svgdom */
-export const moveSvgDom = (skipNote?: boolean) => {
+// 给歌词和音符添加动态颜色
+const fillWordColor = () => {
   // console.log('当前音符',state.activeNoteIndex)
   state.times.forEach((item: any, idx: number) => {
     const svgEl = document.getElementById(`vf-${state.times[idx]?.svgElement?.attrs?.id}`)
@@ -1545,8 +1547,11 @@ export const moveSvgDom = (skipNote?: boolean) => {
     if (index === currentNote.repeatIdx) {
       lyric?.classList.add('lyricActive')
     }
-  })
+  })  
+}
 
+/** 跳动svgdom */
+export const moveSvgDom = (skipNote?: boolean) => {
   /**
    * 计算需要移动的距离
    * 当前选中的音符和第一个音符之间的间距
@@ -1567,26 +1572,20 @@ watch(
 	() => state.activeMeasureIndex,
 	() => {
     // 需要减去的合并小节数
-    let needReduceMultipleRestNum = 0;
+    let needReduceMultipleRestNum = 1;
     for(let noteIndex = 0; noteIndex < state.times.length; noteIndex++){
       const note =  state.times[noteIndex];
       if (note.MeasureNumberXML > state.activeMeasureIndex) {
         break;
       }
-      if (note.multipleRestMeasures) {
-        // if (note.multipleRestMeasures < note.totalMultipleRestMeasures) {
-        //   needReduceMultipleRestNum += note.MeasureNumberXML - note.multipleRestMeasures + 1;
-        // } else {
-        //   needReduceMultipleRestNum += note.totalMultipleRestMeasures - 1;
-        // }
-        // needReduceMultipleRestNum += note.MeasureNumberXML - note.multipleRestMeasures + 1;
+      // 合并的小节数+1
+      // if (note.multipleRestMeasures && (note.multipleRestMeasures > 1 || (note.multipleRestMeasures === 1 && note.MeasureNumberXML === 1))) {
+      //   needReduceMultipleRestNum += 1;
+      // }
+      if (note.multipleRestMeasures && note.multipleRestMeasures > 1) {
         needReduceMultipleRestNum += 1;
       }
-      // if (note.multipleRestMeasures === 0 && state.times[noteIndex-1]?.multipleRestMeasures) {
-      //   needReduceMultipleRestNum += state.times[noteIndex-1]?.multipleRestMeasures
-      // }
     }
-    needReduceMultipleRestNum = needReduceMultipleRestNum >= 0 ? needReduceMultipleRestNum : 0;
     const matchMeasureNum = state.activeMeasureIndex - needReduceMultipleRestNum
     console.log('选中的小节',matchMeasureNum,'需要减去的小节',needReduceMultipleRestNum,'当前的小节',state.activeMeasureIndex)
     state.vfmeasures.forEach((item: any, idx: number) => {

+ 2 - 1
src/view/music-score/index.tsx

@@ -104,9 +104,10 @@ export default defineComponent({
 			// osmd.EngravingRules.PageRightMargin = state.isSingleLine ? (window.innerWidth+200)/10 : 2;
 			// osmd.EngravingRules.FixedMeasureWidth = state.isSingleLine ? true : false; // 是否固定小节的宽度(小节同一宽度渲染)
 			//osmd.EngravingRules.PageTopMargin = state.platform === IPlatform.PC ? 0 : 1; // 老师端顶部间距
-			osmd.EngravingRules.PageTopMargin = 0; // 老师端顶部间距
+			osmd.EngravingRules.PageTopMargin = 2; // 老师端顶部间距
 			osmd.EngravingRules.PageTopMarginNarrow = 3;
 			osmd.EngravingRules.PageLeftMargin = 2;
+			osmd.EngravingRules.PageRightMargin = 2;
 			osmd.EngravingRules.BreathMarkDistance = 0.1; // 呼吸标记距离音符的位置,百分比
 			// 老师端上课页面,左右两边有功能按钮,所以左右边距需要加大
 			// if (state.isAttendClass && state.platform === IPlatform.PC) {