hqchart 1.1.15898 → 1.1.15912

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.
@@ -5023,10 +5023,20 @@ if(!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup))return;if(!this.MapCach
5023
5023
  var mapPoint=new Map();for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var kItem=this.Data.Data[i];var key=this.BuildKey(kItem);if(!this.MapCache.has(key))continue;var mapItem=this.MapCache.get(key);if(!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data))continue;if(isMinute){var x=this.ChartFrame.GetXFromIndex(j);}else{var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;}this.CalculateItem(mapItem,kItem,x,mapPoint);}if(mapPoint.size<=0)return;this.Canvas.save();this.ClipClient(this.IsHScreen);this.DrawAllPoint(mapPoint);this.Canvas.restore();};this.CalculateItem=function(groupItem,kItem,x,mapPoint){for(var i=0;i<groupItem.Data.length;++i){var item=groupItem.Data[i];var value=item.Data.Value;if(IFrameSplitOperator.IsString(item.Data.Value))value=this.GetKValue(kItem,item.Data.Value);if(!IFrameSplitOperator.IsNumber(value))continue;var y=this.ChartFrame.GetYFromData(value,false);var strConfig=JSON.stringify(item.ColorConfig);if(!mapPoint.has(strConfig))mapPoint.set(strConfig,{AryPoint:[]});var mapItem=mapPoint.get(strConfig);mapItem.AryPoint.push({X:x,Y:y,Data:item});}};this.DrawAllPoint=function(mapPoint){var pixelRatio=GetDevicePixelRatio();var _iterator0=_createForOfIteratorHelper(mapPoint),_step0;try{for(_iterator0.s();!(_step0=_iterator0.n()).done;){var mapItem=_step0.value;var aryPoint=mapItem[1].AryPoint;if(!IFrameSplitOperator.IsNonEmptyArray(aryPoint))continue;var config=null;var path=new Path2D();var count=0;for(var i=0;i<aryPoint.length;++i){var item=aryPoint[i];if(!config)config=item.Data.ColorConfig;var pointPath=new Path2D();if(this.IsHScreen)pointPath.arc(item.Y,item.X,config.Radius*pixelRatio,0,360,false);else pointPath.arc(item.X,item.Y,config.Radius*pixelRatio,0,360,false);path.addPath(pointPath);++count;}if(count>0&&config){if(config.BGColor){this.Canvas.fillStyle=config.BGColor;//背景填充颜色
5024
5024
  this.Canvas.fill(path);}if(config.Color){this.Canvas.lineWidth=config.LineWidth*pixelRatio;this.Canvas.strokeStyle=config.Color;this.Canvas.stroke(path);}}}}catch(err){_iterator0.e(err);}finally{_iterator0.f();}};this.GetMaxMin=function(){var range={Min:null,Max:null};if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return range;if(!this.MapCache||this.MapCache.size<=0)return range;var xPointCount=this.ChartFrame.XPointCount;for(var i=this.Data.DataOffset,j=0,k=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var kItem=this.Data.Data[i];var key=this.BuildKey(kItem);if(!this.MapCache.has(key))continue;var mapItem=this.MapCache.get(key);if(!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data))continue;for(k=0;k<mapItem.Data.length;++k){var item=mapItem.Data[k];var value=item.Data.Value;if(IFrameSplitOperator.IsString(item.Data.Value))value=this.GetKValue(kItem,item.Data.Value);if(!IFrameSplitOperator.IsNumber(value))continue;if(range.Max==null)range.Max=value;else if(range.Max<value)range.Max=value;if(range.Min==null)range.Min=value;else if(range.Min>value)range.Min=value;}}return range;};}// 多文本集合2.0 支持横屏
5025
5025
  function ChartMultiText(){this.newMethod=IChartPainting;//派生
5026
- this.newMethod();delete this.newMethod;this.ClassName="ChartMultiText";this.Texts=[];//[ {Date:, Time, Value:, Text:, Color:, Font: , Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 }} ]
5026
+ this.newMethod();delete this.newMethod;this.ClassName="ChartMultiText";this.Texts=[];//[ {Date:, Time, Value:, Text:, Color:, BGColor:, Font: , Baseline:, Align:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 }} ]
5027
5027
  this.Font=g_JSChartResource.DefaultTextFont;this.Color=g_JSChartResource.DefaultTextColor;this.IsHScreen=false;//是否横屏
5028
5028
  this.MapCache=null;//key=date/date-time value={ Data:[] }
5029
- this.GetKValue=ChartData.GetKValue;this.BuildCacheData=function(){var mapData=new Map();this.MapCache=mapData;if(!IFrameSplitOperator.IsNonEmptyArray(this.Texts))return;for(var i=0;i<this.Texts.length;++i){var item=this.Texts[i];var key=this.BuildKey(item);if(mapData.has(key)){var mapItem=mapData.get(key);mapItem.Data.push(item);}else{mapData.set(key,{Data:[item]});}}};this.DrawAllText=function(){var bHScreen=this.ChartFrame.IsHScreen===true;var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(bHScreen){var border=this.ChartBorder.GetHScreenBorder();var chartright=border.BottomEx;var chartleft=border.TopEx;var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var left=this.ChartBorder.GetTop();var right=this.ChartBorder.GetBottom();var top=border.RightEx;var bottom=border.LeftEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var chartleft=border.LeftEx;var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var top=border.TopEx;var bottom=border.BottomEx;}for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var kItem=this.Data.Data[i];if(!kItem)continue;var key=this.BuildKey(kItem);if(!this.MapCache.has(key))continue;var mapItem=this.MapCache.get(key);if(!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data))continue;if(isMinute){var x=this.ChartFrame.GetXFromIndex(j);}else{var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;}for(var k=0;k<mapItem.Data.length;++k){var item=mapItem.Data[k];var y=top;if(item.Value=="TOP")y=top;else if(item.Value=="BOTTOM")y=bottom;else{var price=item.Value;if(IFrameSplitOperator.IsString(item.Value))price=this.GetKValue(kItem,item.Value);y=this.ChartFrame.GetYFromData(price,false);}if(item.Color)this.Canvas.fillStyle=item.Color;else this.Canvas.fillStyle=this.Color;if(item.Font)this.Canvas.font=item.Font;else this.Canvas.font=this.Font;var textWidth=this.Canvas.measureText(item.Text).width;this.Canvas.textAlign='center';if(x+textWidth/2>=chartright){this.Canvas.textAlign='right';x=chartright;}else if(x-textWidth/2<chartleft){this.Canvas.textAlign='left';x=chartleft;}if(item.Baseline==1)this.Canvas.textBaseline='top';else if(item.Baseline==2)this.Canvas.textBaseline='bottom';else this.Canvas.textBaseline='middle';if(this.IsHScreen){this.Canvas.save();this.Canvas.translate(y,x);this.Canvas.rotate(90*Math.PI/180);this.Canvas.fillText(item.Text,0,0);this.Canvas.restore();}else{if(IFrameSplitOperator.IsNumber(item.YMove))y+=item.YMove;this.Canvas.fillText(item.Text,x,y);}if(item.Line){var price=item.Line.KData=="H"?kItem.High:kItem.Low;var yPrice=this.ChartFrame.GetYFromData(price,false);var yText=y;if(Array.isArray(item.Line.Offset)&&item.Line.Offset.length==2){if(yText>yPrice)//文字在下方
5029
+ this.GetKValue=ChartData.GetKValue;this.BuildCacheData=function(){var mapData=new Map();this.MapCache=mapData;if(!IFrameSplitOperator.IsNonEmptyArray(this.Texts))return;for(var i=0;i<this.Texts.length;++i){var item=this.Texts[i];var key=this.BuildKey(item);if(mapData.has(key)){var mapItem=mapData.get(key);mapItem.Data.push(item);}else{mapData.set(key,{Data:[item]});}}};this.DrawAllText=function(){var bHScreen=this.ChartFrame.IsHScreen===true;var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;if(bHScreen){var border=this.ChartBorder.GetHScreenBorder();var chartright=border.BottomEx;var chartleft=border.TopEx;var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var left=this.ChartBorder.GetTop();var right=this.ChartBorder.GetBottom();var top=border.RightEx;var bottom=border.LeftEx;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var chartleft=border.LeftEx;var left=this.ChartBorder.GetLeft();var right=this.ChartBorder.GetRight();var top=border.TopEx;var bottom=border.BottomEx;}this.Canvas.textAlign="left";this.Canvas.textBaseline='bottom';for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var kItem=this.Data.Data[i];if(!kItem)continue;var key=this.BuildKey(kItem);if(!this.MapCache.has(key))continue;var mapItem=this.MapCache.get(key);if(!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data))continue;if(isMinute){var x=this.ChartFrame.GetXFromIndex(j);}else{var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;}for(var k=0;k<mapItem.Data.length;++k){var item=mapItem.Data[k];var y=top;if(item.Value=="TOP")y=top;else if(item.Value=="BOTTOM")y=bottom;else{var price=item.Value;if(IFrameSplitOperator.IsString(item.Value))price=this.GetKValue(kItem,item.Value);y=this.ChartFrame.GetYFromData(price,false);}if(item.Font)this.Canvas.font=item.Font;else this.Canvas.font=this.Font;var textWidth=this.Canvas.measureText(item.Text).width;var textHeight=this.Canvas.measureText("擎").width;var cellWidth=textWidth;var cellHeight=textHeight;var xTextOffset=0,yTextOffset=0;if(item.Margin){if(IFrameSplitOperator.IsNumber(item.Margin.Left))cellWidth+=item.Margin.Left;if(IFrameSplitOperator.IsNumber(item.Margin.Right))cellWidth+=item.Margin.Right;if(IFrameSplitOperator.IsNumber(item.Margin.Top))cellHeight+=item.Margin.Top;if(IFrameSplitOperator.IsNumber(item.Margin.Bottom))cellHeight+=item.Margin.Bottom;if(IFrameSplitOperator.IsNumber(item.Margin.XOffset))xTextOffset=item.Margin.XOffset;if(IFrameSplitOperator.IsNumber(item.Margin.YOffset))yTextOffset=item.Margin.YOffset;}if(this.IsHScreen){var rtText={Left:y-cellHeight/2,Width:cellHeight,Top:x-cellWidth/2,Height:cellWidth};rtText.Right=rtText.Left+rtText.Width;rtText.Bottom=rtText.Top+rtText.Height;if(item.Baseline==1)//y=顶部
5030
+ {rtText.Right=y;rtText.Left=rtText.Right-rtText.Width;}else if(item.Baseline==2)//y=底部
5031
+ {rtText.Left=y;rtText.Right=rtText.Left+rtText.Width;}if(IFrameSplitOperator.IsNumber(item.YMove)){rtText.Left-=item.YMove;rtText.Right-=item.YMove;}}else{var rtText={Left:x-cellWidth/2,Width:cellWidth,Top:y-cellHeight/2,Height:cellHeight};rtText.Right=rtText.Left+rtText.Width;rtText.Bottom=rtText.Top+rtText.Height;//左右对齐 默认居中
5032
+ if(item.Align==1)//左
5033
+ {rtText.Left=x;rtText.Right=rtText.Left+rtText.Width;if(item.XLine&&IFrameSplitOperator.IsNumber(item.XLine.Width)){rtText.Left+=item.XLine.Width;rtText.Right+=item.XLine.Width;if(item.XLine.Color)//画线
5034
+ {this.Canvas.save();this.Canvas.lineWidth=1*GetDevicePixelRatio();//线宽
5035
+ this.Canvas.strokeStyle=item.XLine.Color;this.Canvas.beginPath();var arrawSize=6*GetDevicePixelRatio();if(IFrameSplitOperator.IsNumber(item.XLine.ArrawSize))arrawSize=item.XLine.ArrawSize;// 箭头主干横线
5036
+ this.Canvas.moveTo(x,y);this.Canvas.lineTo(rtText.Left,y);this.Canvas.moveTo(x,y);this.Canvas.lineTo(x+arrawSize/2,y+arrawSize/3);this.Canvas.moveTo(x,y);this.Canvas.lineTo(x+arrawSize/2,y-arrawSize/3);this.Canvas.stroke();this.Canvas.restore();}}}else if(item.Align==2)//右
5037
+ {rtText.Right=x;rtText.Left=rtText.Right-rtText.Width;}else{if(rtText.Left<chartleft){rtText.Left=chartleft;rtText.Right=rtText.Left+rtText.Width;}else if(rtText.Right>chartright){rtText.Right=chartright;rtText.Left=rtText.Right-rtText.Width;}}if(item.Baseline==1)//y=顶部
5038
+ {rtText.Top=y;rtText.Bottom=rtText.Top+rtText.Height;}else if(item.Baseline==2)//y=底部
5039
+ {rtText.Bottom=y;rtText.Top=rtText.Bottom-rtText.Height;}if(IFrameSplitOperator.IsNumber(item.YMove)){rtText.Top+=item.YMove;rtText.Bottom+=item.YMove;}}if(this.IsHScreen){if(item.BGColor){this.Canvas.fillStyle=item.BGColor;this.Canvas.fillRect(rtText.Left,rtText.Top,rtText.Width,rtText.Height);}var yText=rtText.Top+xTextOffset;var xText=rtText.Left-yTextOffset;this.Canvas.save();this.Canvas.translate(xText,yText);this.Canvas.rotate(90*Math.PI/180);if(item.Color)this.Canvas.fillStyle=item.Color;else this.Canvas.fillStyle=this.Color;this.Canvas.fillText(item.Text,0,0);this.Canvas.restore();}else{if(item.BGColor){this.Canvas.fillStyle=item.BGColor;this.Canvas.fillRect(rtText.Left,rtText.Top,rtText.Width,rtText.Height);}if(item.Color)this.Canvas.fillStyle=item.Color;else this.Canvas.fillStyle=this.Color;this.Canvas.fillText(item.Text,rtText.Left+xTextOffset,rtText.Bottom+yTextOffset);}if(item.Line){var price=item.Line.KData=="H"?kItem.High:kItem.Low;var yPrice=this.ChartFrame.GetYFromData(price,false);var yText=yPrice;if(this.IsHScreen){if(yPrice<rtText.Left)yText=rtText.Left;else if(yPrice>rtText.Right)yText=rtText.Right;}else{if(yPrice>rtText.Bottom)yText=rtText.Bottom;else if(yPrice<rtText.Top)yText=rtText.Top;}if(Array.isArray(item.Line.Offset)&&item.Line.Offset.length==2){if(yText>yPrice)//文字在下方
5030
5040
  {yText-=item.Line.Offset[1];yPrice+=item.Line.Offset[0];}else if(yText<yPrice){yText+=item.Line.Offset[1];yPrice-=item.Line.Offset[0];}}this.Canvas.save();if(item.Line.Dash)this.Canvas.setLineDash(item.Line.Dash);//虚线
5031
5041
  if(item.Line.Width>0)this.Canvas.lineWidth=item.Line.Width;//线宽
5032
5042
  this.Canvas.strokeStyle=item.Line.Color;this.Canvas.beginPath();if(this.IsHScreen){this.Canvas.moveTo(yText,ToFixedPoint(x));this.Canvas.lineTo(yPrice,ToFixedPoint(x));}else{this.Canvas.moveTo(ToFixedPoint(x),yText);this.Canvas.lineTo(ToFixedPoint(x),yPrice);}this.Canvas.stroke();this.Canvas.restore();}}}};this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;//k线数据
@@ -16784,7 +16794,7 @@ if(dayItem.Text){var textWidth=this.Canvas.measureText(dayItem.Text).width;xText
16784
16794
  {yCell=rtCell.Bottom;xCell=left;}++j;}}},{key:"DrawMarkDay",value:function DrawMarkDay(dayItem,markItem,rtCell,yText){var config=this.MarkDayConfig;var radius=config.Dots.Radius;var yOffset=config.Dots.YOffset;var color=config.Dots.Color;if(markItem.Color)color=markItem.Color;if(IFrameSplitOperator.IsNumber(markItem.YOffset))yOffset=markItem.YOffset;if(IFrameSplitOperator.IsNumber(markItem.Radius))radius=markItem.Radius;var x=rtCell.Left+rtCell.Width/2;var y=yText+yOffset;this.Canvas.fillStyle=color;this.Canvas.beginPath();this.Canvas.arc(x,y,radius,0,Math.PI*2);this.Canvas.fill();}},{key:"PtInCell",value:function PtInCell(x,y){if(!IFrameSplitOperator.IsNonEmptyArray(this.AryCellRect))return null;for(var i=0;i<this.AryCellRect.length;++i){var item=this.AryCellRect[i];var rtCell=item.Rect;if(x>=rtCell.Left&&x<=rtCell.Right&&y>=rtCell.Top&&y<=rtCell.Bottom){var data={Rect:rtCell,Type:item.Type,Data:item.Data};return data;}}return null;}},{key:"OnMouseOn",value:function OnMouseOn(x,y,e){var pixelTatio=GetDevicePixelRatio();var insidePoint={X:x/pixelTatio,Y:y/pixelTatio};var uiElement;if(this.UIElement)uiElement={Left:this.UIElement.getBoundingClientRect().left,Top:this.UIElement.getBoundingClientRect().top};else uiElement={Left:null,Top:null};var bDraw=false;var cell=this.PtInCell(x,y);if(cell){bDraw=false;var selData=this.MoveOnData.Data;if(selData&&cell.Type==selData.Type){if(cell.Type===JSCHART_CALENDAR_BUTTON_ID.DAY_CELL_ID||cell.Type===JSCHART_CALENDAR_BUTTON_ID.MONTH_CELL_ID){if(cell.Data.Date!=selData.Data.Date){this.MoveOnData.Data={Type:cell.Type,Data:cell.Data};bDraw=true;}}}else{this.MoveOnData.Data={Type:cell.Type,Data:cell.Data};bDraw=true;}return{Redraw:bDraw,Cell:cell};}if(this.MoveOnData.Data){this.MoveOnData.Data=null;bDraw=true;}return{Redraw:bDraw,Cell:null};}},{key:"OnMouseDown",value:function OnMouseDown(x,y,e){var cell=this.PtInCell(x,y);if(!cell)return null;var bDraw=false;return{Type:cell.Type,Redraw:bDraw,Data:cell.Data};}},{key:"SetSelectedDay",value:function SetSelectedDay(aryData){this.ArySelectedDay=[];if(IFrameSplitOperator.IsNonEmptyArray(aryData))this.ArySelectedDay=aryData.slice();}}]);}();/********************************************************************************
16785
16795
  * 版本信息输出
16786
16796
  *
16787
- */var HQCHART_VERSION="1.1.15897";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: ".concat(HQCHART_VERSION," \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ");console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
16797
+ */var HQCHART_VERSION="1.1.15911";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: ".concat(HQCHART_VERSION," \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n************************************************************************************************************************************************************************** \n ");console.log(logo);}PrintHQChartVersion();//把给外界调用的方法暴露出来
16788
16798
  var _default=exports["default"]=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
16789
16799
  // BaseIndex:BaseIndex,
16790
16800
  // ChartLine:ChartLine,
@@ -16814,5 +16824,6 @@ HQPriceStringFormat:HQPriceStringFormat//分时图,K线图Y轴 十字光标输
16814
16824
  }),"JS_ID",{JSCHART_EVENT_ID:JSCHART_EVENT_ID,JSCHART_OPERATOR_ID:JSCHART_OPERATOR_ID,JSCHART_DRAG_ID:JSCHART_DRAG_ID,JSCHART_BUTTON_ID:JSCHART_BUTTON_ID,JSCHART_DATA_FIELD_ID:JSCHART_DATA_FIELD_ID,JSCHART_WORKER_MESSAGE_ID:JSCHART_WORKER_MESSAGE_ID,JSCHART_MENU_ID:JSCHART_MENU_ID,JSCHART_TRADE_STATUS_ID:JSCHART_TRADE_STATUS_ID,//交易状态
16815
16825
  JSCHART_CORSSCURSOR_STATUS_ID:JSCHART_CORSSCURSOR_STATUS_ID,//十字光标状态
16816
16826
  CONDITION_PERIOD:CONDITION_PERIOD,//指标周期条件枚举
16817
- DECIMAL_ID:DECIMAL_ID//指标标题栏 显示小数位数枚举
16827
+ DECIMAL_ID:DECIMAL_ID,//指标标题栏 显示小数位数枚举
16828
+ JSCHART_TEMPORARY_ATTRIBUTE:JSCHART_TEMPORARY_ATTRIBUTE//图形临时属性
16818
16829
  }),"HQChartScriptWorker",HQChartScriptWorker),"JSPopMenu",JSPopMenu),_defineProperty(_jsChartInit$jsChartS,"JSDialogDrawTool",JSDialogDrawTool));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.15898",
3
+ "version": "1.1.15912",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -52711,7 +52711,7 @@ function ChartMultiText()
52711
52711
  delete this.newMethod;
52712
52712
 
52713
52713
  this.ClassName="ChartMultiText";
52714
- this.Texts=[]; //[ {Date:, Time, Value:, Text:, Color:, Font: , Baseline:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 }} ]
52714
+ this.Texts=[]; //[ {Date:, Time, Value:, Text:, Color:, BGColor:, Font: , Baseline:, Align:, Line:{ Color:, Dash:[虚线点], KData:"H/L", Offset:[5,10], Width:线粗细 }} ]
52715
52715
  this.Font=g_JSChartResource.DefaultTextFont;
52716
52716
  this.Color=g_JSChartResource.DefaultTextColor;
52717
52717
  this.IsHScreen=false; //是否横屏
@@ -52773,6 +52773,8 @@ function ChartMultiText()
52773
52773
  var bottom=border.BottomEx;
52774
52774
  }
52775
52775
 
52776
+ this.Canvas.textAlign="left";
52777
+ this.Canvas.textBaseline='bottom';
52776
52778
  for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
52777
52779
  {
52778
52780
  var kItem=this.Data.Data[i];
@@ -52806,63 +52808,189 @@ function ChartMultiText()
52806
52808
  {
52807
52809
  var price=item.Value;
52808
52810
  if (IFrameSplitOperator.IsString(item.Value)) price=this.GetKValue(kItem,item.Value);
52809
-
52810
52811
  y=this.ChartFrame.GetYFromData(price, false);
52811
52812
  }
52812
-
52813
52813
 
52814
- if (item.Color) this.Canvas.fillStyle = item.Color;
52815
- else this.Canvas.fillStyle = this.Color;
52816
52814
  if (item.Font) this.Canvas.font = item.Font;
52817
52815
  else this.Canvas.font=this.Font;
52818
52816
 
52819
52817
  var textWidth=this.Canvas.measureText(item.Text).width;
52820
- this.Canvas.textAlign='center';
52821
- if (x+textWidth/2>=chartright)
52818
+ var textHeight=this.Canvas.measureText("擎").width;
52819
+ var cellWidth=textWidth;
52820
+ var cellHeight=textHeight;
52821
+ var xTextOffset=0, yTextOffset=0;
52822
+ if (item.Margin)
52822
52823
  {
52823
- this.Canvas.textAlign='right';
52824
- x=chartright;
52824
+ if (IFrameSplitOperator.IsNumber(item.Margin.Left)) cellWidth+=item.Margin.Left;
52825
+ if (IFrameSplitOperator.IsNumber(item.Margin.Right)) cellWidth+=item.Margin.Right;
52826
+ if (IFrameSplitOperator.IsNumber(item.Margin.Top)) cellHeight+=item.Margin.Top;
52827
+ if (IFrameSplitOperator.IsNumber(item.Margin.Bottom)) cellHeight+=item.Margin.Bottom;
52828
+
52829
+ if (IFrameSplitOperator.IsNumber(item.Margin.XOffset)) xTextOffset=item.Margin.XOffset;
52830
+ if (IFrameSplitOperator.IsNumber(item.Margin.YOffset)) yTextOffset=item.Margin.YOffset;
52825
52831
  }
52826
- else if (x-textWidth/2<chartleft)
52832
+
52833
+ if (this.IsHScreen)
52827
52834
  {
52828
- this.Canvas.textAlign = 'left';
52829
- x=chartleft;
52835
+ var rtText={ Left:y-cellHeight/2, Width:cellHeight, Top:x-cellWidth/2, Height:cellWidth };
52836
+ rtText.Right=rtText.Left+rtText.Width;
52837
+ rtText.Bottom=rtText.Top+rtText.Height;
52838
+
52839
+ if (item.Baseline==1) //y=顶部
52840
+ {
52841
+ rtText.Right=y;
52842
+ rtText.Left=rtText.Right-rtText.Width;
52843
+ }
52844
+ else if (item.Baseline==2) //y=底部
52845
+ {
52846
+ rtText.Left=y;
52847
+ rtText.Right=rtText.Left+rtText.Width;
52848
+ }
52849
+
52850
+ if (IFrameSplitOperator.IsNumber(item.YMove))
52851
+ {
52852
+ rtText.Left-=item.YMove;
52853
+ rtText.Right-=item.YMove;
52854
+ }
52855
+ }
52856
+ else
52857
+ {
52858
+ var rtText={ Left:x-cellWidth/2, Width:cellWidth, Top:y-cellHeight/2, Height:cellHeight };
52859
+ rtText.Right=rtText.Left+rtText.Width;
52860
+ rtText.Bottom=rtText.Top+rtText.Height;
52861
+
52862
+ //左右对齐 默认居中
52863
+ if (item.Align==1) //左
52864
+ {
52865
+ rtText.Left=x;
52866
+ rtText.Right=rtText.Left+rtText.Width;
52867
+ if (item.XLine && IFrameSplitOperator.IsNumber(item.XLine.Width))
52868
+ {
52869
+ rtText.Left+=item.XLine.Width;
52870
+ rtText.Right+=item.XLine.Width;
52871
+
52872
+ if (item.XLine.Color) //画线
52873
+ {
52874
+ this.Canvas.save();
52875
+ this.Canvas.lineWidth=1*GetDevicePixelRatio(); //线宽
52876
+ this.Canvas.strokeStyle = item.XLine.Color;
52877
+ this.Canvas.beginPath();
52878
+ var arrawSize=6*GetDevicePixelRatio();
52879
+ if (IFrameSplitOperator.IsNumber(item.XLine.ArrawSize)) arrawSize=item.XLine.ArrawSize;
52880
+ // 箭头主干横线
52881
+ this.Canvas.moveTo(x, y);
52882
+ this.Canvas.lineTo(rtText.Left, y);
52883
+
52884
+ this.Canvas.moveTo(x, y);
52885
+ this.Canvas.lineTo(x+arrawSize/2, y+arrawSize/3);
52886
+
52887
+ this.Canvas.moveTo(x, y);
52888
+ this.Canvas.lineTo(x+arrawSize/2, y-arrawSize/3);
52889
+
52890
+ this.Canvas.stroke();
52891
+ this.Canvas.restore();
52892
+ }
52893
+ }
52894
+ }
52895
+ else if (item.Align==2) //右
52896
+ {
52897
+ rtText.Right=x;
52898
+ rtText.Left=rtText.Right-rtText.Width;
52899
+ }
52900
+ else
52901
+ {
52902
+ if (rtText.Left<chartleft)
52903
+ {
52904
+ rtText.Left=chartleft;
52905
+ rtText.Right=rtText.Left+rtText.Width;
52906
+ }
52907
+ else if (rtText.Right>chartright)
52908
+ {
52909
+ rtText.Right=chartright;
52910
+ rtText.Left=rtText.Right-rtText.Width;
52911
+ }
52912
+ }
52913
+
52914
+ if (item.Baseline==1) //y=顶部
52915
+ {
52916
+ rtText.Top=y;
52917
+ rtText.Bottom=rtText.Top+rtText.Height;
52918
+ }
52919
+ else if (item.Baseline==2) //y=底部
52920
+ {
52921
+ rtText.Bottom=y;
52922
+ rtText.Top=rtText.Bottom-rtText.Height;
52923
+ }
52924
+
52925
+ if (IFrameSplitOperator.IsNumber(item.YMove))
52926
+ {
52927
+ rtText.Top+=item.YMove;
52928
+ rtText.Bottom+=item.YMove;
52929
+ }
52830
52930
  }
52931
+
52831
52932
 
52832
- if (item.Baseline==1) this.Canvas.textBaseline='top';
52833
- else if (item.Baseline==2) this.Canvas.textBaseline='bottom';
52834
- else this.Canvas.textBaseline = 'middle';
52835
52933
 
52836
52934
  if (this.IsHScreen)
52837
52935
  {
52936
+ if (item.BGColor)
52937
+ {
52938
+ this.Canvas.fillStyle=item.BGColor;
52939
+ this.Canvas.fillRect(rtText.Left, rtText.Top, rtText.Width, rtText.Height);
52940
+ }
52941
+
52942
+ var yText=rtText.Top+xTextOffset;
52943
+ var xText=rtText.Left-yTextOffset;
52944
+
52838
52945
  this.Canvas.save();
52839
- this.Canvas.translate(y, x);
52946
+ this.Canvas.translate(xText, yText);
52840
52947
  this.Canvas.rotate(90 * Math.PI / 180);
52948
+ if (item.Color) this.Canvas.fillStyle = item.Color;
52949
+ else this.Canvas.fillStyle = this.Color;
52841
52950
  this.Canvas.fillText(item.Text,0,0);
52842
52951
  this.Canvas.restore();
52843
52952
  }
52844
52953
  else
52845
52954
  {
52846
- if (IFrameSplitOperator.IsNumber(item.YMove)) y+=item.YMove;
52847
- this.Canvas.fillText(item.Text, x, y);
52955
+ if (item.BGColor)
52956
+ {
52957
+ this.Canvas.fillStyle=item.BGColor;
52958
+ this.Canvas.fillRect(rtText.Left, rtText.Top, rtText.Width, rtText.Height);
52959
+ }
52960
+
52961
+ if (item.Color) this.Canvas.fillStyle = item.Color;
52962
+ else this.Canvas.fillStyle = this.Color;
52963
+ this.Canvas.fillText(item.Text, rtText.Left+xTextOffset, rtText.Bottom+yTextOffset);
52848
52964
  }
52849
52965
 
52850
52966
  if (item.Line)
52851
52967
  {
52852
52968
  var price=item.Line.KData=="H"? kItem.High:kItem.Low;
52853
52969
  var yPrice=this.ChartFrame.GetYFromData(price, false);
52854
- var yText=y;
52970
+ var yText=yPrice;
52971
+
52972
+ if (this.IsHScreen)
52973
+ {
52974
+ if (yPrice<rtText.Left) yText=rtText.Left;
52975
+ else if (yPrice>rtText.Right) yText=rtText.Right;
52976
+ }
52977
+ else
52978
+ {
52979
+ if (yPrice>rtText.Bottom) yText=rtText.Bottom;
52980
+ else if (yPrice<rtText.Top) yText=rtText.Top;
52981
+ }
52982
+
52855
52983
  if (Array.isArray(item.Line.Offset) && item.Line.Offset.length==2)
52856
52984
  {
52857
52985
  if (yText>yPrice) //文字在下方
52858
52986
  {
52859
52987
  yText-=item.Line.Offset[1];
52860
- yPrice+=item.Line.Offset[0]
52988
+ yPrice+=item.Line.Offset[0];
52861
52989
  }
52862
52990
  else if (yText<yPrice)
52863
52991
  {
52864
52992
  yText+=item.Line.Offset[1];
52865
- yPrice-=item.Line.Offset[0]
52993
+ yPrice-=item.Line.Offset[0];
52866
52994
  }
52867
52995
  }
52868
52996
  this.Canvas.save();
@@ -178140,7 +178268,7 @@ function ChartScrollText()
178140
178268
 
178141
178269
 
178142
178270
 
178143
- var HQCHART_VERSION="1.1.15897";
178271
+ var HQCHART_VERSION="1.1.15911";
178144
178272
 
178145
178273
  function PrintHQChartVersion()
178146
178274
  {