hqchart 1.1.14408 → 1.1.14416

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2352,7 +2352,7 @@ this.YTextPosition=[0,0],//是坐标否强制画在内部 [0=左侧] [1=右侧]
2352
2352
  this.YTextPadding=[g_JSChartResource.Frame.YTextPadding[0],g_JSChartResource.Frame.YTextPadding[1]],//Y轴文字和边框间距 [0=左侧] [1=右侧]
2353
2353
  this.IsShowXLine=true;//是否显示X轴刻度线
2354
2354
  this.IsShowYLine=true;this.YInsideOffset=0;this.YTextBaseline=0;//0=居中 1=上部 (目前就支持内部刻度)
2355
- this.MultiTextFormat=0;//多行刻度信息显示模式 0=显示第1行 1=价格/百分比 2=显示2行
2355
+ this.MultiTextFormat=0;//多行刻度信息显示模式 0=显示第1行 1=单行多个文本 2=显示2行 3=多行输出(json格式)
2356
2356
  this.RightTextMaxWidth=0;this.ShortYLineLength=5;this.ShortXLineLength=5;this.BeforeDrawXYCallback;//坐标绘制前回调,绘制深度图
2357
2357
  this.GetEventCallback;//事件回调
2358
2358
  //工具栏的按钮样式
@@ -2377,7 +2377,7 @@ var leftExtendLine=null;//左侧延长线
2377
2377
  if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){rightExtendLine=this.YLineExtend[1];leftExtendLine=this.YLineExtend[0];}var rightExtendText=null;//右侧文字设置
2378
2378
  var leftExtendText=null;//左侧文字设置
2379
2379
  if(IFrameSplitOperator.IsNonEmptyArray(this.YTextExtend)){leftExtendText=this.YTextExtend[0];rightExtendText=this.YTextExtend[1];}var yPrev=null;//上一个坐标y的值
2380
- var pixelRatio=GetDevicePixelRatio();var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;var aryMultiText=[];var rtPreRight,rtRight,rtLeft,rtPreLeft;var textBaseline=0;//0=上 1=中 2=下
2380
+ var pixelRatio=GetDevicePixelRatio();var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;var aryMultiText=[];var aryLeftMulitText=[];var rtPreRight,rtRight,rtLeft,rtPreLeft;var textBaseline=0;//0=上 1=中 2=下
2381
2381
  for(var i=this.HorizontalInfo.length-1;i>=0;--i)//从上往下画分割线
2382
2382
  {var item=this.HorizontalInfo[i];if(!IFrameSplitOperator.IsNumber(item.Value))continue;if(NumberCompare.GT(item.Value,this.HorizontalMax)||NumberCompare.LT(item.Value,this.HorizontalMin))continue;var y=this.GetYFromData(item.Value);if(y!=null&&yPrev!=null&&Math.abs(y-yPrev)<this.MinYDistance)continue;//两个坐标在近了 就不画了
2383
2383
  var yFixed=ToFixedPoint(y);//绘制刻度线
@@ -2388,23 +2388,30 @@ this.Canvas.beginPath();this.Canvas.moveTo(left,yFixed);this.Canvas.lineTo(right
2388
2388
  {}else if(item.LineType>0){if(g_JSChartResource.FrameYLineDash){this.Canvas.save();this.Canvas.setLineDash(g_JSChartResource.FrameYLineDash);//虚线
2389
2389
  this.Canvas.beginPath();this.Canvas.moveTo(left,yFixed);this.Canvas.lineTo(right,yFixed);this.Canvas.stroke();this.Canvas.setLineDash([]);this.Canvas.restore();}else{this.Canvas.beginPath();this.Canvas.moveTo(left,yFixed);this.Canvas.lineTo(right,yFixed);this.Canvas.stroke();}}if(bChangeLineWidth){this.Canvas.lineWidth=pixelRatio;}}var yText=y;if(y>=bottom-2){this.Canvas.textBaseline='bottom';textBaseline=2;}else if(y<=top+2){this.Canvas.textBaseline='top';yText+=this.YTextTopOffset;textBaseline=0;}else{this.Canvas.textBaseline="middle";textBaseline=1;}//左边 坐标信息 间距小于10 不画坐标
2390
2390
  this.Canvas.strokeStyle=item.TextColor;this.Canvas.fillStyle=item.TextColor;if(item.Message[0]!=null&&isDrawLeft){var yOffset=0;if(IFrameSplitOperator.IsNonEmptyArray(item.YOffset))//文字Y轴偏移
2391
- {var offsetItem=item.YOffset[0];if(offsetItem&&IFrameSplitOperator.IsNumber(offsetItem.Offset))yOffset=offsetItem.Offset;}if(Array.isArray(item.Message[0])){if(this.MultiTextFormat==3){var obj={Data:item.Message[0],X:left,Y:yText,TextBaseLine:textBaseline,IsLeft:true,Item:item,TextPadding:this.YTextPadding[0]};this.DrawMultiLineText(obj);}}else{if(item.Font!=null)this.Canvas.font=item.Font;var xText=left;if(leftExtendLine&&leftExtendLine.Width>1){var lineLength=leftExtendLine.Width;if(leftExtendLine.Color)this.Canvas.strokeStyle=leftExtendLine.Color;else this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText-lineLength,yFixed);this.Canvas.stroke();xText-=lineLength;}rtLeft=this.GetTextTopBottom(textBaseline,yText);if(!rtPreLeft||rtLeft&&!this.IsTextTopBottomOverlap(rtLeft,rtPreLeft)){if(leftExtendText&&leftExtendText.Align===1){this.Canvas.textAlign="left";this.Canvas.fillText(item.Message[0],this.YTextPadding[0],yText+yOffset);}else{this.Canvas.textAlign="right";this.Canvas.fillText(item.Message[0],xText-this.YTextPadding[0],yText+yOffset);rtPreLeft=rtLeft;}}}}//右边 坐标信息 间距小于10 不画坐标
2391
+ {var offsetItem=item.YOffset[0];if(offsetItem&&IFrameSplitOperator.IsNumber(offsetItem.Offset))yOffset=offsetItem.Offset;}if(Array.isArray(item.Message[0])){if(this.MultiTextFormat==1)//显示1 格式如:价格/百分比
2392
+ {var textData=this.CreateMulitCoordinateItem(item.Message[0],left-2,yText,this.Canvas.textBaseline,item);aryLeftMulitText.push(textData);}else if(this.MultiTextFormat==3){var obj={Data:item.Message[0],X:left,Y:yText,TextBaseLine:textBaseline,IsLeft:true,Item:item,TextPadding:this.YTextPadding[0]};this.DrawMultiLineText(obj);}}else{if(item.Font!=null)this.Canvas.font=item.Font;var xText=left;if(leftExtendLine&&leftExtendLine.Width>1){var lineLength=leftExtendLine.Width;if(leftExtendLine.Color)this.Canvas.strokeStyle=leftExtendLine.Color;else this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText-lineLength,yFixed);this.Canvas.stroke();xText-=lineLength;}rtLeft=this.GetTextTopBottom(textBaseline,yText);if(!rtPreLeft||rtLeft&&!this.IsTextTopBottomOverlap(rtLeft,rtPreLeft)){if(leftExtendText&&leftExtendText.Align===1){this.Canvas.textAlign="left";this.Canvas.fillText(item.Message[0],this.YTextPadding[0],yText+yOffset);}else{this.Canvas.textAlign="right";this.Canvas.fillText(item.Message[0],xText-this.YTextPadding[0],yText+yOffset);rtPreLeft=rtLeft;}}}}//右边 坐标信息 间距小于10 不画坐标
2392
2393
  if(item.Message[1]!=null&&isDrawRight){var yOffset=0;if(IFrameSplitOperator.IsNonEmptyArray(item.YOffset))//文字Y轴偏移
2393
2394
  {var offsetItem=item.YOffset[1];if(offsetItem&&IFrameSplitOperator.IsNumber(offsetItem.Offset))yOffset=offsetItem.Offset;}if(item.Font!=null)this.Canvas.font=item.Font;var xText=right;if(item.LineType==3){var lineLength=this.ShortYLineLength*GetDevicePixelRatio();this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText+lineLength,yFixed);this.Canvas.stroke();xText+=lineLength;}//右侧延长线
2394
- if(rightExtendLine&&rightExtendLine.Width>1){var lineLength=rightExtendLine.Width;if(rightExtendLine.Color)this.Canvas.strokeStyle=rightExtendLine.Color;else this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText+lineLength,yFixed);this.Canvas.stroke();xText+=lineLength+2;}this.Canvas.textAlign="left";if(Array.isArray(item.Message[1])){if(this.MultiTextFormat==1)//显示1行 格式:价格/百分比
2395
- {if(item.ExtendData){if(item.ExtendData.Font)this.Canvas.font=item.ExtendData.Font;}var textData={Text:[{Text:item.Message[1][0],Width:this.Canvas.measureText(item.Message[1][0]).width},{Text:item.Message[1][1],Width:this.Canvas.measureText(item.Message[1][1]).width}],X:xText+2,Y:yText,TextBaseline:this.Canvas.textBaseline,Item:item};aryMultiText.push(textData);}else if(this.MultiTextFormat==2)//显示2行
2395
+ if(rightExtendLine&&rightExtendLine.Width>1){var lineLength=rightExtendLine.Width;if(rightExtendLine.Color)this.Canvas.strokeStyle=rightExtendLine.Color;else this.Canvas.strokeStyle=item.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(xText,yFixed);this.Canvas.lineTo(xText+lineLength,yFixed);this.Canvas.stroke();xText+=lineLength+2;}this.Canvas.textAlign="left";if(Array.isArray(item.Message[1])){if(this.MultiTextFormat==1)//显示1行 格式如:价格/百分比
2396
+ {var textData=this.CreateMulitCoordinateItem(item.Message[1],xText+2,yText,this.Canvas.textBaseline,item);aryMultiText.push(textData);}else if(this.MultiTextFormat==2)//显示2行
2396
2397
  {this.Canvas.fillText(item.Message[1][0],xText+this.YTextPadding[1],yText);var lineHeight=this.Canvas.measureText('M').width;if(itemHeight>lineHeight*2)this.Canvas.fillText(item.Message[1][1],xText+this.YTextPadding[1],yText+lineHeight);}else if(this.MultiTextFormat==3){var obj={Data:item.Message[1],X:xText,Y:yText,TextBaseLine:textBaseline,IsLeft:false,Item:item,TextPadding:this.YTextPadding[1]};this.DrawMultiLineText(obj);}else//显示第1行
2397
2398
  {var text=item.Message[1][0];if(item.TextColor2)this.Canvas.fillStyle=item.TextColor2;if(rightExtendText&&rightExtendText.Align===2&&this.YRightTextInfo)//右对齐
2398
2399
  {this.Canvas.textAlign="right";var xRight=this.YRightTextInfo.MainTextWidth+right-this.YTextPadding[1];this.Canvas.fillText(text,xRight,yText);}else{this.Canvas.fillText(text,xText+this.YTextPadding[1],yText);}}}else{//计算显示的区域
2399
2400
  rtRight=this.GetTextTopBottom(textBaseline,yText);if(!rtPreRight||rtRight&&!this.IsTextTopBottomOverlap(rtRight,rtPreRight)){if(item.TextColor2)this.Canvas.fillStyle=item.TextColor2;if(rightExtendText&&rightExtendText.Align===2&&this.YRightTextInfo)//右对齐
2400
- {this.Canvas.textAlign="right";var xRight=this.YRightTextInfo.MainTextWidth+right-this.YTextPadding[1];this.Canvas.fillText(item.Message[1],xRight,yText+yOffset);}else{this.Canvas.fillText(item.Message[1],xText+this.YTextPadding[1],yText+yOffset);}rtPreRight=rtRight;}}}yPrev=y;}if(IFrameSplitOperator.IsNonEmptyArray(aryMultiText)&&this.MultiTextFormat==1)this.DrawHorizontalMuText(aryMultiText);if(isDrawRight&&this.IsDrawRightBorder&&this.YRightTextInfo){var xRight=this.YRightTextInfo.MainTextWidth+right;xLine=ToFixedPoint(xRight);this.Canvas.strokeStyle=this.PenBorder;this.Canvas.beginPath();this.Canvas.moveTo(xLine,top);this.Canvas.lineTo(xLine,bottom);this.Canvas.stroke();if(IFrameSplitOperator.IsNonEmptyArray(this.YRightTextInfo.AryOverlayWidth)){this.Canvas.beginPath();for(var i=0;i<this.YRightTextInfo.AryOverlayWidth.length;++i){var width=this.YRightTextInfo.AryOverlayWidth[i];xRight+=width;xLine=ToFixedPoint(xRight);this.Canvas.moveTo(xLine,top);this.Canvas.lineTo(xLine,bottom);}this.Canvas.stroke();}}};//多行文字刻度输出 obj={ Data:, X:, Y:, TextBaseLine:, IsLeft:, Item:刻度数据 }
2401
+ {this.Canvas.textAlign="right";var xRight=this.YRightTextInfo.MainTextWidth+right-this.YTextPadding[1];this.Canvas.fillText(item.Message[1],xRight,yText+yOffset);}else{this.Canvas.fillText(item.Message[1],xText+this.YTextPadding[1],yText+yOffset);}rtPreRight=rtRight;}}}yPrev=y;}if(IFrameSplitOperator.IsNonEmptyArray(aryLeftMulitText)&&this.MultiTextFormat==1)this.DrawMultiCoordinateLeftText(aryLeftMulitText);if(IFrameSplitOperator.IsNonEmptyArray(aryMultiText)&&this.MultiTextFormat==1)this.DrawMultiCoordinateRightText(aryMultiText);if(isDrawRight&&this.IsDrawRightBorder&&this.YRightTextInfo){var xRight=this.YRightTextInfo.MainTextWidth+right;xLine=ToFixedPoint(xRight);this.Canvas.strokeStyle=this.PenBorder;this.Canvas.beginPath();this.Canvas.moveTo(xLine,top);this.Canvas.lineTo(xLine,bottom);this.Canvas.stroke();if(IFrameSplitOperator.IsNonEmptyArray(this.YRightTextInfo.AryOverlayWidth)){this.Canvas.beginPath();for(var i=0;i<this.YRightTextInfo.AryOverlayWidth.length;++i){var width=this.YRightTextInfo.AryOverlayWidth[i];xRight+=width;xLine=ToFixedPoint(xRight);this.Canvas.moveTo(xLine,top);this.Canvas.lineTo(xLine,bottom);}this.Canvas.stroke();}}};this.CreateMulitCoordinateItem=function(aryData,x,y,textBaseline,data){var coordinateItem={AryText:[],X:x,Y:y,TextBaseline:textBaseline,Item:data};for(var i=0;i<aryData.length;++i){var item=aryData[i];if(item.Font)this.Canvas.font=item.Font;var textWidth=0;if(item.Text)textWidth=this.Canvas.measureText(item.Text).width;coordinateItem.AryText.push({Width:textWidth,Item:item});}return coordinateItem;};this.GetMulitCoordinateItemTextWidth=function(aryData){var total=0;for(var i=0;i<aryData.length;++i){var item=aryData[i];if(item.Font)this.Canvas.font=item.Font;var width=this.Canvas.measureText(item.Text).width;total+=width;}return total;};//多行文字刻度输出 obj={ Data:, X:, Y:, TextBaseLine:, IsLeft:, Item:刻度数据 }
2401
2402
  this.DrawMultiLineText=function(obj){var lineSpacing=2;var lineHeight=this.Canvas.measureText('擎').width;var lineCount=obj.Data.length;var textHeight=lineHeight*lineCount+lineSpacing*(lineCount-1);var yText=obj.Y;if(obj.Item.Font!=null)this.Canvas.font=obj.Item.Font;if(obj.IsLeft){this.Canvas.textAlign="right";var xText=obj.X-obj.TextPadding;}else{this.Canvas.textAlign="left";var xText=obj.X+obj.TextPadding;}var textBaseline=this.Canvas.textBaseline;//备份下原来的对齐方式
2402
2403
  this.Canvas.textBaseline='top';if(obj.TextBaseLine==1)//middle
2403
2404
  {yText-=textHeight/2;}else if(obj.TextBaseLine==0)//top
2404
2405
  {}else if(obj.TextBaseLine==2)//bottom
2405
2406
  {yText-=textHeight;}for(var i=0;i<obj.Data.length;++i){var item=obj.Data[i];var text=item.Text;var backupTextColor=null;if(item.Color){backupTextColor=this.Canvas.fillStyle;this.Canvas.fillStyle=item.Color;}this.Canvas.fillText(text,xText,yText);yText+=lineHeight+lineSpacing;if(backupTextColor)this.Canvas.fillStyle=backupTextColor;}this.Canvas.textBaseline=textBaseline;//还原对齐方式
2406
2407
  };//上下区域是否重叠
2407
- this.IsTextTopBottomOverlap=function(rt,rt2){if(rt2.Top>=rt.Top&&rt2.Top<=rt.Bottom)return true;if(rt2.Bottom>=rt.Top&&rt2.Bottom<=rt.Bottom)return true;return false;};this.GetTextTopBottom=function(textBaseline,yText){var rtRight=null;var textHeight=this.Canvas.measureText('擎').width;if(textBaseline==0){rtRight={Top:yText,Bottom:yText+textHeight};}else if(textBaseline==1){rtRight={Top:yText-textHeight/2};rtRight.Bottom=rtRight.Top+textHeight;}else if(textBaseline==2){rtRight={Bottom:yText};rtRight.Top=rtRight.Bottom-textHeight;}return rtRight;};this.DrawHorizontalMuText=function(aryText){var maxWidth=[null,null];for(var i=0;i<aryText.length;++i){var item=aryText[i];var width=item.Text[0].Width;if(!IFrameSplitOperator.IsNumber(maxWidth[0]))maxWidth[0]=width;else if(maxWidth[0]<width)maxWidth[0]=width;width=item.Text[1].Width;if(!IFrameSplitOperator.IsNumber(maxWidth[1]))maxWidth[1]=width;else if(maxWidth[1]<width)maxWidth[1]=width;}for(var i=0;i<aryText.length;++i){var item=aryText[i];var message=item.Item;this.Canvas.textBaseline=item.TextBaseline;if(message.ExtendData&&message.ExtendData.Font)this.Canvas.font=message.ExtendData.Font;else if(message.Font)this.Canvas.font=message.Font;if(message.ExtendData&&message.ExtendData.PriceColor)this.Canvas.fillStyle=message.ExtendData.PriceColor;else this.Canvas.fillStyle=message.TextColor;this.Canvas.textAlign="right";var x=item.X+maxWidth[1];this.Canvas.fillText(item.Text[1].Text,x,item.Y);if(message.ExtendData&&message.ExtendData.SplitColor)this.Canvas.fillStyle=message.ExtendData.SplitColor;else this.Canvas.fillStyle=message.TextColor;this.Canvas.textAlign="left";var splitWidth=this.Canvas.measureText('/').width;this.Canvas.fillText('/',x,item.Y);if(message.ExtendData&&message.ExtendData.PercentageColor)this.Canvas.fillStyle=message.ExtendData.PercentageColor;else this.Canvas.fillStyle=message.TextColor;this.Canvas.textAlign="right";var x=item.X+maxWidth[1]+maxWidth[0]+splitWidth;this.Canvas.fillText(item.Text[0].Text,x,item.Y);var textWidth=maxWidth[1]+maxWidth[0]+splitWidth*4;if(this.RightTextMaxWidth<textWidth)this.RightTextMaxWidth=textWidth;}};//画Y轴Message[2,3]两个内部刻度
2408
+ this.IsTextTopBottomOverlap=function(rt,rt2){if(rt2.Top>=rt.Top&&rt2.Top<=rt.Bottom)return true;if(rt2.Bottom>=rt.Top&&rt2.Bottom<=rt.Bottom)return true;return false;};this.GetTextTopBottom=function(textBaseline,yText){var rtRight=null;var textHeight=this.Canvas.measureText('擎').width;if(textBaseline==0){rtRight={Top:yText,Bottom:yText+textHeight};}else if(textBaseline==1){rtRight={Top:yText-textHeight/2};rtRight.Bottom=rtRight.Top+textHeight;}else if(textBaseline==2){rtRight={Bottom:yText};rtRight.Top=rtRight.Bottom-textHeight;}return rtRight;};//绘制多重坐标刻度文字 左侧
2409
+ this.DrawMultiCoordinateLeftText=function(aryText){var aryMaxWidth=[];for(var i=0,j=0;i<aryText.length;++i){var item=aryText[i];for(var j=0;j<item.AryText.length;++j){var textItem=item.AryText[j];if(!IFrameSplitOperator.IsNumber(aryMaxWidth[j])||aryMaxWidth[j]<textItem.Width)aryMaxWidth[j]=textItem.Width;}}this.Canvas.textAlign="right";for(var i=0;i<aryText.length;++i){var item=aryText[i];var message=item.Item;var x=item.X;this.Canvas.textBaseline=item.TextBaseline;for(var j=0;j<item.AryText.length;++j){var textItem=item.AryText[j];var subText=textItem.Item;if(subText&&subText.Text){if(subText.Font)this.Canvas.font=subText.Font;//字体
2410
+ else if(message.Font)this.Canvas.font=message.Font;if(subText.Color)this.Canvas.fillStyle=subText.Color;//颜色
2411
+ else this.Canvas.fillStyle=message.TextColor;this.Canvas.fillText(subText.Text,x,item.Y);}x-=aryMaxWidth[j];}}};//绘制多重坐标刻度文字 右侧
2412
+ this.DrawMultiCoordinateRightText=function(aryText){var aryMaxWidth=[];for(var i=0,j=0;i<aryText.length;++i){var item=aryText[i];for(var j=0;j<item.AryText.length;++j){var textItem=item.AryText[j];if(!IFrameSplitOperator.IsNumber(aryMaxWidth[j])||aryMaxWidth[j]<textItem.Width)aryMaxWidth[j]=textItem.Width;}}this.Canvas.textAlign="right";for(var i=0;i<aryText.length;++i){var item=aryText[i];var message=item.Item;var x=item.X;this.Canvas.textBaseline=item.TextBaseline;for(var j=0;j<item.AryText.length;++j){var textItem=item.AryText[j];var subText=textItem.Item;if(subText&&subText.Text){if(subText.Font)this.Canvas.font=subText.Font;//字体
2413
+ else if(message.Font)this.Canvas.font=message.Font;if(subText.Color)this.Canvas.fillStyle=subText.Color;//颜色
2414
+ else this.Canvas.fillStyle=message.TextColor;x+=aryMaxWidth[j];this.Canvas.fillText(subText.Text,x,item.Y);}}}};//画Y轴Message[2,3]两个内部刻度
2408
2415
  this.DrawInsideClientHorizontal=function(){var border=this.GetBorder();if(border.DayBorder&&IFrameSplitOperator.IsNonEmptyArray(border.DayBorder)){var item=border.DayBorder[0];var left=item.LeftEx;var item=border.DayBorder[border.DayBorder.length-1];var right=item.RightEx;var bottom=border.Bottom;var top=border.TopTitle;}else{var left=border.LeftEx;var right=border.RightEx;var bottom=border.Bottom;var top=border.TopTitle;}var pixelTatio=GetDevicePixelRatio();var yPrev=null;//上一个坐标y的值
2409
2416
  var yInsideText=null;for(var i=this.HorizontalInfo.length-1;i>=0;--i)//从上往下画分割线
2410
2417
  {var item=this.HorizontalInfo[i];var y=this.GetYFromData(item.Value);if(y!=null&&yPrev!=null&&Math.abs(y-yPrev)<this.MinYDistance)continue;//两个坐标在近了 就不画了
@@ -2471,10 +2478,9 @@ this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(ToFixedPoint(y),le
2471
2478
  if(this.IsHScreen){var borderTop=this.ChartBorder.Top;var borderBottom=this.ChartBorder.Bottom;var isDrawLeft=borderTop>10*pixelTatio&&this.IsShowYText[0]===true&&this.YTextPosition[0]!=2;//var isDrawRight=borderBottom>10*pixelTatio && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
2472
2479
  var isDrawRight=this.IsShowRightHorizontal();}else{var borderRight=this.ChartBorder.Right;var borderLeft=this.ChartBorder.Left;var isDrawLeft=borderLeft>10&&this.IsShowYText[0]===true&&this.YTextPosition[0]!=2;//var isDrawRight=borderRight>10 && this.IsShowYText[1]===true && this.YTextPosition[1]!=2;
2473
2480
  var isDrawRight=this.IsShowRightHorizontal();}if(!isDrawRight&&!isDrawLeft)return null;var width={Left:null,Right:null};var rightExtendWidth=0;var isYPercentage=false;//是否是百分比坐标
2474
- if(this.YSplitOperator&&this.YSplitOperator.CoordinateType==1)isYPercentage=true;var leftExtendLineWidth=0;var rightExtendLineWidth=0;if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){if(this.YLineExtend[0]&&this.YLineExtend[0].Width>1)leftExtendLineWidth=this.YLineExtend[0].Width;if(this.YLineExtend[1]&&this.YLineExtend[1].Width>1)rightExtendLineWidth=this.YLineExtend[1].Width;}for(var i=0;i<this.HorizontalInfo.length;++i){var textWidth=null;var item=this.HorizontalInfo[i];if(!item)continue;if(item.Font!=null)this.Canvas.font=item.Font;if(item.Message[0]!=null&&isDrawLeft){if(Array.isArray(item.Message[0])){textWidth=this.GetMulitTextMaxWidth(item.Message[0]);}else{textWidth=this.Canvas.measureText(item.Message[0]).width;}if(width.Left==null||width.Left<textWidth)width.Left=textWidth;//JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[0]} ${textWidth}`);
2475
- }if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;if(Array.isArray(item.Message[1])){if(this.MultiTextFormat==1&&IFrameSplitOperator.IsNonEmptyArray(item.Message[1]))//显示1行 格式:价格/百分比
2476
- {if(item.ExtendData&&item.ExtendData.Font)this.Canvas.font=item.ExtendData.Font;var width1=this.Canvas.measureText(item.Message[1][0]).width;var width2=this.Canvas.measureText(item.Message[1][1]).width;var width3=this.Canvas.measureText('/').width;textWidth=width1+width3;if(rightExtendWidth<width2)rightExtendWidth=width2;//JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[1][1]}/${item.Message[1][0]} ${textWidth}, ${rightExtendWidth}`);
2477
- }else if(this.MultiTextFormat==2)//显示2行
2481
+ if(this.YSplitOperator&&this.YSplitOperator.CoordinateType==1)isYPercentage=true;var leftExtendLineWidth=0;var rightExtendLineWidth=0;if(IFrameSplitOperator.IsNonEmptyArray(this.YLineExtend)){if(this.YLineExtend[0]&&this.YLineExtend[0].Width>1)leftExtendLineWidth=this.YLineExtend[0].Width;if(this.YLineExtend[1]&&this.YLineExtend[1].Width>1)rightExtendLineWidth=this.YLineExtend[1].Width;}for(var i=0;i<this.HorizontalInfo.length;++i){var textWidth=null;var item=this.HorizontalInfo[i];if(!item)continue;if(item.Font!=null)this.Canvas.font=item.Font;if(item.Message[0]!=null&&isDrawLeft){if(Array.isArray(item.Message[0])){if(this.MultiTextFormat==1)textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[0]);else textWidth=this.GetMulitTextMaxWidth(item.Message[0]);}else{textWidth=this.Canvas.measureText(item.Message[0]).width;}if(width.Left==null||width.Left<textWidth)width.Left=textWidth;//JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[0]} ${textWidth}`);
2482
+ }if(item.Message[1]!=null&&isDrawRight){if(item.Font!=null)this.Canvas.font=item.Font;if(Array.isArray(item.Message[1])){if(this.MultiTextFormat==1)//显示1行 格式:价格/百分比
2483
+ {textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[1]);}else if(this.MultiTextFormat==2)//显示2行
2478
2484
  {textWidth=this.Canvas.measureText(item.Message[1][0]).width;var textWidth2=this.Canvas.measureText(item.Message[1][1]).width;if(textWidth<textWidth2)textWidth=textWidth2;}else if(this.MultiTextFormat==3){textWidth=this.GetMulitTextMaxWidth(item.Message[1]);}else//显示第1行
2479
2485
  {textWidth=this.Canvas.measureText(item.Message[1][0]).width;if(isYPercentage){var perTextWidth=this.Canvas.measureText("-00.00%").width;if(perTextWidth>textWidth)textWidth=perTextWidth;}}}else{textWidth=this.Canvas.measureText(item.Message[1]).width;}if(width.Right==null||width.Right<textWidth)width.Right=textWidth;}}if(IFrameSplitOperator.IsNumber(width.Right))width.Right+=rightExtendWidth;if(IFrameSplitOperator.IsNumber(width.Left))width.Left+=this.YTextPadding[0]+leftExtendLineWidth;if(IFrameSplitOperator.IsNumber(width.Right))width.Right+=this.YTextPadding[1]+rightExtendLineWidth;return{TextWidth:width};};this.ClearToolbar=function(){if(!this.ToolbarID)return;var divToolbar=document.getElementById(this.ToolbarID);if(!divToolbar)return;this.ChartBorder.UIElement.parentNode.removeChild(divToolbar);this.ToolbarRect=null;};this.HideToolbar=function(){if(!this.ToolbarID)return;this.ToolbarRect=null;var divToolbar=document.getElementById(this.ToolbarID);if(!divToolbar)return;if(divToolbar.style.display!='none')divToolbar.style.display='none';};this.GetMainOverlayFrame=function(){if(!this.FrameData||!this.FrameData.SubFrameItem)return null;var subFrame=this.FrameData.SubFrameItem;var leftFrame=null,rightFrame=null;for(var i=0;i<subFrame.OverlayIndex.length;++i){var item=subFrame.OverlayIndex[i];var overlayFrame=item.Frame;if(overlayFrame.IsShowMainFrame==2)rightFrame=overlayFrame;else if(overlayFrame.IsShowMainFrame==1)leftFrame=overlayFrame;}if(!leftFrame&&!rightFrame)return null;return[leftFrame,rightFrame];};}function MinuteFrame(){this.newMethod=AverageWidthFrame;//派生
2480
2486
  this.newMethod();delete this.newMethod;this.ClassName="MinuteFrame";this.DataWidth=1*GetDevicePixelRatio();this.DistanceWidth=1*GetDevicePixelRatio();this.MinuteCount=243;//每天的分钟个数
@@ -5339,7 +5345,7 @@ this.DefaultSplitType=0;this.DefaultYMaxMin;//{ Max:null, Min:null }; //指
5339
5345
  this.FixedYMaxMin;//{ Max, Min} 固定Y轴最大最小值
5340
5346
  this.EnableZoomUpDown=false;//上下左右拖拽
5341
5347
  this.LastMaxMin;//当前显示的最高最低范围
5342
- this.PercentageTextFormat=0;//0=显示第1行 1=显示2行 2=单行格式: 价格/百分比
5348
+ this.PercentageTextFormat=0;//0=显示第1行 1=单行格式: 价格/百分比, 2=显示2行 3=2行显示(json格式)
5343
5349
  this.IsEnableDragY=function(){return this.CoordinateType==0||this.CoordinateType==1;};this.Operator=function(){var splitData={};splitData.Max=this.Frame.HorizontalMax;splitData.Min=this.Frame.HorizontalMin;splitData.Count=this.SplitCount;if(this.Frame.YMaxMin)//原始的数据范围
5344
5350
  {var item=this.Frame.YMaxMin;if(IFrameSplitOperator.IsNumber(item.Max)&&IFrameSplitOperator.IsNumber(item.Min)){splitData.Max=item.Max;splitData.Min=item.Min;}}if(splitData.Max==splitData.Min)//如果一样上下扩大下
5345
5351
  {splitData.Max+=splitData.Max*0.01;splitData.Min-=splitData.Min*0.01;}var isFixedMaxMin=this.FixedYMaxMin&&IFrameSplitOperator.IsNumber(this.FixedYMaxMin.Max)&&IFrameSplitOperator.IsNumber(this.FixedYMaxMin.Min);if(isFixedMaxMin){splitData.Max=this.FixedYMaxMin.Max;splitData.Min=this.FixedYMaxMin.Min;//JSConsole.Chart.Log(`[FrameSplitKLinePriceY::Operator] FixedYMaxMin.Max=${this.FixedYMaxMin.Max} FixedYMaxMin.Min=${this.FixedYMaxMin.Min} `);
@@ -5361,12 +5367,11 @@ if(this.SplitLogarithmic(splitData,defaultfloatPrecision)){bFilter=false;}else{t
5361
5367
  */this.ReservedHeight(splitData);//预留高度
5362
5368
  JSConsole.Chart.Log('[FrameSplitKLinePriceY::Operator] fixed . Max='+splitData.Max+' Min='+splitData.Min+' Count='+splitData.Count);if(this.GetEventCallback){var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_SPLIT_YCOORDINATE);if(event&&event.Callback){var data={ID:this.Frame.Identify,Frame:this.Frame};event.Callback(event,data,this);}}};this.SplitTickData=function(splitData,floatPrecision){switch(this.CoordinateType){case 1://百分比
5363
5369
  if(!this.SplitPercentage(splitData,floatPrecision,splitData.IsFixedMaxMin)){this.SplitDefault(splitData,floatPrecision,splitData.IsFixedMaxMin);}else{this.Frame.MultiTextFormat=this.PercentageTextFormat;splitData.IsFilter=false;}break;default:if(this.SplitType==3){this.SplitTickPrice(splitData,floatPrecision);}else{this.SplitDefault(splitData,floatPrecision,splitData.IsFixedMaxMin);}}};this.SplitTickPrice=function(splitData,floatPrecision){var aryPrice=this.KLineChart.GetAllPrice();this.Frame.HorizontalInfo=[];for(var i in aryPrice){var value=aryPrice[i];this.Frame.HorizontalInfo[i]=new CoordinateInfo();this.Frame.HorizontalInfo[i].Value=value;if(this.IsShowLeftText)this.Frame.HorizontalInfo[i].Message[0]=value.toFixed(floatPrecision);if(this.IsShowRightText)this.Frame.HorizontalInfo[i].Message[1]=value.toFixed(floatPrecision);}};this.SplitPercentage=function(splitData,floatPrecision,isFixedMaxMin)//百分比坐标
5364
- {var firstOpenPrice=this.GetFirstOpenPrice();if(!IFrameSplitOperator.IsNumber(firstOpenPrice))return false;splitData.Max=(splitData.Max-firstOpenPrice)/firstOpenPrice;splitData.Min=(splitData.Min-firstOpenPrice)/firstOpenPrice;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);if(!isFixedMaxMin)this.IntegerCoordinateSplit2(splitData);var minValue=(1+splitData.Min)*firstOpenPrice;var maxValue=(1+splitData.Max)*firstOpenPrice;var textColor;if(g_JSChartResource.Frame&&g_JSChartResource.Frame.PercentageText){var item=g_JSChartResource.Frame.PercentageText;textColor={PriceColor:item.PriceColor,PercentageColor:item.PercentageColor,SplitColor:item.SplitColor,Font:item.Font};}var aryHorizontal=[];for(var value=0;value<=splitData.Max;value+=splitData.Interval){var price=(value+1)*firstOpenPrice;var item=new CoordinateInfo();item.Value=price;if(this.IsShowLeftText)item.Message[0]=price.toFixed(floatPrecision);//左边价格坐标
5365
- if(this.IsShowRightText){var strPrice=price.toFixed(floatPrecision);var text=(value*100).toFixed(2);//右边百分比
5366
- text=IFrameSplitOperator.RemoveZero(text);text+='%';item.Message[1]=[text,strPrice];item.ExtendData=textColor;}aryHorizontal.push(item);}for(var value=-splitData.Interval;value>=splitData.Min;value-=splitData.Interval){var price=(value+1)*firstOpenPrice;if(price<minValue||price>maxValue)continue;var item=new CoordinateInfo();item.Value=price;if(this.IsShowLeftText)item.Message[0]=price.toFixed(floatPrecision);//左边价格坐标
5367
- if(this.IsShowRightText){var strPrice=price.toFixed(floatPrecision);var text=(value*100).toFixed(2);//右边百分比
5368
- text=IFrameSplitOperator.RemoveZero(text);text+='%';item.Message[1]=[text,strPrice];item.ExtendData=textColor;}aryHorizontal.push(item);}aryHorizontal.sort(function(left,right){return left.Value-right.Value;});this.Frame.HorizontalInfo=aryHorizontal;splitData.Min=minValue;//最大最小值调整
5369
- splitData.Max=maxValue;return true;};//等比坐标 当前屏最后第2根K线的收盘加为基准, 上下涨幅10%分割
5370
+ {var firstOpenPrice=this.GetFirstOpenPrice();if(!IFrameSplitOperator.IsNumber(firstOpenPrice))return false;splitData.Max=(splitData.Max-firstOpenPrice)/firstOpenPrice;splitData.Min=(splitData.Min-firstOpenPrice)/firstOpenPrice;splitData.Interval=(splitData.Max-splitData.Min)/(splitData.Count-1);if(!isFixedMaxMin)this.IntegerCoordinateSplit2(splitData);var minValue=(1+splitData.Min)*firstOpenPrice;var maxValue=(1+splitData.Max)*firstOpenPrice;var textColor;if(g_JSChartResource.Frame&&g_JSChartResource.Frame.PercentageText){var item=g_JSChartResource.Frame.PercentageText;textColor={PriceColor:item.PriceColor,PercentageColor:item.PercentageColor,SplitColor:item.SplitColor,Font:item.Font};}var aryHorizontal=[];for(var value=0;value<=splitData.Max;value+=splitData.Interval){var price=(value+1)*firstOpenPrice;var item=new CoordinateInfo();item.Value=price;this.FormatPercentageItem(item,value,floatPrecision,textColor);aryHorizontal.push(item);}for(var value=-splitData.Interval;value>=splitData.Min;value-=splitData.Interval){var price=(value+1)*firstOpenPrice;if(price<minValue||price>maxValue)continue;var item=new CoordinateInfo();item.Value=price;this.FormatPercentageItem(item,value,floatPrecision,textColor);aryHorizontal.push(item);}aryHorizontal.sort(function(left,right){return left.Value-right.Value;});this.Frame.HorizontalInfo=aryHorizontal;splitData.Min=minValue;//最大最小值调整
5371
+ splitData.Max=maxValue;return true;};this.FormatPercentageItem=function(item,percentage,floatPrecision,textColor){var price=item.Value;var strPrice=price.toFixed(floatPrecision);if(this.IsShowLeftText)item.Message[0]=strPrice;//左边价格坐标
5372
+ if(this.IsShowRightText)//右侧 价格/百分比
5373
+ {var strPrcentage=IFrameSplitOperator.RemoveZero(percentage.toFixed(2))+'%';//右边百分比
5374
+ if(this.PercentageTextFormat==1)item.Message[1]=[{Text:strPrice,Color:textColor.PriceColor},{Text:"/",Color:textColor.PercentageColor},{Text:strPrcentage,Color:textColor.SplitColor}];else if(this.PercentageTextFormat==3)item.Message[1]=[{Text:strPrice,Color:textColor.PriceColor},{Text:strPrcentage,Color:textColor.PercentageColor}];else if(this.PercentageTextFormat==2)item.Message[1]=[strPrcentage,strPrice];else item.Message[1]=strPrcentage;}};//等比坐标 当前屏最后第2根K线的收盘加为基准, 上下涨幅10%分割
5370
5375
  this.SplitIncrease=function(splitData,floatPrecision){var basePrice=this.GetLast2ndClose();if(!IFrameSplitOperator.IsNumber(basePrice))return false;this.IntegerCoordinateSplit(splitData);this.Frame.HorizontalInfo=[];var increase=g_JSChartResource.FrameSplitIncrease.Increase;var aryHorizontal=[];for(var price=basePrice;price<splitData.Max;price=price*(1+increase)){var item=new CoordinateInfo();item.Value=price;var text=price.toFixed(floatPrecision);if(this.IsShowLeftText)item.Message[0]=text;if(this.IsShowRightText)item.Message[1]=text;aryHorizontal.push(item);}for(var price=basePrice*0.9;price>splitData.Min;price=price*(1-increase)){var item=new CoordinateInfo();item.Value=price;var text=price.toFixed(floatPrecision);if(this.IsShowLeftText)item.Message[0]=text;if(this.IsShowRightText)item.Message[1]=text;aryHorizontal.push(item);}this.Frame.HorizontalInfo=aryHorizontal;return true;};//等分坐标:以画面显示的最高价、最低价为基准,对这个区域N等分,显示分割的数值线
5371
5376
  this.SplitAverage=function(splitData,floatPrecision){var max=splitData.Max;var min=splitData.Min;//this.IntegerCoordinateSplit(splitData);
5372
5377
  this.Frame.HorizontalInfo=[];var count=g_JSChartResource.FrameSplitAverage.Count;var interval=(max-min)/count;for(var i=0;i<=count;++i){var item=new CoordinateInfo();item.Value=min+interval*i;var text=item.Value.toFixed(floatPrecision);if(this.IsShowLeftText)item.Message[0]=text;if(this.IsShowRightText)item.Message[1]=text;this.Frame.HorizontalInfo[i]=item;}};this.SplitGoldenSection=function(splitData,floatPrecision){var max=splitData.Max;var min=splitData.Min;//this.IntegerCoordinateSplit(splitData);
@@ -5497,7 +5502,7 @@ var width=this.Frame.ChartBorder.GetChartWidth();//画布的宽度
5497
5502
  var isPhoneModel=width<450*pixelTatio;JSConsole.Chart.Log('[FrameSplitMinutePriceY]'+'max='+max+' min='+min+' isPhoneModel='+isPhoneModel);var showCount=this.SplitCount;var distance=(max-min)/(showCount-1);var minDistance=[1,0.1,0.01,0.001,0.0001];var defaultfloatPrecision=GetfloatPrecision(this.Symbol);if(isPhoneModel&&MARKET_SUFFIX_NAME.IsSHSZIndex(this.Symbol))defaultfloatPrecision=0;//手机端指数不显示小数位数,太长了
5498
5503
  if(distance<minDistance[defaultfloatPrecision]&&!isFixedMaxMin){distance=minDistance[defaultfloatPrecision];max=this.YClose+distance*(showCount-1)/2;min=this.YClose-distance*(showCount-1)/2;}var aryCoordinate=[];var extendValue=distance*0.5;for(var price=this.YClose,i=0;price<=max+extendValue&&i<30;price+=distance,++i){var coordinate=new CoordinateInfo();coordinate.Value=price;this.FormatCoordinate(coordinate,defaultfloatPrecision);aryCoordinate.push(coordinate);}for(var price=this.YClose-distance,i=0;price>=min-extendValue&&i<30;price-=distance,++i){var coordinate=new CoordinateInfo();coordinate.Value=price;this.FormatCoordinate(coordinate,defaultfloatPrecision);aryCoordinate.push(coordinate);}aryCoordinate.sort(function(left,right){return left.Value-right.Value;});this.Frame.HorizontalInfo=aryCoordinate;this.Frame.HorizontalMax=max;this.Frame.HorizontalMin=min;};this.FormatCoordinate=function(coordinate,defaultfloatPrecision){var price=coordinate.Value;var strPrice=price.toFixed(defaultfloatPrecision);//价格刻度字符串
5499
5504
  if(this.IsShowLeftText)coordinate.Message[0]=strPrice;if(IFrameSplitOperator.IsNumber(this.YClose)&&this.YClose!=0){var per=(price/this.YClose-1)*100;if(per>0)coordinate.TextColor=g_JSChartResource.UpTextColor;else if(per<0)coordinate.TextColor=g_JSChartResource.DownTextColor;var strPer=IFrameSplitOperator.FormatValueString(per,2)+'%';if(this.IsShowRightText){if(this.RightTextFormat==1){coordinate.Message[1]=strPrice;}else if(this.RightTextFormat==2)//价格/百分比
5500
- {coordinate.Message[1]=[strPer,strPrice];}else{coordinate.Message[1]=strPer;//百分比
5505
+ {coordinate.Message[1]=[{Text:strPrice},{Text:"/"},{Text:strPer}];}else{coordinate.Message[1]=strPer;//百分比
5501
5506
  }}if(Math.abs(price-this.YClose)<0.00000000001)//小数有精度问题 使用差值
5502
5507
  {coordinate.LineType=2;//中间的线画虚线
5503
5508
  coordinate.TextColor=g_JSChartResource.UnchagneTextColor;if(g_JSChartResource.FrameDotSplitPen)coordinate.LineColor=g_JSChartResource.FrameDotSplitPen;}}};}function FrameSplitMinuteX(){this.newMethod=IFrameSplitOperator;//派生
@@ -12012,7 +12017,7 @@ var result=[];if(ChartData.IsDayPeriod(hqChart.Period,true))//日线
12012
12017
  var result=[];if(ChartData.IsDayPeriod(hqChart.Period,true))//日线
12013
12018
  {var bFill=false;for(var i=0,j=0;i<kData.Data.length;++i){result[i]=0;var kItem=kData.Data[i];var date=kItem.Date;for(j=0;j<data.length;++j){var rangeItem=data[j];if(date>=rangeItem.Start.Date&&date<=rangeItem.End.Date){result[i]=1;bFill=true;break;}}}if(bFill)return result;}else if(ChartData.IsMinutePeriod(hqChart.Period,true))//分钟线
12014
12019
  {var aryRange=[];for(var i=0;i<data.length;++i){var item=data[i];var startDatetime=item.Start.Date*10000;if(IFrameSplitOperator.IsNumber(item.Start.Time))startDatetime+=item.Start.Time;var endDatetime=item.End.Date*10000;if(IFrameSplitOperator.IsNumber(item.End.Time))endDatetime+=item.End.Time;aryRange.push({Start:startDatetime,End:endDatetime});}var bFill=false;for(var i=0,j=0;i<kData.Data.length;++i){result[i]=0;var kItem=kData.Data[i];var date=kItem.Date*10000+kItem.Time;for(j=0;j<aryRange.length;++j){var rangeItem=aryRange[j];if(date>=rangeItem.Start&&date<=rangeItem.End){result[i]=1;bFill=true;break;}}}if(bFill)return result;}return null;};this.FittingMinuteData=function(jsonData,hqChart){var outVar=jsonData.outvar;var date=jsonData.date;var time=jsonData.time;var result=[];for(var i=0;i<outVar.length;++i){var item=outVar[i];var outVarItem={Name:item.name,Type:item.type};if(IFrameSplitOperator.IsBool(item.IsShowTitle))outVarItem.IsShowTitle=item.IsShowTitle;//是否显示指标标题
12015
- if(item.data){outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);if(item.color)outVarItem.Color=item.color;if(item.linewidth>=1)outVarItem.LineWidth=item.linewidth;if(item.isshow==false)outVarItem.IsShow=false;if(item.isexdata==true)outVarItem.IsExData=true;if(item.BreakPoint)outVarItem.BreakPoint=item.BreakPoint;if(item.UpColor)outVarItem.UpColor=item.UpColor;if(item.DownColor)outVarItem.DownColor=item.DownColor;if(IFrameSplitOperator.IsBool(item.isDotLine))outVarItem.IsDotLine=item.isDotLine;if(IFrameSplitOperator.IsNonEmptyArray(item.lineDash))outVarItem.LineDash=item.lineDash;if(IFrameSplitOperator.IsBool(item.isSingleLine))outVarItem.IsSingleLine=item.isSingleLine;if(IFrameSplitOperator.IsNonEmptyArray(item.AryBreakPoint))outVarItem.AryBreakPoint=item.AryBreakPoint;result.push(outVarItem);}else if(item.Draw){var draw=item.Draw;var drawItem={};if(draw.DrawType=='DRAWICON')//图标
12020
+ if(item.data){outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);if(item.color)outVarItem.Color=item.color;if(item.linewidth)outVarItem.LineWidth=item.linewidth;if(item.isshow==false)outVarItem.IsShow=false;if(item.isexdata==true)outVarItem.IsExData=true;if(item.BreakPoint)outVarItem.BreakPoint=item.BreakPoint;if(item.UpColor)outVarItem.UpColor=item.UpColor;if(item.DownColor)outVarItem.DownColor=item.DownColor;if(IFrameSplitOperator.IsBool(item.isDotLine))outVarItem.IsDotLine=item.isDotLine;if(IFrameSplitOperator.IsNonEmptyArray(item.lineDash))outVarItem.LineDash=item.lineDash;if(IFrameSplitOperator.IsBool(item.isSingleLine))outVarItem.IsSingleLine=item.isSingleLine;if(IFrameSplitOperator.IsNonEmptyArray(item.AryBreakPoint))outVarItem.AryBreakPoint=item.AryBreakPoint;result.push(outVarItem);}else if(item.Draw){var draw=item.Draw;var drawItem={};if(draw.DrawType=='DRAWICON')//图标
12016
12021
  {drawItem.Icon=draw.Icon;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWTEXT')//文本
12017
12022
  {drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='STICKLINE')//柱子
12018
12023
  {drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.Width=draw.Width;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.OVERLAY_BARS){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.BarName=draw.BarName;drawItem.BarColor=draw.BarColor;drawItem.LineWidth=draw.LineWidth;drawItem.DrawData=this.FittingMinuteArray(draw.DrawData,date,time,hqChart,1);outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType==SCRIPT_CHART_NAME.CLIP_COLOR_STICK){drawItem.Name=draw.Name;drawItem.Type=draw.Type;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMinuteArray(draw.Data,date,time,hqChart);outVarItem.Draw=drawItem;if(draw.Option)outVarItem.Option=draw.Option;result.push(outVarItem);}else if(draw.DrawType=='MULTI_LINE'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=this.FittingMultiLine(draw.DrawData,date,time,hqChart);for(var k in drawItem.DrawData){this.GetKLineData(drawItem.DrawData[k].Point,hqChart);}outVarItem.Draw=drawItem;if(draw.LineDash)drawItem.LineDash=draw.LineDash;if(draw.Arrow)drawItem.Arrow=draw.Arrow;result.push(outVarItem);}else if(draw.DrawType=='MULTI_POINT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=draw.DrawData;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_TEXT'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData=draw.DrawData;outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='MULTI_SVGICON'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;drawItem.DrawData={Icon:draw.DrawData.Icon,Family:draw.DrawData.Family};outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=='DRAWSVG'){drawItem.Text=draw.Text;drawItem.Name=draw.Name;drawItem.DrawType=draw.DrawType;if(draw.AutoPosition)drawItem.AutoPosition=draw.AutoPosition;if(draw.BuildKeyCallback)drawItem.BuildKeyCallback=draw.BuildKeyCallback;drawItem.DrawData={Data:draw.Data,Family:draw.Family,TextFont:draw.TextFont,EnableTooltip:draw.EnableTooltip,IsDrawFirst:draw.IsDrawFirst};outVarItem.Draw=drawItem;result.push(outVarItem);}else if(draw.DrawType=="MULTI_HTMLDOM")//外部自己创建dom
@@ -12162,7 +12167,7 @@ FrameTitleBGColor:"rgb(0,0,0)",//标题栏背景色
12162
12167
  OverlayIndexTitleBGColor:'rgba(0,0,0,0.7)',//叠加指标背景色
12163
12168
  Frame:{XBottomOffset:2*GetDevicePixelRatio(),//X轴文字向下偏移
12164
12169
  PercentageText://百分比坐标文字颜色
12165
- {PriceColor:'rgb(101,104,112)',PercentageColor:"rgb(101,104,112)",SplitColor:"rgb(101,104,112)",Font:14*GetDevicePixelRatio()+"px 微软雅黑"}},//叠加指标框架
12170
+ {PriceColor:'rgb(220,220,220)',PercentageColor:"rgb(220,220,220)",SplitColor:"rgb(220,220,220)",Font:14*GetDevicePixelRatio()+"px 微软雅黑"}},//叠加指标框架
12166
12171
  OverlayFrame:{BolderPen:'rgb(130,130,130)',//指标边框线
12167
12172
  TitleColor:'rgb(181,181,181)',//指标名字颜色
12168
12173
  TitleFont:11*GetDevicePixelRatio()+'px arial'//指标名字字体
@@ -14322,7 +14327,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
14322
14327
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
14323
14328
  * 版本信息输出
14324
14329
  *
14325
- */var HQCHART_VERSION="1.1.14407";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
14330
+ */var HQCHART_VERSION="1.1.14415";function PrintHQChartVersion(){var logo='\n\n*************************************************************************************************************************************************************************** \n* \n* :%@@- \n* :@@@@- \n* =@@@@ :#@@@ .:+#@@@#=: :=*@@@@@@#+-. *@@@@. \n* :@@@@@ .@@@@@ .#@@@@@@@@@@@- +@@@@@@@@@@@@@+ @@@@@ -%@@* \n* +@@@@% #@@@@# *@@@@@@@@@@@@@@%. =@@@@@@@@@@@@@@@- @@@@@ -@@@@+ \n* %@@@@* @@@@@+ .%@@@@@@@@@@@@@@@@%: #@@@@@@@@@@@@@@@% @@@@# *@@@@= \n* @@@@@= @@@@@- .%@@@@@@@*++*%@@@@@@% .%@@@@@@@%*+==+**= -@@@@+ #@@@@- \n* @@@@@. @@@@@. #@@@@@%= =@@@@@@* %@@@@@@#: *@@@@- :::. .-+*###+: ::: .+##+: -%%@@@@@%%%% \n* .@@@@@ .@@@@@. +@@@@@% .@@@@@@ *@@@@@@: %@@@@: +@@@@@%. :%@@@@@@@@@@: *@@@ :@@@@@* @@@@@@@@@@@@ \n* :@@@@@ :@@@@@ @@@@@% :@@@@@+ @@@@@@: %@@@@-@@@@@@@@@. @@@@@@@@@@@@@. :@@@%-@@@@@@.:@@@@@@@@@@@# \n* -@@@@% -@@@@@ =@@@@@. %@@@@% %@@@@@- %@@@@@@@@@@@@@@* %@@@@@@@@@@@@+ -@@@@@@@@@@# -@@@@@@@@@@@. \n* +@@@@%=========#@@@@% @@@@@# :@@@@@ .@@@@@% @@@@@@@@%@@@@@@@ -%+:. .#@@@@* +@@@@@@@%%@. .::+@@@@#:: \n* #@@@@@@@@@@@@@@@@@@@# .@@@@@ .@@@@@ :@@@@@. @@@@@@#. #@@@@@. -@@@@* #@@@@@@: *@@@@+ \n* %@@@@@@@@@@@@@@@@@@@+ :@@@@@ .@@@@@ -@@@@@ @@@@@+ @@@@@. :@@@@* @@@@@% #@@@@- \n* @@@@@@@@@@@@@@@@@@@@: :@@@@% :@@@@@ +@@@@% -@@@@+ @@@@@ -@@@@+ @@@@@. @@@@@. \n* .@@@@@@@@@@@@@@@@@@@@ :@@@@% -@@@@% *@@@@% #@@@@. @@@@@ .=*#%%%@@@@@= :@@@@# @@@@@. \n* -@@@@@:::::::::=@@@@@ :@@@@@ @@@@@* +@@@@% @@@@@ @@@@% -#@@@@@@@@@@@@: -@@@@* @@@@@ \n* =@@@@% =@@@@% .@@@@@ :@@@@@. -@@@@% @@@@@ .@@@@* +@@@@@@@@@@@@@@. =@@@@+ .@@@@@ \n* +@@@@# +@@@@# @@@@@# %@@@@% :@@@@@ .@@@@% =@@@@= -@@@@@*-:..%@@@@ +@@@@= :@@@@# \n* *@@@@* *@@@@* +@@@@@: #@@@@@+ .@@@@@@ :@@@@% *@@@@- @@@@@. @@@@% #@@@@: =@@@@+ \n* %@@@@= %@@@@+ @@@@@@- .%@@@@@# #@@@@@# :@@@@% #@@@@: @@@@% @@@@* %@@@@. #@@@@- \n* @@@@@- @@@@@= =@@@@@@#=...-*@@@@@@@: @@@@@@%=. :+**. :@@@@* %@@@@. .@@@@* *@@@@= @@@@@ %@@@@+ \n* .@@@@@: .@@@@@: *@@@@@@@@@@@@@@@@@@@# =@@@@@@@@%%%@@@@@@ +@@@@- @@@@@ .@@@@@: :%@@@@@- .@@@@% %@@@@@*+- \n* :@@@@@ :@@@@@ +@@@@@@@@@@@@@@@@@@@# =@@@@@@@@@@@@@@@@% %@@@@ @@@@@ @@@@@@@@@@@@@@@: -@@@@* *@@@@@@@@- \n* =@@@@@ -@@@@@ :@@@@@@@@@@@@@@@@@@@# :@@@@@@@@@@@@@@@% @@@@@ %@@@% #@@@@@@@@@#@@@@. +@@@@- .@@@@@@@@# \n* *@@@@# =@@@@% :#@@@@@@@#: :@@@@@= =@@@@@@@@@@@+. @@@@@ :@@@+ *@@@@@@@- %@@@ *@@@= =@@@@@@@* \n* =++++- -++++= .:::. .=*+: :-=+++=:. ****= .=+. .-++=: :+++ -+=: .-=+=:. \n* \n* \n* HQChart \n* Ver: '+HQCHART_VERSION+' \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ';console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
14326
14331
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
14327
14332
  // BaseIndex:BaseIndex,
14328
14333
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.14408",
3
+ "version": "1.1.14416",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -25470,7 +25470,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
25470
25470
  {
25471
25471
  outVarItem.Data=this.FittingMinuteArray(item.data,date,time,hqChart);
25472
25472
  if (item.color) outVarItem.Color=item.color;
25473
- if (item.linewidth>=1) outVarItem.LineWidth=item.linewidth;
25473
+ if (item.linewidth) outVarItem.LineWidth=item.linewidth;
25474
25474
  if (item.isshow==false) outVarItem.IsShow = false;
25475
25475
  if (item.isexdata==true) outVarItem.IsExData = true;
25476
25476
  if (item.BreakPoint) outVarItem.BreakPoint=item.BreakPoint;
@@ -11712,7 +11712,7 @@ function AverageWidthFrame()
11712
11712
  this.IsShowYLine=true;
11713
11713
  this.YInsideOffset=0;
11714
11714
  this.YTextBaseline=0; //0=居中 1=上部 (目前就支持内部刻度)
11715
- this.MultiTextFormat=0; //多行刻度信息显示模式 0=显示第1行 1=价格/百分比 2=显示2行
11715
+ this.MultiTextFormat=0; //多行刻度信息显示模式 0=显示第1行 1=单行多个文本 2=显示2行 3=多行输出(json格式)
11716
11716
  this.RightTextMaxWidth=0;
11717
11717
 
11718
11718
  this.ShortYLineLength=5;
@@ -12047,6 +12047,7 @@ function AverageWidthFrame()
12047
12047
  var pixelRatio=GetDevicePixelRatio();
12048
12048
  var itemHeight=(border.BottomEx-border.TopEx)/this.HorizontalInfo.length;
12049
12049
  var aryMultiText=[];
12050
+ var aryLeftMulitText=[];
12050
12051
  var rtPreRight, rtRight, rtLeft, rtPreLeft;
12051
12052
  var textBaseline=0; //0=上 1=中 2=下
12052
12053
  for(var i=this.HorizontalInfo.length-1; i>=0; --i) //从上往下画分割线
@@ -12153,7 +12154,12 @@ function AverageWidthFrame()
12153
12154
 
12154
12155
  if (Array.isArray(item.Message[0]))
12155
12156
  {
12156
- if (this.MultiTextFormat==3)
12157
+ if (this.MultiTextFormat==1) //显示1行 格式如:价格/百分比
12158
+ {
12159
+ var textData=this.CreateMulitCoordinateItem(item.Message[0], left-2, yText, this.Canvas.textBaseline, item);
12160
+ aryLeftMulitText.push(textData);
12161
+ }
12162
+ else if (this.MultiTextFormat==3)
12157
12163
  {
12158
12164
  var obj={ Data:item.Message[0], X:left, Y:yText, TextBaseLine:textBaseline, IsLeft:true, Item:item, TextPadding:this.YTextPadding[0] };
12159
12165
  this.DrawMultiLineText(obj);
@@ -12239,25 +12245,9 @@ function AverageWidthFrame()
12239
12245
  this.Canvas.textAlign="left";
12240
12246
  if (Array.isArray(item.Message[1]))
12241
12247
  {
12242
- if (this.MultiTextFormat==1) //显示1行 格式:价格/百分比
12248
+ if (this.MultiTextFormat==1) //显示1行 格式如:价格/百分比
12243
12249
  {
12244
- if (item.ExtendData)
12245
- {
12246
- if (item.ExtendData.Font) this.Canvas.font=item.ExtendData.Font;
12247
- }
12248
-
12249
- var textData=
12250
- {
12251
- Text:
12252
- [
12253
- {Text:item.Message[1][0], Width:this.Canvas.measureText(item.Message[1][0]).width },
12254
- {Text:item.Message[1][1], Width:this.Canvas.measureText(item.Message[1][1]).width }
12255
- ],
12256
- X:xText+2,
12257
- Y:yText,
12258
- TextBaseline:this.Canvas.textBaseline,
12259
- Item:item
12260
- }
12250
+ var textData=this.CreateMulitCoordinateItem(item.Message[1], xText+2, yText, this.Canvas.textBaseline, item);
12261
12251
  aryMultiText.push(textData);
12262
12252
  }
12263
12253
  else if (this.MultiTextFormat==2) //显示2行
@@ -12314,7 +12304,9 @@ function AverageWidthFrame()
12314
12304
  yPrev=y;
12315
12305
  }
12316
12306
 
12317
- if (IFrameSplitOperator.IsNonEmptyArray(aryMultiText) && this.MultiTextFormat==1) this.DrawHorizontalMuText(aryMultiText);
12307
+ if (IFrameSplitOperator.IsNonEmptyArray(aryLeftMulitText) && this.MultiTextFormat==1) this.DrawMultiCoordinateLeftText(aryLeftMulitText);
12308
+ if (IFrameSplitOperator.IsNonEmptyArray(aryMultiText) && this.MultiTextFormat==1) this.DrawMultiCoordinateRightText(aryMultiText);
12309
+
12318
12310
 
12319
12311
  if (isDrawRight && this.IsDrawRightBorder && this.YRightTextInfo)
12320
12312
  {
@@ -12343,6 +12335,41 @@ function AverageWidthFrame()
12343
12335
  }
12344
12336
  }
12345
12337
 
12338
+ this.CreateMulitCoordinateItem=function(aryData, x, y, textBaseline, data)
12339
+ {
12340
+ var coordinateItem=
12341
+ {
12342
+ AryText:[], X:x,Y:y, TextBaseline:textBaseline, Item:data
12343
+ };
12344
+
12345
+ for(var i=0;i<aryData.length;++i)
12346
+ {
12347
+ var item=aryData[i];
12348
+ if (item.Font) this.Canvas.font=item.Font;
12349
+ var textWidth=0;
12350
+ if (item.Text) textWidth=this.Canvas.measureText(item.Text).width;
12351
+
12352
+ coordinateItem.AryText.push({ Width:textWidth, Item:item });
12353
+ }
12354
+
12355
+ return coordinateItem;
12356
+ }
12357
+
12358
+ this.GetMulitCoordinateItemTextWidth=function(aryData)
12359
+ {
12360
+ var total=0;
12361
+ for(var i=0;i<aryData.length;++i)
12362
+ {
12363
+ var item=aryData[i];
12364
+ if (item.Font) this.Canvas.font=item.Font;
12365
+ var width=this.Canvas.measureText(item.Text).width;
12366
+
12367
+ total+=width;
12368
+ }
12369
+
12370
+ return total;
12371
+ }
12372
+
12346
12373
  //多行文字刻度输出 obj={ Data:, X:, Y:, TextBaseLine:, IsLeft:, Item:刻度数据 }
12347
12374
  this.DrawMultiLineText=function(obj)
12348
12375
  {
@@ -12433,53 +12460,86 @@ function AverageWidthFrame()
12433
12460
  return rtRight;
12434
12461
  }
12435
12462
 
12436
- this.DrawHorizontalMuText=function(aryText)
12463
+ //绘制多重坐标刻度文字 左侧
12464
+ this.DrawMultiCoordinateLeftText=function(aryText)
12437
12465
  {
12438
- var maxWidth=[null,null];
12439
- for(var i=0;i<aryText.length;++i)
12466
+ var aryMaxWidth=[];
12467
+ for(var i=0, j=0;i<aryText.length;++i)
12440
12468
  {
12441
12469
  var item=aryText[i];
12442
- var width=item.Text[0].Width;
12443
- if (!IFrameSplitOperator.IsNumber(maxWidth[0])) maxWidth[0]=width;
12444
- else if (maxWidth[0]<width) maxWidth[0]=width;
12445
-
12446
- width=item.Text[1].Width;
12447
- if (!IFrameSplitOperator.IsNumber(maxWidth[1])) maxWidth[1]=width;
12448
- else if (maxWidth[1]<width) maxWidth[1]=width;
12470
+ for(var j=0;j<item.AryText.length;++j)
12471
+ {
12472
+ var textItem=item.AryText[j];
12473
+ if (!IFrameSplitOperator.IsNumber(aryMaxWidth[j]) || aryMaxWidth[j]<textItem.Width) aryMaxWidth[j]=textItem.Width;
12474
+ }
12475
+
12449
12476
  }
12450
12477
 
12478
+ this.Canvas.textAlign="right";
12451
12479
  for(var i=0;i<aryText.length;++i)
12452
12480
  {
12453
12481
  var item=aryText[i];
12454
12482
  var message=item.Item;
12455
-
12483
+ var x=item.X;
12456
12484
  this.Canvas.textBaseline=item.TextBaseline;
12457
- if (message.ExtendData && message.ExtendData.Font) this.Canvas.font=message.ExtendData.Font;
12458
- else if (message.Font) this.Canvas.font=message.Font;
12459
-
12460
- if (message.ExtendData && message.ExtendData.PriceColor) this.Canvas.fillStyle=message.ExtendData.PriceColor;
12461
- else this.Canvas.fillStyle=message.TextColor;
12485
+ for(var j=0;j<item.AryText.length;++j)
12486
+ {
12487
+ var textItem=item.AryText[j];
12488
+ var subText=textItem.Item;
12489
+ if (subText && subText.Text)
12490
+ {
12491
+ if (subText.Font) this.Canvas.font=subText.Font; //字体
12492
+ else if (message.Font) this.Canvas.font=message.Font;
12493
+
12494
+ if (subText.Color) this.Canvas.fillStyle=subText.Color; //颜色
12495
+ else this.Canvas.fillStyle=message.TextColor;
12462
12496
 
12463
- this.Canvas.textAlign="right";
12464
- var x=item.X+maxWidth[1];
12465
- this.Canvas.fillText(item.Text[1].Text,x,item.Y);
12497
+ this.Canvas.fillText(subText.Text,x,item.Y);
12498
+ }
12466
12499
 
12467
- if (message.ExtendData && message.ExtendData.SplitColor) this.Canvas.fillStyle=message.ExtendData.SplitColor;
12468
- else this.Canvas.fillStyle=message.TextColor;
12500
+ x-=aryMaxWidth[j];
12501
+ }
12502
+ }
12503
+ }
12469
12504
 
12470
- this.Canvas.textAlign="left";
12471
- var splitWidth=this.Canvas.measureText('/').width;
12472
- this.Canvas.fillText('/',x,item.Y);
12505
+ //绘制多重坐标刻度文字 右侧
12506
+ this.DrawMultiCoordinateRightText=function(aryText)
12507
+ {
12508
+ var aryMaxWidth=[];
12509
+ for(var i=0, j=0;i<aryText.length;++i)
12510
+ {
12511
+ var item=aryText[i];
12512
+ for(var j=0;j<item.AryText.length;++j)
12513
+ {
12514
+ var textItem=item.AryText[j];
12515
+ if (!IFrameSplitOperator.IsNumber(aryMaxWidth[j]) || aryMaxWidth[j]<textItem.Width) aryMaxWidth[j]=textItem.Width;
12516
+ }
12473
12517
 
12474
- if (message.ExtendData && message.ExtendData.PercentageColor) this.Canvas.fillStyle=message.ExtendData.PercentageColor;
12475
- else this.Canvas.fillStyle=message.TextColor;
12518
+ }
12476
12519
 
12477
- this.Canvas.textAlign="right";
12478
- var x=item.X+maxWidth[1]+maxWidth[0]+splitWidth;
12479
- this.Canvas.fillText(item.Text[0].Text,x,item.Y);
12520
+ this.Canvas.textAlign="right";
12521
+ for(var i=0;i<aryText.length;++i)
12522
+ {
12523
+ var item=aryText[i];
12524
+ var message=item.Item;
12525
+ var x=item.X;
12526
+ this.Canvas.textBaseline=item.TextBaseline;
12527
+ for(var j=0;j<item.AryText.length;++j)
12528
+ {
12529
+ var textItem=item.AryText[j];
12530
+ var subText=textItem.Item;
12531
+ if (subText && subText.Text)
12532
+ {
12533
+ if (subText.Font) this.Canvas.font=subText.Font; //字体
12534
+ else if (message.Font) this.Canvas.font=message.Font;
12535
+
12536
+ if (subText.Color) this.Canvas.fillStyle=subText.Color; //颜色
12537
+ else this.Canvas.fillStyle=message.TextColor;
12480
12538
 
12481
- var textWidth=maxWidth[1]+maxWidth[0]+splitWidth*4;
12482
- if (this.RightTextMaxWidth<textWidth) this.RightTextMaxWidth=textWidth;
12539
+ x+=aryMaxWidth[j];
12540
+ this.Canvas.fillText(subText.Text,x,item.Y);
12541
+ }
12542
+ }
12483
12543
  }
12484
12544
  }
12485
12545
 
@@ -14057,7 +14117,8 @@ function AverageWidthFrame()
14057
14117
  {
14058
14118
  if (Array.isArray(item.Message[0]))
14059
14119
  {
14060
- textWidth=this.GetMulitTextMaxWidth(item.Message[0]);
14120
+ if (this.MultiTextFormat==1) textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[0]);
14121
+ else textWidth=this.GetMulitTextMaxWidth(item.Message[0]);
14061
14122
  }
14062
14123
  else
14063
14124
  {
@@ -14076,17 +14137,9 @@ function AverageWidthFrame()
14076
14137
 
14077
14138
  if (Array.isArray(item.Message[1]))
14078
14139
  {
14079
- if (this.MultiTextFormat==1 && IFrameSplitOperator.IsNonEmptyArray(item.Message[1])) //显示1行 格式:价格/百分比
14140
+ if (this.MultiTextFormat==1) //显示1行 格式:价格/百分比
14080
14141
  {
14081
- if (item.ExtendData && item.ExtendData.Font) this.Canvas.font=item.ExtendData.Font;
14082
-
14083
- var width1=this.Canvas.measureText(item.Message[1][0]).width;
14084
- var width2=this.Canvas.measureText(item.Message[1][1]).width;
14085
- var width3=this.Canvas.measureText('/').width;
14086
- textWidth=width1+width3;
14087
- if (rightExtendWidth<width2) rightExtendWidth=width2;
14088
-
14089
- //JSConsole.Chart.Log(`[ChartData::GetScaleTextWidth] ${item.Message[1][1]}/${item.Message[1][0]} ${textWidth}, ${rightExtendWidth}`);
14142
+ textWidth=this.GetMulitCoordinateItemTextWidth(item.Message[1]);
14090
14143
  }
14091
14144
  else if (this.MultiTextFormat==2) //显示2行
14092
14145
  {
@@ -50791,7 +50844,7 @@ function FrameSplitKLinePriceY()
50791
50844
  this.EnableZoomUpDown=false; //上下左右拖拽
50792
50845
  this.LastMaxMin; //当前显示的最高最低范围
50793
50846
 
50794
- this.PercentageTextFormat=0; //0=显示第1行 1=显示2行 2=单行格式: 价格/百分比
50847
+ this.PercentageTextFormat=0; //0=显示第1行 1=单行格式: 价格/百分比, 2=显示2行 3=2行显示(json格式)
50795
50848
 
50796
50849
  this.IsEnableDragY=function()
50797
50850
  {
@@ -51023,17 +51076,7 @@ function FrameSplitKLinePriceY()
51023
51076
  var price=(value+1)*firstOpenPrice;
51024
51077
  var item=new CoordinateInfo();
51025
51078
  item.Value=price;
51026
- if (this.IsShowLeftText) item.Message[0]=price.toFixed(floatPrecision); //左边价格坐标
51027
-
51028
- if (this.IsShowRightText)
51029
- {
51030
- var strPrice=price.toFixed(floatPrecision);
51031
- var text=(value*100).toFixed(2); //右边百分比
51032
- text=IFrameSplitOperator.RemoveZero(text);
51033
- text+='%';
51034
- item.Message[1]=[text,strPrice];
51035
- item.ExtendData=textColor;
51036
- }
51079
+ this.FormatPercentageItem(item, value, floatPrecision,textColor);
51037
51080
  aryHorizontal.push(item);
51038
51081
  }
51039
51082
 
@@ -51044,16 +51087,7 @@ function FrameSplitKLinePriceY()
51044
51087
 
51045
51088
  var item=new CoordinateInfo();
51046
51089
  item.Value=price;
51047
- if (this.IsShowLeftText) item.Message[0]=price.toFixed(floatPrecision); //左边价格坐标
51048
- if (this.IsShowRightText)
51049
- {
51050
- var strPrice=price.toFixed(floatPrecision);
51051
- var text=(value*100).toFixed(2); //右边百分比
51052
- text=IFrameSplitOperator.RemoveZero(text);
51053
- text+='%';
51054
- item.Message[1]=[text,strPrice];
51055
- item.ExtendData=textColor;
51056
- }
51090
+ this.FormatPercentageItem(item, value, floatPrecision,textColor);
51057
51091
  aryHorizontal.push(item);
51058
51092
  }
51059
51093
 
@@ -51069,6 +51103,26 @@ function FrameSplitKLinePriceY()
51069
51103
  return true;
51070
51104
  }
51071
51105
 
51106
+ this.FormatPercentageItem=function(item, percentage, floatPrecision, textColor)
51107
+ {
51108
+ var price=item.Value;
51109
+ var strPrice=price.toFixed(floatPrecision);
51110
+ if (this.IsShowLeftText) item.Message[0]=strPrice; //左边价格坐标
51111
+
51112
+ if (this.IsShowRightText) //右侧 价格/百分比
51113
+ {
51114
+ var strPrcentage=`${IFrameSplitOperator.RemoveZero(percentage.toFixed(2))}%`; //右边百分比
51115
+ if (this.PercentageTextFormat==1)
51116
+ item.Message[1]=[{ Text:strPrice, Color:textColor.PriceColor }, {Text:"/", Color:textColor.PercentageColor}, {Text:strPrcentage, Color:textColor.SplitColor}];
51117
+ else if (this.PercentageTextFormat==3)
51118
+ item.Message[1]=[{ Text:strPrice, Color:textColor.PriceColor }, {Text:strPrcentage, Color:textColor.PercentageColor}];
51119
+ else if (this.PercentageTextFormat==2)
51120
+ item.Message[1]=[strPrcentage, strPrice];
51121
+ else
51122
+ item.Message[1]=strPrcentage;
51123
+ }
51124
+ }
51125
+
51072
51126
  //等比坐标 当前屏最后第2根K线的收盘加为基准, 上下涨幅10%分割
51073
51127
  this.SplitIncrease=function(splitData,floatPrecision)
51074
51128
  {
@@ -52907,7 +52961,7 @@ function FrameSplitMinutePriceY()
52907
52961
  }
52908
52962
  else if (this.RightTextFormat==2) //价格/百分比
52909
52963
  {
52910
- coordinate.Message[1]=[strPer,strPrice];
52964
+ coordinate.Message[1]=[ {Text:strPrice}, {Text:"/"}, { Text:strPer} ];
52911
52965
  }
52912
52966
  else
52913
52967
  {
@@ -151,9 +151,9 @@ function GetBlackStyle()
151
151
 
152
152
  PercentageText: //百分比坐标文字颜色
153
153
  {
154
- PriceColor:'rgb(101,104,112)',
155
- PercentageColor:"rgb(101,104,112)",
156
- SplitColor:"rgb(101,104,112)",
154
+ PriceColor:'rgb(220,220,220)',
155
+ PercentageColor:"rgb(220,220,220)",
156
+ SplitColor:"rgb(220,220,220)",
157
157
  Font:14*GetDevicePixelRatio() +"px 微软雅黑"
158
158
  }
159
159
  },