|
@@ -560,6 +560,8 @@ const state = reactive({
|
|
|
workSectionNeedReset: false,
|
|
|
/** 旋律线开关 */
|
|
|
melodyLine: true,
|
|
|
+ /** 是否是C调,切换到唱名时,只有C调所有的谱面类型都可以播放唱名文件;其它调的只有首调可以播放唱名,因为唱名是按照C调制作的,没有其它调的唱名文件 */
|
|
|
+ isCTone: false,
|
|
|
});
|
|
|
const browserInfo = browser();
|
|
|
let offset_duration = 0;
|
|
@@ -1891,9 +1893,15 @@ watch(
|
|
|
// const matchMeasureNum = state.activeMeasureIndex - needReduceMultipleRestNum - 1
|
|
|
// console.log('选中的小节',matchMeasureNum,'需要减去的小节',needReduceMultipleRestNum,'当前的小节',state.activeMeasureIndex)
|
|
|
state.vfmeasures.forEach((item: any, idx: number) => {
|
|
|
- const measureNum = item.getAttribute('data-num') ? Number(item.getAttribute('data-num')) : -1;
|
|
|
- const nextMeasureNum = state.vfmeasures[idx+1]?.getAttribute('data-num') ? Number(state.vfmeasures[idx+1]?.getAttribute('data-num')) : -1;
|
|
|
- if (measureNum >= 0 && (measureNum === state.activeMeasureIndex || (measureNum < state.activeMeasureIndex && nextMeasureNum > state.activeMeasureIndex)) || (measureNum < state.activeMeasureIndex && nextMeasureNum == -1) ) {
|
|
|
+ const dataNum = item.getAttribute('data-num') // 值可能为字符串类型的undefined
|
|
|
+ const measureNum = (dataNum && dataNum !== "undefined") ? Number(dataNum) : -1;
|
|
|
+ let nextDataNum = state.vfmeasures[idx+1]?.getAttribute('data-num')
|
|
|
+ // 当有换行小节,下个小节的nextDataNum是undefined,所以这里需要往后找一个
|
|
|
+ if(!(nextDataNum && nextDataNum !== "undefined")){
|
|
|
+ nextDataNum = state.vfmeasures[idx + 2]?.getAttribute('data-num')
|
|
|
+ }
|
|
|
+ const nextMeasureNum = Number(nextDataNum)
|
|
|
+ if (measureNum >= 0 && (measureNum === state.activeMeasureIndex || (measureNum < state.activeMeasureIndex && nextMeasureNum > state.activeMeasureIndex))) {
|
|
|
item.querySelector('.vf-custom-bg')?.setAttribute("fill", "#132D4C")
|
|
|
item.querySelector('.vf-custom-bot')?.setAttribute("fill", "#040D1E")
|
|
|
// 预备小节
|
|
@@ -1943,7 +1951,8 @@ watch(
|
|
|
rightMeasureNumberXML = state.section[0].MeasureNumberXML
|
|
|
}
|
|
|
state.vfmeasures.forEach((item: any, idx: number) => {
|
|
|
- const measureNum = item.getAttribute('data-num') ? Number(item.getAttribute('data-num')) : 1;
|
|
|
+ const dataNum = item.getAttribute('data-num') // 值可能为字符串类型的undefined
|
|
|
+ const measureNum = (dataNum && dataNum !== "undefined") ? Number(dataNum) : -1;
|
|
|
// 小于选中置灰
|
|
|
if (measureNum < leftMeasureNumberXML) {
|
|
|
item.querySelector('.vf-custom-bg')?.setAttribute("fill", "rgba(96,159,207,0.5)")
|
|
@@ -1963,8 +1972,14 @@ watch(
|
|
|
}else{
|
|
|
// 恢复选段前
|
|
|
state.vfmeasures.forEach((item: any, idx: number) => {
|
|
|
- const measureNum = item.getAttribute('data-num') ? Number(item.getAttribute('data-num')) : -1;
|
|
|
- const nextMeasureNum = state.vfmeasures[idx+1]?.getAttribute('data-num') ? Number(state.vfmeasures[idx+1]?.getAttribute('data-num')) : -1;
|
|
|
+ const dataNum = item.getAttribute('data-num') // 值可能为字符串类型的undefined
|
|
|
+ const measureNum = (dataNum && dataNum !== "undefined") ? Number(dataNum) : -1;
|
|
|
+ let nextDataNum = state.vfmeasures[idx+1]?.getAttribute('data-num')
|
|
|
+ // 当有换行小节,下个小节的nextDataNum是undefined,所以这里需要往后找一个
|
|
|
+ if(!(nextDataNum && nextDataNum !== "undefined")){
|
|
|
+ nextDataNum = state.vfmeasures[idx + 2]?.getAttribute('data-num')
|
|
|
+ }
|
|
|
+ const nextMeasureNum = Number(nextDataNum)
|
|
|
if (measureNum >= 0 && (measureNum === state.activeMeasureIndex || (measureNum < state.activeMeasureIndex && nextMeasureNum > state.activeMeasureIndex)) ) {
|
|
|
item.querySelector('.vf-custom-bg')?.setAttribute("fill", "#132D4C")
|
|
|
item.querySelector('.vf-custom-bot')?.setAttribute("fill", "#040D1E")
|