| 
					
				 | 
			
			
				@@ -19,7 +19,7 @@ type smoothAnimationType = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    osmdCanvasPageDom: null | HTMLElement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    osdmScrollDom: null | HTMLElement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    osdmScrollDomWith: number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   osdmScrollDomOffsetWidth: number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   osdmScrollDomOffsetLeft: number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    selectionBoxDom: null | HTMLElement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    pointsPos: pointsPosType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    translateXNum: number 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,7 +39,7 @@ export const smoothAnimationState = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    osmdCanvasPageDom: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    osdmScrollDom: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    osdmScrollDomWith: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   osdmScrollDomOffsetWidth: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   osdmScrollDomOffsetLeft: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    selectionBoxDom: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    pointsPos: [], // 计算之后的点坐标数组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    translateXNum: 0, // 当前谱面的translateX的距离   谱面的位置信息 由translateX和scrollLeft的偏移一起决定 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -105,7 +105,7 @@ export function destroySmoothAnimation() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       osmdCanvasPageDom: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       osdmScrollDom: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       osdmScrollDomWith: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      osdmScrollDomOffsetWidth: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      osdmScrollDomOffsetLeft: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       selectionBoxDom: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       pointsPos: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       translateXNum: 0, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -135,6 +135,10 @@ export function moveSmoothAnimationByPlayTime(time?: number) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    const noteDuration = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (nextIndex > state.times.length - 1 ? state.times[state.activeNoteIndex]?.endtime : state.times[nextIndex].time) - 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       state.times[state.activeNoteIndex]?.time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   // 妙极客曲目 有可能2个音符时值一样 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   if (noteDuration <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // 当前时值在该区间的占比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    let playProgress = (currentTime - state.times[state.activeNoteIndex]?.time) / noteDuration 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // 华为手机 fixtime 有个默认0.08的值,所以进度可能为负数 ,这里兼容一下 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -187,8 +191,8 @@ function move_osmd(nowPointsPos: pointsPosType[0]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    const clientWidth = smoothAnimationState.osdmScrollDomWith 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    const clientMidWidth = clientWidth / 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    let { left, right, width } = smoothAnimationState.smoothBotDom!.getBoundingClientRect() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   left -= smoothAnimationState.osdmScrollDomOffsetWidth 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   right -= smoothAnimationState.osdmScrollDomOffsetWidth 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   left -= smoothAnimationState.osdmScrollDomOffsetLeft 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   right -= smoothAnimationState.osdmScrollDomOffsetLeft 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    const midBotNum = left + width / 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // 分阶段移动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    if (right > clientWidth) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -233,8 +237,8 @@ function move_osmd(nowPointsPos: pointsPosType[0]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       smoothAnimationState.translateXNum += speed * 5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // 最多移动的位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   const maxTranslateXNum = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      smoothAnimationState.canvasDomWith - smoothAnimationState.osdmScrollDomWith - (smoothAnimationState.osdmScrollDom?.scrollLeft || 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   const osdmScrollDomScrollLeft = smoothAnimationState.osdmScrollDom?.scrollLeft || 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   const maxTranslateXNum = smoothAnimationState.canvasDomWith - smoothAnimationState.osdmScrollDomWith - osdmScrollDomScrollLeft 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    if (smoothAnimationState.translateXNum > maxTranslateXNum) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       smoothAnimationState.translateXNum = maxTranslateXNum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -262,7 +266,7 @@ function smoothAnimationMove(pos: { x: number; y: number }, pointsPos: pointsPos 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function calcClientWidth() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    smoothAnimationState.osdmScrollDomWith = smoothAnimationState.osdmScrollDom?.offsetWidth || 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   smoothAnimationState.osdmScrollDomOffsetWidth = smoothAnimationState.osdmScrollDom?.offsetLeft || 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   smoothAnimationState.osdmScrollDomOffsetLeft = smoothAnimationState.osdmScrollDom?.getBoundingClientRect().left || 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 创建dom 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -469,8 +473,8 @@ function createSmoothCurvePoints(pointsPos: pointsPosType, tension?: number, clo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function drawSmoothCurve(context: CanvasRenderingContext2D, pointsPos: pointsPosType, progresspointsPos?: pointsPosType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    context.lineWidth = 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   context.lineJoin = 'round';// 优化锯齿 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   context.lineCap = 'round'; // 优化锯齿 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   context.lineJoin = "round" // 优化锯齿 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   context.lineCap = "round" // 优化锯齿 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    context.strokeStyle = "rgba(255,255,255,0.6)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    drawLines(context, pointsPos) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    if (progresspointsPos?.length) { 
			 |