hqchart 1.1.13740 → 1.1.13746

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.
@@ -1711,7 +1711,7 @@ if(this.FinishChartDrawPicturePoint()){if(drawPicture.IsDrawMain)this.Draw();els
1711
1711
  {var drawPictrueData={};drawPictrueData.X=(e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;drawPictrueData.Y=(e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;if(this.GetChartDrawPictureByPoint(drawPictrueData)){if(this.EnableEraseChartDrawPicture)//擦掉画线
1712
1712
  {this.CurrentChartDrawPicture=null;this.SelectChartDrawPicture=null;this.ClearChartDrawPicture(drawPictrueData.ChartDrawPicture);}else{this.UpDownDrag=null;//画图优先
1713
1713
  this.CurrentChartDrawPicture=drawPictrueData.ChartDrawPicture;this.SelectChartDrawPicture=drawPictrueData.ChartDrawPicture;//当前已有选中的,需要刷下
1714
- var bDraw=false;if(drawPictureActive.Select.Guid&&drawPictureActive.Select.Chart&&drawPictureActive.Select.Chart.IsDrawMain)bDraw=true;else if(drawPictrueData.ChartDrawPicture.IsDrawMain)bDraw=true;if(bDraw)this.Draw();drawPictrueData.ChartDrawPicture.Status=20;drawPictrueData.ChartDrawPicture.ValueToPoint();drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;//this.CurrentChartDrawPicture=drawPictrueData.ChartDrawPicture;
1714
+ var bDraw=false;if(drawPictureActive.Select.Guid&&drawPictureActive.Select.Chart&&drawPictureActive.Select.Chart.IsDrawMain)bDraw=true;else if(drawPictrueData.ChartDrawPicture.IsDrawMain)bDraw=true;if(bDraw)this.Draw();if(drawPictrueData.ChartDrawPicture.EnableMove==true)drawPictrueData.ChartDrawPicture.Status=20;drawPictrueData.ChartDrawPicture.ValueToPoint();drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;//this.CurrentChartDrawPicture=drawPictrueData.ChartDrawPicture;
1715
1715
  //this.SelectChartDrawPicture=drawPictrueData.ChartDrawPicture;
1716
1716
  this.SelectChartDrawPicture.DragInfo={Click:{X:e.clientX,Y:e.clientY}};}var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_DRAWPICTURE);//选中画图工具事件
1717
1717
  if(event&&event.Callback){var sendData={DrawPicture:drawPictrueData.ChartDrawPicture};event.Callback(event,sendData,this);}else{this.OnSelectChartPicture(drawPictrueData.ChartDrawPicture);//选中画图工具事件
@@ -1770,7 +1770,7 @@ var selectedChart={Chart:this.SelectedChart.Selected.Chart,Identify:this.Selecte
1770
1770
  this.PhoneTouchInfo={Start:{X:touches[0].clientX,Y:touches[0].clientY},End:{X:touches[0].clientX,Y:touches[0].clientY}};if(this.SelectChartDrawPicture)this.SelectChartDrawPicture.IsSelected=false;this.SelectChartDrawPicture=null;var isDrawPictrue=false;if(this.CurrentChartDrawPicture)//画图工具模式
1771
1771
  {var drawPicture=this.CurrentChartDrawPicture;if(drawPicture.Status==2)this.SetChartDrawPictureThirdPoint(drag.Click.X,drag.Click.Y,true);else{this.SetChartDrawPictureFirstPoint(drag.Click.X,drag.Click.Y,true);//只有1个点 直接完成
1772
1772
  if(this.FinishChartDrawPicturePoint()){if(drawPicture.IsDrawMain)this.Draw();else this.DrawDynamicInfo({Corss:false,Tooltip:false});}}if(e.cancelable)e.preventDefault();return;}else{var pt=this.PointAbsoluteToRelative(touches[0].clientX,touches[0].clientY,true);var drawPictrueData={X:pt.X,Y:pt.Y};var pixelTatio=GetDevicePixelRatio();//鼠标移动坐标是原始坐标 需要乘以放大倍速
1773
- if(this.GetChartDrawPictureByPoint(drawPictrueData)){drawPictrueData.ChartDrawPicture.Status=20;drawPictrueData.ChartDrawPicture.ValueToPoint();drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;drawPictrueData.ChartDrawPicture.IsSelected=true;this.CurrentChartDrawPicture=drawPictrueData.ChartDrawPicture;this.SelectChartDrawPicture=drawPictrueData.ChartDrawPicture;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_DRAWPICTURE);//选中画图工具事件
1773
+ if(this.GetChartDrawPictureByPoint(drawPictrueData)){if(drawPictrueData.ChartDrawPicture.EnableMove==true)drawPictrueData.ChartDrawPicture.Status=20;drawPictrueData.ChartDrawPicture.ValueToPoint();drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;drawPictrueData.ChartDrawPicture.IsSelected=true;this.CurrentChartDrawPicture=drawPictrueData.ChartDrawPicture;this.SelectChartDrawPicture=drawPictrueData.ChartDrawPicture;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_DRAWPICTURE);//选中画图工具事件
1774
1774
  if(event&&event.Callback){var sendData={DrawPicture:drawPictrueData.ChartDrawPicture};event.Callback(event,sendData,this);}var drawType=0;if(drawPictrueData.ChartDrawPicture.IsDrawMain)drawType=1;else if(drawPictureActive.Select.Guid&&drawPictureActive.Select.Chart&&drawPictureActive.Select.Chart.IsDrawMain)drawType=1;if(drawType==1)this.Draw();if(e.cancelable)e.preventDefault();return;}}if(bStartTimer){//长按2秒,十字光标
1775
1775
  var self=this;this.DragTimer=setTimeout(function(){self.IsPress=true;if(drag.Click.X==drag.LastMove.X&&drag.Click.Y==drag.LastMove.Y)//手指没有移动,出现十字光标
1776
1776
  {var mouseDrag=self.MouseDrag;self.MouseDrag=null;if(self.DragMode==JSCHART_DRAG_ID.CLICK_TOUCH_MODE_ID)self.TouchStatus.CorssCursorShow=true;//十字显示
@@ -4080,15 +4080,21 @@ this.newMethod();delete this.newMethod;this.ClassName="ChartMACD";this.UpColor=g
4080
4080
  return this.PtInBar(x,y,{BarWidth:barWidth});};this.DrawBars=function(lineWidth,bUpBar){var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;var isHSCreen=this.ChartFrame.IsHScreen===true;if(isHSCreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Top;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Left;}if(bUpBar)this.Canvas.strokeStyle=this.UpColor;else this.Canvas.strokeStyle=this.DownColor;var yBottom=this.ChartFrame.GetYFromData(0);this.Canvas.beginPath();var drawCount=0;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var value=this.Data.Data[i];if(value==null)continue;if(bUpBar){if(value<0)continue;}else{if(value>=0)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;}if(x>chartright)break;var y=this.ChartFrame.GetYFromData(value);var xFix=ToFixedPoint2(lineWidth,x);//毛边修正
4081
4081
  if(isHSCreen){this.Canvas.moveTo(yBottom,ToFixedPoint(x));this.Canvas.lineTo(y,ToFixedPoint(x));}else{this.Canvas.moveTo(xFix,yBottom);this.Canvas.lineTo(xFix,y);}++drawCount;}if(drawCount>0)this.Canvas.stroke();};this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(this.NotSupportMessage){this.DrawNotSupportmessage();return;}var dataWidth=this.ChartFrame.DataWidth;var lineWidth=this.LineWidth*GetDevicePixelRatio();if(this.LineWidth==50)lineWidth=dataWidth;else if(lineWidth>dataWidth)lineWidth=dataWidth;var backupLineWidth=this.Canvas.lineWidth;this.Canvas.lineWidth=lineWidth;//上下分开画
4082
4082
  this.DrawBars(lineWidth,true);this.DrawBars(lineWidth,false);this.Canvas.lineWidth=backupLineWidth;};this.GetItemData=function(indexData){if(!indexData)return null;if(!IFrameSplitOperator.IsNumber(indexData.Index))return null;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return null;var index=indexData.Index;if(index<0||index>=this.Data.Data.length)return null;var item=this.Data.Data[index];return[{Value:item,Color:item>0?this.UpColor:this.DownColor,Name:this.Name}];};}function ChartClipColorStick(){this.newMethod=IChartPainting;//派生
4083
- this.newMethod();delete this.newMethod;this.ClassName="ChartClipColorStick";this.UpColor=g_JSChartResource.UpBarColor;this.DownColor=g_JSChartResource.DownBarColor;this.LineWidth=1;//差值线
4084
- this.DownDiffColor=g_JSChartResource.DownBarColor;this.UpDiffColor=g_JSChartResource.UpBarColor;this.BaseLineColor;//基准线
4083
+ this.newMethod();delete this.newMethod;this.ClassName="ChartClipColorStick";this.UpColor=g_JSChartResource.UpBarColor;this.DownColor=g_JSChartResource.DownBarColor;this.LineWidth=1;this.Style=0;//1=同方向 0=上下两个方向
4084
+ //差值线
4085
+ this.DownDiffColor=g_JSChartResource.DownBarColor;this.UpDiffColor=g_JSChartResource.UpBarColor;//文字
4086
+ this.TextLabelConfig={Font:12*GetDevicePixelRatio()+'px \u5FAE\u8F6F\u96C5\u9ED1',TextMargin:{Left:2,Right:2,Bottom:2,Top:2},TextColor:"rgb(230,230,230)",UpColor:"rgb(137,16,19)",DownColor:"rgb(44,104,57)",UnchangeColor:"rgb(111,112,115)",BorderColor:"rgb(0,0,0)",//缓存
4087
+ LabelWidth:0,TextHeight:0,MaxTextWidth:0};this.BaseLineColor;//基准线
4085
4088
  this.BaseValue=0;this.Super_GetMaxMin=this.GetMaxMin;//父类的方法
4086
4089
  this.ValueRange;//{ Max:, Min: } //固定最大最小值
4087
- this.SetOption=function(option){if(!option)return;if(option.UpColor)this.UpColor=option.UpColor;if(option.DownColor)this.DownColor=option.DownColor;if(option.DownDiffColor)this.DownDiffColor=option.DownDiffColor;if(option.UpDiffColor)this.UpDiffColor=option.UpDiffColor;if(option.BaseLineColor)this.BaseLineColor=option.BaseLineColor;if(IFrameSplitOperator.IsNumber(option.BaseValue))this.BaseValue=option.BaseValue;if(option.ValueRange)this.ValueRange=option.ValueRange;};this.Draw=function(){if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(this.NotSupportMessage){this.DrawNotSupportmessage();return;}this.Canvas.save();var dataWidth=this.ChartFrame.DataWidth;var lineWidth=this.LineWidth*GetDevicePixelRatio();if(this.LineWidth==50)lineWidth=dataWidth;else if(lineWidth>dataWidth)lineWidth=dataWidth;if(IFrameSplitOperator.IsNumber(this.BaseValue)&&this.BaseValue!=0){this.DrawBaseLine();if(this.BaseValue>0)this.DrawBars(lineWidth,true);else this.DrawBars(lineWidth,false);}else{//上下分开画
4088
- this.DrawBars(lineWidth,true);this.DrawBars(lineWidth,false);}this.Canvas.restore();};this.DrawBars=function(lineWidth,bUpBar){var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;var isHSCreen=this.ChartFrame.IsHScreen===true;if(isHSCreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Top;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Left;}var yBottom=this.ChartFrame.GetYFromData(this.BaseValue);var aryBar=[],aryDiffBar=[];for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var value=this.Data.Data[i];if(value==null)continue;if(bUpBar){if(value<0)continue;}else{if(value>=0)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;}if(x>chartright)break;var bDiffBar=false;var diffValue=null;if(this.BaseValue>0){if(value<this.BaseValue){bDiffBar=true;diffValue=this.BaseValue-(this.BaseValue-value);}}else if(this.BaseValue<0){if(value>this.BaseValue){bDiffBar=true;diffValue=this.BaseValue+(value-this.BaseValue);}}if(!bDiffBar){var y=this.ChartFrame.GetYFromData(value);aryBar.push({X:x,Y:y});}else{var y=this.ChartFrame.GetYFromData(diffValue);aryDiffBar.push({X:x,Y:y});}}this.Canvas.lineWidth=lineWidth;if(bUpBar)this.Canvas.strokeStyle=this.UpColor;else this.Canvas.strokeStyle=this.DownColor;this.DrawStick(aryBar,lineWidth,yBottom);if(this.BaseValue>0){this.Canvas.strokeStyle=this.UpDiffColor;this.DrawStick(aryDiffBar,lineWidth,yBottom);}else if(this.BaseValue<0){this.Canvas.strokeStyle=this.DownDiffColor;this.DrawStick(aryDiffBar,lineWidth,yBottom);}};this.DrawStick=function(aryData,lineWidth,yBottom){if(!IFrameSplitOperator.IsNonEmptyArray(aryData))return;var isHSCreen=this.ChartFrame.IsHScreen===true;var drawCount=0;this.Canvas.beginPath();for(var i=0;i<aryData.length;++i){var item=aryData[i];var y=item.Y;var xFix=ToFixedPoint2(lineWidth,item.X);//毛边修正
4089
- if(isHSCreen){this.Canvas.moveTo(yBottom,ToFixedPoint(x));this.Canvas.lineTo(y,ToFixedPoint(x));}else{this.Canvas.moveTo(xFix,yBottom);this.Canvas.lineTo(xFix,y);}++drawCount;}if(drawCount>0)this.Canvas.stroke();};this.DrawBaseLine=function(){if(!IFrameSplitOperator.IsNumber(this.BaseValue)||this.BaseValue==0)return;if(!this.BaseLineColor)return;var isHSCreen=this.ChartFrame.IsHScreen===true;var border=this.ChartFrame.GetBorder();var y=this.ChartFrame.GetYFromData(this.BaseValue);this.Canvas.strokeStyle=this.BaseLineColor;this.Canvas.lineWidth=1*GetDevicePixelRatio();if(isHSCreen){}else{var yFix=ToFixedPoint(y);this.Canvas.beginPath();this.Canvas.moveTo(border.Left,yFix);this.Canvas.lineTo(border.Right,yFix);this.Canvas.stroke();}};this.GetMaxMin=function(){if(!IFrameSplitOperator.IsNumber(this.BaseValue)||this.BaseValue==0)return this.Super_GetMaxMin();if(this.ValueRange)//固定最大最小
4090
+ this.IsShowText=false;this.SetOption=function(option){if(!option)return;if(option.UpColor)this.UpColor=option.UpColor;if(option.DownColor)this.DownColor=option.DownColor;if(option.DownDiffColor)this.DownDiffColor=option.DownDiffColor;if(option.UpDiffColor)this.UpDiffColor=option.UpDiffColor;if(option.BaseLineColor)this.BaseLineColor=option.BaseLineColor;if(IFrameSplitOperator.IsNumber(option.BaseValue))this.BaseValue=option.BaseValue;if(IFrameSplitOperator.IsNumber(option.Style))this.Style=option.Style;if(option.ValueRange)this.ValueRange=option.ValueRange;};this.Draw=function(){this.IsShowText=false;this.TextLabelConfig.LabelWidth=0;this.TextLabelConfig.TextHeight=0;this.TextLabelConfig.MaxTextWidth=0;if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;if(this.NotSupportMessage){this.DrawNotSupportmessage();return;}var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;var bHScreen=this.ChartFrame.IsHScreen===true;var lineWidth=this.LineWidth*GetDevicePixelRatio();if(this.LineWidth==50)lineWidth=dataWidth;else if(lineWidth>dataWidth)lineWidth=dataWidth;if(!bHScreen){var itemWidth=dataWidth+distanceWidth;var bMinute=this.IsMinuteFrame();if(bMinute){var border=this.ChartBorder.GetBorder();itemWidth=(border.Right-border.Left)/(xPointCount-1);}this.Canvas.font=this.TextLabelConfig.Font;this.TextLabelConfig.MaxTextWidth=this.Canvas.measureText("-888").width;this.TextLabelConfig.LabelWidth=this.TextLabelConfig.MaxTextWidth+this.TextLabelConfig.TextMargin.Left+this.TextLabelConfig.TextMargin.Right;this.IsShowText=itemWidth>this.TextLabelConfig.LabelWidth;this.TextLabelConfig.TextHeight=this.Canvas.measureText("擎").width;}this.Canvas.save();if(IFrameSplitOperator.IsNumber(this.BaseValue)&&this.BaseValue!=0){this.DrawBaseLine();if(this.BaseValue>0)this.DrawBars(lineWidth,true,true);else this.DrawBars(lineWidth,false,true);}else{//上下分开画
4091
+ this.DrawBars(lineWidth,true,true);this.DrawBars(lineWidth,false);}this.Canvas.restore();};this.DrawBars=function(lineWidth,bUpBar,bDrawLabel){var isMinute=this.IsMinuteFrame();var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var xPointCount=this.ChartFrame.XPointCount;var bHScreen=this.ChartFrame.IsHScreen===true;if(bHScreen){var border=this.ChartBorder.GetHScreenBorder();var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.BottomEx;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Top;}else{var border=this.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;var lockRect=this.GetLockRect();if(lockRect)chartright=lockRect.Left;}var yBottom=this.ChartFrame.GetYFromData(this.BaseValue);var aryBar=[],aryDiffBar=[],aryText=[];var preValue=null;for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var value=this.Data.Data[i];if(value==null)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;}if(x>chartright)break;var textItem={X:x,Value:value};if(IFrameSplitOperator.IsNumber(preValue))textItem.DiffValue=value-preValue;aryText.push(textItem);preValue=value;if(bUpBar){if(value<0)continue;}else{if(value>=0)continue;}var bDiffBar=false;var diffValue=null;if(this.BaseValue>0){if(value<this.BaseValue){bDiffBar=true;if(this.Style==1)diffValue=this.BaseValue+(this.BaseValue-value);else diffValue=this.BaseValue-(this.BaseValue-value);}}else if(this.BaseValue<0){if(value>this.BaseValue){bDiffBar=true;if(this.Style==1)diffValue=this.BaseValue-(value-this.BaseValue);else diffValue=this.BaseValue+(value-this.BaseValue);}}if(!bDiffBar){var y=this.ChartFrame.GetYFromData(value);aryBar.push({X:x,Y:y});}else{var y=this.ChartFrame.GetYFromData(diffValue);aryDiffBar.push({X:x,Y:y});}}this.Canvas.lineWidth=lineWidth;if(bUpBar)this.Canvas.strokeStyle=this.UpColor;else this.Canvas.strokeStyle=this.DownColor;this.DrawStick(aryBar,lineWidth,yBottom);if(this.BaseValue>0){this.Canvas.strokeStyle=this.UpDiffColor;this.DrawStick(aryDiffBar,lineWidth,yBottom);}else if(this.BaseValue<0){this.Canvas.strokeStyle=this.DownDiffColor;this.DrawStick(aryDiffBar,lineWidth,yBottom);}if(this.IsShowText&&bDrawLabel)this.DrawStickText(aryText);};this.DrawStick=function(aryData,lineWidth,yBottom){if(!IFrameSplitOperator.IsNonEmptyArray(aryData))return;var bHScreen=this.ChartFrame.IsHScreen===true;var drawCount=0;this.Canvas.beginPath();for(var i=0;i<aryData.length;++i){var item=aryData[i];var y=item.Y;var xFix=ToFixedPoint2(lineWidth,item.X);//毛边修正
4092
+ if(bHScreen){this.Canvas.moveTo(yBottom,ToFixedPoint(x));this.Canvas.lineTo(y,ToFixedPoint(x));}else{this.Canvas.moveTo(xFix,yBottom);this.Canvas.lineTo(xFix,y);}++drawCount;}if(drawCount>0)this.Canvas.stroke();};this.DrawBaseLine=function(){if(!IFrameSplitOperator.IsNumber(this.BaseValue)||this.BaseValue==0)return;if(!this.BaseLineColor)return;var bHScreen=this.ChartFrame.IsHScreen===true;var border=this.ChartFrame.GetBorder();var y=this.ChartFrame.GetYFromData(this.BaseValue);this.Canvas.strokeStyle=this.BaseLineColor;this.Canvas.lineWidth=1*GetDevicePixelRatio();if(bHScreen){}else{var yFix=ToFixedPoint(y);this.Canvas.beginPath();this.Canvas.moveTo(border.Left,yFix);this.Canvas.lineTo(border.Right,yFix);this.Canvas.stroke();}};this.DrawStickText=function(aryData){var config=this.TextLabelConfig;this.Canvas.font=config.Font;var border=this.ChartBorder.GetBorder();var itemHeight=config.TextHeight*2+config.TextMargin.Bottom+config.TextMargin.Top;for(var i=0;i<aryData.length;++i){var item=aryData[i];var value=item.Value;var xCenter=item.X;var xLeft=xCenter-config.LabelWidth/2;var rtDraw={Left:xLeft,Width:config.LabelWidth,Top:border.BottomEx+1,Height:itemHeight};rtDraw.Right=rtDraw.Left+rtDraw.Width;rtDraw.Bottom=rtDraw.Top+rtDraw.Height;if(IFrameSplitOperator.IsNumber(value)){var bgColor=config.UnchangeColor;if(value>0)bgColor=config.UpColor;else if(value<0)bgColor=config.DownColor;this.DrawTextLabel(value,bgColor,config.BorderColor,config.TextColor,rtDraw,config.TextHeight,config.MaxTextWidth,config.TextMargin);}var value=item.DiffValue;var rtDraw={Left:xLeft,Width:config.LabelWidth,Bottom:border.TopEx-1,Height:itemHeight};rtDraw.Right=rtDraw.Left+rtDraw.Width;rtDraw.Top=rtDraw.Bottom-rtDraw.Height;if(IFrameSplitOperator.IsNumber(value)){var bgColor=config.UnchangeColor;if(value>0)bgColor=config.UpColor;else if(value<0)bgColor=config.DownColor;this.DrawTextLabel(value,bgColor,config.BorderColor,config.TextColor,rtDraw,config.TextHeight,config.MaxTextWidth,config.TextMargin);}}};//数值标签
4093
+ this.DrawTextLabel=function(value,clrGB,clrBorder,clrText,rtDraw,textHeight,textWidth,textMargin){if(clrGB){this.Canvas.fillStyle=clrGB;this.Canvas.fillRect(rtDraw.Left,rtDraw.Top,rtDraw.Width,rtDraw.Height);}if(clrBorder){this.Canvas.lineWidth=2;this.Canvas.strokeStyle=clrBorder;this.Canvas.strokeRect(rtDraw.Left,rtDraw.Top,rtDraw.Width,rtDraw.Height);}else{this.Canvas.lineWidth=1;this.Canvas.strokeStyle="rgb(0,0,0)";this.Canvas.strokeRect(rtDraw.Left,rtDraw.Top,rtDraw.Width,rtDraw.Height);}var aryText=[null,null];//大于3位数的 2行输出
4094
+ var sign="";//负数
4095
+ if(value<0){value=Math.abs(value);sign='-';}if(value>999){var thousand=parseInt(value/1000);var hundred=parseInt(value%1000);aryText[0]=''+sign+thousand;aryText[1]=''+hundred;if(hundred<10)aryText[1]='00'+hundred;else if(hundred<100)aryText[1]='0'+hundred;}else{aryText[1]=''+sign+value.toFixed(0);}this.Canvas.textAlign="right";this.Canvas.textBaseline="top";var xRight=rtDraw.Right-(rtDraw.Right-rtDraw.Left-textWidth)/2;this.Canvas.fillStyle=clrText;var yText=textMargin.Top+rtDraw.Top;for(var i=0;i<aryText.length;++i){var text=aryText[i];if(text){this.Canvas.fillText(text,xRight,yText);}yText+=textHeight;}};this.GetMaxMin=function(){if(!IFrameSplitOperator.IsNumber(this.BaseValue)||this.BaseValue==0)return this.Super_GetMaxMin();if(this.ValueRange)//固定最大最小
4090
4096
  {var range={Min:this.ValueRange.Min,Max:this.ValueRange.Max};return range;}var xPointCount=this.ChartFrame.XPointCount;var start=this.Data.DataOffset;if(this.ChartFrame.GlobalOption&&this.ChartFrame.GlobalOption.IsValueFullRange){start=0;xPointCount=this.Data.Data.length;}var range={Min:null,Max:null},maxDiffValue=null;//基准值的差值
4091
- if(!this.Data||!this.Data.Data)return range;if(this.BaseValue>0)range.Min=this.BaseValue;else range.Max=this.BaseValue;for(var i=start,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var value=this.Data.Data[i];if(value==null||isNaN(value))continue;if(this.BaseValue>0){if(value<0)continue;if(value<this.BaseValue){var diffValue=this.BaseValue-value;if(maxDiffValue==null||maxDiffValue<diffValue)maxDiffValue=diffValue;continue;}}else{if(value>0)continue;if(value>this.BaseValue){var diffValue=value-this.BaseValue;if(maxDiffValue==null||maxDiffValue<diffValue)maxDiffValue=diffValue;continue;}}if(range.Max==null)range.Max=value;if(range.Min==null)range.Min=value;if(range.Max<value)range.Max=value;if(range.Min>value)range.Min=value;}if(this.BaseValue>0){if(IFrameSplitOperator.IsNumber(maxDiffValue)&&IFrameSplitOperator.IsNumber(range.Min))range.Min-=maxDiffValue;}else{if(IFrameSplitOperator.IsNumber(maxDiffValue)&&IFrameSplitOperator.IsNumber(range.Max))range.Max+=maxDiffValue;}return range;};}//柱子
4097
+ if(!this.Data||!this.Data.Data)return range;if(this.BaseValue>0)range.Min=this.BaseValue;else range.Max=this.BaseValue;for(var i=start,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j){var value=this.Data.Data[i];if(value==null||isNaN(value))continue;if(this.BaseValue>0){if(value<0)continue;if(value<this.BaseValue){var diffValue=this.BaseValue-value;if(maxDiffValue==null||maxDiffValue<diffValue)maxDiffValue=diffValue;continue;}}else{if(value>0)continue;if(value>this.BaseValue){var diffValue=value-this.BaseValue;if(maxDiffValue==null||maxDiffValue<diffValue)maxDiffValue=diffValue;continue;}}if(range.Max==null)range.Max=value;if(range.Min==null)range.Min=value;if(range.Max<value)range.Max=value;if(range.Min>value)range.Min=value;}if(this.BaseValue>0){if(this.Style==1){if(IFrameSplitOperator.IsNumber(maxDiffValue)){var value=this.BaseValue+maxDiffValue;if(IFrameSplitOperator.IsNumber(range.Max)||range.Max<value)range.Max=value;}}else{if(IFrameSplitOperator.IsNumber(maxDiffValue)&&IFrameSplitOperator.IsNumber(range.Min))range.Min-=maxDiffValue;}}else{if(this.Style==1){if(IFrameSplitOperator.IsNumber(maxDiffValue)){var value=this.BaseValue-maxDiffValue;if(IFrameSplitOperator.IsNumber(range.Min)||range.Min>value)range.Min=value;}}else{if(IFrameSplitOperator.IsNumber(maxDiffValue)&&IFrameSplitOperator.IsNumber(range.Max))range.Max+=maxDiffValue;}}return range;};}//柱子
4092
4098
  function ChartBar(){this.newMethod=IChartPainting;//派生
4093
4099
  this.newMethod();delete this.newMethod;this.ClassName="ChartBar";this.UpBarColor=g_JSChartResource.UpBarColor;this.DownBarColor=g_JSChartResource.DownBarColor;this.Draw=function(){if(this.ChartFrame.IsMinSize)return;if(this.NotSupportMessage){this.DrawNotSupportmessage();return;}var dataWidth=this.ChartFrame.DataWidth;var distanceWidth=this.ChartFrame.DistanceWidth;var chartright=this.ChartBorder.GetRight();var xPointCount=this.ChartFrame.XPointCount;var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+2.0;var bFirstPoint=true;var drawCount=0;var yBottom=this.ChartFrame.GetYFromData(0);if(dataWidth>=4){yBottom=ToFixedRect(yBottom);//调整为整数
4094
4100
  for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var value=this.Data.Data[i];if(value==null||value==0)continue;var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=this.ChartFrame.GetXFromIndex(j);var y=this.ChartFrame.GetYFromData(value);if(value>0)this.Canvas.fillStyle=this.UpBarColor;else this.Canvas.fillStyle=this.DownBarColor;//高度调整为整数
@@ -7941,7 +7947,7 @@ var touches=this.GetToucheData(e,this.IsForceLandscape);var pt=this.PointAbsolut
7941
7947
  {var pt=self.PointAbsoluteToRelative(drag.Click.X,drag.Click.Y,true);var x=pt.X;var y=pt.Y;self.OnMouseMove(x,y,e);}};if(this.ChartDrawOption.IsLockScreen){this.MouseDrag=drag;if(this.SelectChartDrawPicture)this.SelectChartDrawPicture.IsSelected=false;this.SelectChartDrawPicture=null;if(this.CurrentChartDrawPicture)//画图工具模式
7942
7948
  {var drawPicture=this.CurrentChartDrawPicture;if(drawPicture.Status==2)this.SetChartDrawPictureThirdPoint(drag.Click.X,drag.Click.Y,true);else{this.SetChartDrawPictureFirstPoint(drag.Click.X,drag.Click.Y,true);//只有1个点 直接完成
7943
7949
  if(this.FinishChartDrawPicturePoint())this.DrawDynamicInfo({Corss:false,Tooltip:false});}if(e.cancelable)e.preventDefault();return;}else{var drawPictrueData={};var pixelTatio=GetDevicePixelRatio();//鼠标移动坐标是原始坐标 需要乘以放大倍速
7944
- drawPictrueData.X=touches[0].clientX-uielement.getBoundingClientRect().left;drawPictrueData.Y=touches[0].clientY-uielement.getBoundingClientRect().top;if(this.GetChartDrawPictureByPoint(drawPictrueData)){drawPictrueData.ChartDrawPicture.Status=20;drawPictrueData.ChartDrawPicture.ValueToPoint();drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;drawPictrueData.ChartDrawPicture.IsSelected=true;this.CurrentChartDrawPicture=drawPictrueData.ChartDrawPicture;this.SelectChartDrawPicture=drawPictrueData.ChartDrawPicture;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_DRAWPICTURE);//选中画图工具事件
7950
+ drawPictrueData.X=touches[0].clientX-uielement.getBoundingClientRect().left;drawPictrueData.Y=touches[0].clientY-uielement.getBoundingClientRect().top;if(this.GetChartDrawPictureByPoint(drawPictrueData)){if(drawPictrueData.ChartDrawPicture.EnableMove==true)drawPictrueData.ChartDrawPicture.Status=20;drawPictrueData.ChartDrawPicture.ValueToPoint();drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;drawPictrueData.ChartDrawPicture.IsSelected=true;this.CurrentChartDrawPicture=drawPictrueData.ChartDrawPicture;this.SelectChartDrawPicture=drawPictrueData.ChartDrawPicture;var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_DRAWPICTURE);//选中画图工具事件
7945
7951
  if(event&&event.Callback){var sendData={DrawPicture:drawPictrueData.ChartDrawPicture};event.Callback(event,sendData,this);}if(e.cancelable)e.preventDefault();return;}}}else{if(this.EnableScrollUpDown==true){this.DragTimer=setTimeout(function(){self.IsPress=true;if(drag.Click.X==drag.LastMove.X&&drag.Click.Y==drag.LastMove.Y){var mouseDrag=self.MouseDrag;self.MouseDrag=null;T_ShowCorssCursor();self.PreventTouchEvent(e);}},800);}this.MouseDrag=drag;this.PhoneTouchInfo={Start:{X:touches[0].clientX,Y:touches[0].clientY},End:{X:touches[0].clientX,Y:touches[0].clientY}};this.SelectChartDrawPicture=null;if(this.EnableScrollUpDown==false)T_ShowCorssCursor();//移动十字光标
7946
7952
  else if(this.IsClickShowCorssCursor)T_ShowCorssCursor();}if(this.EnableZoomIndexWindow){this.PhoneDBClick.AddTouchStart(touches[0].clientX,touches[0].clientY,Date.now());JSConsole.Chart.Log("[MinuteChartContainer::OnTouchStart] PhoneDBClick ",this.PhoneDBClick);}this.TouchEvent({EventID:JSCHART_EVENT_ID.ON_PHONE_TOUCH,FunctionName:"OnTouchStart"},e);}else if(this.IsPhonePinching(e)){var phonePinch={"Start":{},"Last":{}};var touches=this.GetToucheData(e,this.IsForceLandscape);phonePinch.Start={"X":touches[0].pageX,"Y":touches[0].pageY,"X2":touches[1].pageX,"Y2":touches[1].pageY};phonePinch.Last={"X":touches[0].pageX,"Y":touches[0].pageY,"X2":touches[1].pageX,"Y2":touches[1].pageY};this.PhonePinch=phonePinch;this.SelectChartDrawPicture=null;}};this.OnTouchMove=function(e){if(this.ChartSplashPaint&&this.ChartSplashPaint.IsEnableSplash==true)return;var touches=this.GetToucheData(e,this.IsForceLandscape);if(this.IsPhoneDragging(e)){var drag=this.MouseDrag;if(drag==null){var pixelTatio=GetDevicePixelRatio();var x=touches[0].clientX-uielement.getBoundingClientRect().left*pixelTatio;var y=touches[0].clientY-uielement.getBoundingClientRect().top*pixelTatio;this.OnMouseMove(x,y,e);}else{var moveAngle=this.GetMoveAngle(drag.LastMove,{X:touches[0].clientX,Y:touches[0].clientY});var moveSetp=Math.abs(drag.LastMove.X-touches[0].clientX);var moveUpDown=Math.abs(drag.LastMove.Y-touches[0].clientY);moveSetp=parseInt(moveSetp);if(this.CurrentChartDrawPicture&&this.CurrentChartDrawPicture.EnableMove===true){var drawPicture=this.CurrentChartDrawPicture;if(drawPicture.Status==1||drawPicture.Status==2){if(moveSetp<5&&moveUpDown<5)return;if(this.SetChartDrawPictureSecondPoint(touches[0].clientX,touches[0].clientY,true)){this.DrawDynamicInfo();}}else if(drawPicture.Status==3){if(this.SetChartDrawPictureThirdPoint(touches[0].clientX,touches[0].clientY,true)){this.DrawDynamicInfo();}}else if(drawPicture.Status==20)//画图工具移动
7947
7953
  {if(moveSetp<5&&moveUpDown<5)return;if(this.MoveChartDrawPicture(touches[0].clientX-drag.LastMove.X,touches[0].clientY-drag.LastMove.Y,true)){this.DrawDynamicInfo();}}drag.LastMove.X=touches[0].clientX;drag.LastMove.Y=touches[0].clientY;}else{//上下滚动
@@ -13780,7 +13786,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
13780
13786
  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);};}/********************************************************************************
13781
13787
  * 版本信息输出
13782
13788
  *
13783
- */var HQCHART_VERSION="1.1.13739";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();//把给外界调用的方法暴露出来
13789
+ */var HQCHART_VERSION="1.1.13745";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();//把给外界调用的方法暴露出来
13784
13790
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
13785
13791
  // BaseIndex:BaseIndex,
13786
13792
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.13740",
3
+ "version": "1.1.13746",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -3652,7 +3652,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
3652
3652
 
3653
3653
  if (bDraw) this.Draw();
3654
3654
 
3655
- drawPictrueData.ChartDrawPicture.Status=20;
3655
+ if (drawPictrueData.ChartDrawPicture.EnableMove==true)
3656
+ drawPictrueData.ChartDrawPicture.Status=20;
3657
+
3656
3658
  drawPictrueData.ChartDrawPicture.ValueToPoint();
3657
3659
  drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;
3658
3660
  //this.CurrentChartDrawPicture=drawPictrueData.ChartDrawPicture;
@@ -4655,7 +4657,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4655
4657
  var pixelTatio = GetDevicePixelRatio(); //鼠标移动坐标是原始坐标 需要乘以放大倍速
4656
4658
  if (this.GetChartDrawPictureByPoint(drawPictrueData))
4657
4659
  {
4658
- drawPictrueData.ChartDrawPicture.Status=20;
4660
+ if (drawPictrueData.ChartDrawPicture.EnableMove==true)
4661
+ drawPictrueData.ChartDrawPicture.Status=20;
4659
4662
  drawPictrueData.ChartDrawPicture.ValueToPoint();
4660
4663
  drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;
4661
4664
  drawPictrueData.ChartDrawPicture.IsSelected=true;
@@ -36043,16 +36046,38 @@ function ChartClipColorStick()
36043
36046
  this.UpColor=g_JSChartResource.UpBarColor;
36044
36047
  this.DownColor=g_JSChartResource.DownBarColor;
36045
36048
  this.LineWidth=1;
36049
+ this.Style=0; //1=同方向 0=上下两个方向
36050
+
36046
36051
  //差值线
36047
36052
  this.DownDiffColor=g_JSChartResource.DownBarColor;
36048
36053
  this.UpDiffColor=g_JSChartResource.UpBarColor;
36049
36054
 
36055
+ //文字
36056
+ this.TextLabelConfig=
36057
+ {
36058
+ Font:`${12*GetDevicePixelRatio()}px 微软雅黑`,
36059
+ TextMargin:{ Left:2, Right:2, Bottom:2, Top:2 },
36060
+ TextColor:"rgb(230,230,230)",
36061
+ UpColor:"rgb(137,16,19)",
36062
+ DownColor:"rgb(44,104,57)",
36063
+ UnchangeColor:"rgb(111,112,115)",
36064
+ BorderColor:"rgb(0,0,0)",
36065
+
36066
+ //缓存
36067
+ LabelWidth:0,
36068
+ TextHeight:0,
36069
+ MaxTextWidth:0,
36070
+ }
36071
+
36050
36072
  this.BaseLineColor; //基准线
36051
36073
 
36052
36074
  this.BaseValue=0;
36053
36075
  this.Super_GetMaxMin=this.GetMaxMin; //父类的方法
36054
36076
  this.ValueRange; //{ Max:, Min: } //固定最大最小值
36055
36077
 
36078
+ this.IsShowText=false;
36079
+
36080
+
36056
36081
  this.SetOption=function(option)
36057
36082
  {
36058
36083
  if (!option) return;
@@ -36063,11 +36088,18 @@ function ChartClipColorStick()
36063
36088
  if (option.UpDiffColor) this.UpDiffColor=option.UpDiffColor;
36064
36089
  if (option.BaseLineColor) this.BaseLineColor=option.BaseLineColor;
36065
36090
  if (IFrameSplitOperator.IsNumber(option.BaseValue)) this.BaseValue=option.BaseValue;
36091
+ if (IFrameSplitOperator.IsNumber(option.Style)) this.Style=option.Style;
36066
36092
  if (option.ValueRange) this.ValueRange=option.ValueRange;
36093
+
36067
36094
  }
36068
36095
 
36069
36096
  this.Draw=function()
36070
36097
  {
36098
+ this.IsShowText=false;
36099
+ this.TextLabelConfig.LabelWidth=0;
36100
+ this.TextLabelConfig.TextHeight=0;
36101
+ this.TextLabelConfig.MaxTextWidth=0;
36102
+
36071
36103
  if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
36072
36104
  if (this.IsShowIndexTitleOnly()) return;
36073
36105
  if (this.IsHideScriptIndex()) return;
@@ -36078,23 +36110,44 @@ function ChartClipColorStick()
36078
36110
  return;
36079
36111
  }
36080
36112
 
36081
- this.Canvas.save();
36082
36113
  var dataWidth=this.ChartFrame.DataWidth;
36114
+ var distanceWidth=this.ChartFrame.DistanceWidth;
36115
+ var xPointCount=this.ChartFrame.XPointCount;
36116
+ var bHScreen=this.ChartFrame.IsHScreen===true;
36117
+
36083
36118
  var lineWidth=this.LineWidth*GetDevicePixelRatio();
36084
36119
  if (this.LineWidth==50) lineWidth=dataWidth;
36085
36120
  else if (lineWidth>dataWidth) lineWidth=dataWidth;
36086
-
36121
+
36122
+ if (!bHScreen)
36123
+ {
36124
+ var itemWidth=dataWidth+distanceWidth;
36125
+ var bMinute=this.IsMinuteFrame();
36126
+ if (bMinute)
36127
+ {
36128
+ var border=this.ChartBorder.GetBorder();
36129
+ itemWidth=(border.Right-border.Left)/(xPointCount-1);
36130
+ }
36131
+
36132
+ this.Canvas.font=this.TextLabelConfig.Font;
36133
+ this.TextLabelConfig.MaxTextWidth=this.Canvas.measureText("-888").width;
36134
+ this.TextLabelConfig.LabelWidth=this.TextLabelConfig.MaxTextWidth+this.TextLabelConfig.TextMargin.Left+this.TextLabelConfig.TextMargin.Right;
36135
+ this.IsShowText=itemWidth>this.TextLabelConfig.LabelWidth;
36136
+ this.TextLabelConfig.TextHeight=this.Canvas.measureText("擎").width;
36137
+ }
36138
+
36139
+ this.Canvas.save();
36087
36140
  if (IFrameSplitOperator.IsNumber(this.BaseValue) && this.BaseValue!=0)
36088
36141
  {
36089
36142
  this.DrawBaseLine();
36090
36143
 
36091
- if (this.BaseValue>0) this.DrawBars(lineWidth, true);
36092
- else this.DrawBars(lineWidth, false);
36144
+ if (this.BaseValue>0) this.DrawBars(lineWidth, true, true);
36145
+ else this.DrawBars(lineWidth, false, true);
36093
36146
  }
36094
36147
  else
36095
36148
  {
36096
36149
  //上下分开画
36097
- this.DrawBars(lineWidth, true);
36150
+ this.DrawBars(lineWidth, true, true);
36098
36151
  this.DrawBars(lineWidth, false);
36099
36152
  }
36100
36153
 
@@ -36102,15 +36155,15 @@ function ChartClipColorStick()
36102
36155
  this.Canvas.restore();
36103
36156
  }
36104
36157
 
36105
- this.DrawBars=function(lineWidth, bUpBar)
36158
+ this.DrawBars=function(lineWidth, bUpBar, bDrawLabel)
36106
36159
  {
36107
36160
  var isMinute=this.IsMinuteFrame();
36108
36161
  var dataWidth=this.ChartFrame.DataWidth;
36109
36162
  var distanceWidth=this.ChartFrame.DistanceWidth;
36110
36163
  var xPointCount=this.ChartFrame.XPointCount;
36111
- var isHSCreen=this.ChartFrame.IsHScreen===true;
36164
+ var bHScreen=this.ChartFrame.IsHScreen===true;
36112
36165
 
36113
- if (isHSCreen)
36166
+ if (bHScreen)
36114
36167
  {
36115
36168
  var border=this.ChartBorder.GetHScreenBorder();
36116
36169
  var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
@@ -36129,19 +36182,12 @@ function ChartClipColorStick()
36129
36182
  }
36130
36183
 
36131
36184
  var yBottom=this.ChartFrame.GetYFromData(this.BaseValue);
36132
- var aryBar=[], aryDiffBar=[];
36185
+ var aryBar=[], aryDiffBar=[], aryText=[];
36186
+ var preValue=null;
36133
36187
  for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
36134
36188
  {
36135
36189
  var value=this.Data.Data[i];
36136
36190
  if (value==null) continue;
36137
- if (bUpBar)
36138
- {
36139
- if (value<0) continue;
36140
- }
36141
- else
36142
- {
36143
- if (value>=0) continue;
36144
- }
36145
36191
 
36146
36192
  if (isMinute)
36147
36193
  {
@@ -36157,6 +36203,21 @@ function ChartClipColorStick()
36157
36203
 
36158
36204
  if (x>chartright) break;
36159
36205
 
36206
+ var textItem={ X:x, Value:value };
36207
+ if (IFrameSplitOperator.IsNumber(preValue)) textItem.DiffValue=value-preValue;
36208
+ aryText.push(textItem);
36209
+
36210
+ preValue=value;
36211
+
36212
+ if (bUpBar)
36213
+ {
36214
+ if (value<0) continue;
36215
+ }
36216
+ else
36217
+ {
36218
+ if (value>=0) continue;
36219
+ }
36220
+
36160
36221
  var bDiffBar=false;
36161
36222
  var diffValue=null;
36162
36223
  if (this.BaseValue>0)
@@ -36164,7 +36225,10 @@ function ChartClipColorStick()
36164
36225
  if (value<this.BaseValue)
36165
36226
  {
36166
36227
  bDiffBar=true;
36167
- diffValue=this.BaseValue-(this.BaseValue-value);
36228
+ if (this.Style==1)
36229
+ diffValue=this.BaseValue+(this.BaseValue-value);
36230
+ else
36231
+ diffValue=this.BaseValue-(this.BaseValue-value);
36168
36232
  }
36169
36233
  }
36170
36234
  else if (this.BaseValue<0)
@@ -36172,19 +36236,22 @@ function ChartClipColorStick()
36172
36236
  if (value>this.BaseValue)
36173
36237
  {
36174
36238
  bDiffBar=true;
36175
- diffValue=this.BaseValue+(value-this.BaseValue)
36239
+ if (this.Style==1)
36240
+ diffValue=this.BaseValue-(value-this.BaseValue);
36241
+ else
36242
+ diffValue=this.BaseValue+(value-this.BaseValue)
36176
36243
  }
36177
36244
  }
36178
36245
 
36179
36246
  if (!bDiffBar)
36180
36247
  {
36181
36248
  var y=this.ChartFrame.GetYFromData(value);
36182
- aryBar.push({X:x, Y:y});
36249
+ aryBar.push({X:x, Y:y });
36183
36250
  }
36184
36251
  else
36185
36252
  {
36186
36253
  var y=this.ChartFrame.GetYFromData(diffValue);
36187
- aryDiffBar.push({X:x, Y:y});
36254
+ aryDiffBar.push({X:x, Y:y });
36188
36255
  }
36189
36256
  }
36190
36257
 
@@ -36193,6 +36260,7 @@ function ChartClipColorStick()
36193
36260
  else this.Canvas.strokeStyle=this.DownColor;
36194
36261
 
36195
36262
  this.DrawStick(aryBar,lineWidth,yBottom);
36263
+
36196
36264
 
36197
36265
  if (this.BaseValue>0)
36198
36266
  {
@@ -36205,13 +36273,14 @@ function ChartClipColorStick()
36205
36273
  this.DrawStick(aryDiffBar,lineWidth,yBottom);
36206
36274
  }
36207
36275
 
36276
+ if (this.IsShowText && bDrawLabel) this.DrawStickText(aryText);
36208
36277
  }
36209
36278
 
36210
36279
  this.DrawStick=function(aryData, lineWidth, yBottom)
36211
36280
  {
36212
36281
  if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) return;
36213
36282
 
36214
- var isHSCreen=this.ChartFrame.IsHScreen===true;
36283
+ var bHScreen=this.ChartFrame.IsHScreen===true;
36215
36284
  var drawCount=0;
36216
36285
  this.Canvas.beginPath();
36217
36286
  for(var i=0; i<aryData.length; ++i)
@@ -36220,7 +36289,7 @@ function ChartClipColorStick()
36220
36289
  var y=item.Y;
36221
36290
  var xFix=ToFixedPoint2(lineWidth, item.X); //毛边修正
36222
36291
 
36223
- if (isHSCreen)
36292
+ if (bHScreen)
36224
36293
  {
36225
36294
  this.Canvas.moveTo(yBottom,ToFixedPoint(x));
36226
36295
  this.Canvas.lineTo(y,ToFixedPoint(x));
@@ -36242,14 +36311,14 @@ function ChartClipColorStick()
36242
36311
  if (!IFrameSplitOperator.IsNumber(this.BaseValue) || this.BaseValue==0) return;
36243
36312
  if (!this.BaseLineColor) return;
36244
36313
 
36245
- var isHSCreen=this.ChartFrame.IsHScreen===true;
36314
+ var bHScreen=this.ChartFrame.IsHScreen===true;
36246
36315
  var border=this.ChartFrame.GetBorder();
36247
36316
  var y=this.ChartFrame.GetYFromData(this.BaseValue);
36248
36317
 
36249
36318
  this.Canvas.strokeStyle=this.BaseLineColor;
36250
36319
  this.Canvas.lineWidth=1*GetDevicePixelRatio();
36251
36320
 
36252
- if (isHSCreen)
36321
+ if (bHScreen)
36253
36322
  {
36254
36323
 
36255
36324
  }
@@ -36263,6 +36332,107 @@ function ChartClipColorStick()
36263
36332
  }
36264
36333
  }
36265
36334
 
36335
+ this.DrawStickText=function(aryData)
36336
+ {
36337
+ var config=this.TextLabelConfig;
36338
+ this.Canvas.font=config.Font;
36339
+ var border=this.ChartBorder.GetBorder();
36340
+ var itemHeight=config.TextHeight*2+config.TextMargin.Bottom+config.TextMargin.Top;
36341
+ for(var i=0; i<aryData.length; ++i)
36342
+ {
36343
+ var item=aryData[i];
36344
+ var value=item.Value;
36345
+ var xCenter=item.X;
36346
+ var xLeft=xCenter-config.LabelWidth/2;
36347
+
36348
+ var rtDraw={ Left:xLeft, Width:config.LabelWidth, Top:border.BottomEx+1, Height:itemHeight };
36349
+ rtDraw.Right=rtDraw.Left+rtDraw.Width;
36350
+ rtDraw.Bottom=rtDraw.Top+rtDraw.Height;
36351
+ if (IFrameSplitOperator.IsNumber(value))
36352
+ {
36353
+ var bgColor=config.UnchangeColor;
36354
+ if (value>0) bgColor=config.UpColor;
36355
+ else if (value<0) bgColor=config.DownColor;
36356
+ this.DrawTextLabel(value, bgColor, config.BorderColor, config.TextColor, rtDraw, config.TextHeight, config.MaxTextWidth, config.TextMargin);
36357
+ }
36358
+
36359
+ var value=item.DiffValue;
36360
+ var rtDraw={ Left:xLeft, Width:config.LabelWidth, Bottom:border.TopEx-1, Height:itemHeight };
36361
+ rtDraw.Right=rtDraw.Left+rtDraw.Width;
36362
+ rtDraw.Top=rtDraw.Bottom-rtDraw.Height;
36363
+ if (IFrameSplitOperator.IsNumber(value))
36364
+ {
36365
+ var bgColor=config.UnchangeColor;
36366
+ if (value>0) bgColor=config.UpColor;
36367
+ else if (value<0) bgColor=config.DownColor;
36368
+ this.DrawTextLabel(value, bgColor, config.BorderColor, config.TextColor, rtDraw, config.TextHeight, config.MaxTextWidth, config.TextMargin);
36369
+ }
36370
+ }
36371
+ }
36372
+
36373
+ //数值标签
36374
+ this.DrawTextLabel=function(value, clrGB, clrBorder, clrText, rtDraw, textHeight, textWidth, textMargin)
36375
+ {
36376
+ if (clrGB)
36377
+ {
36378
+ this.Canvas.fillStyle=clrGB;
36379
+ this.Canvas.fillRect(rtDraw.Left ,rtDraw.Top, (rtDraw.Width), (rtDraw.Height));
36380
+ }
36381
+
36382
+ if (clrBorder)
36383
+ {
36384
+ this.Canvas.lineWidth=2;
36385
+ this.Canvas.strokeStyle=clrBorder;
36386
+ this.Canvas.strokeRect(rtDraw.Left, rtDraw.Top, rtDraw.Width, rtDraw.Height);
36387
+ }
36388
+ else
36389
+ {
36390
+ this.Canvas.lineWidth=1;
36391
+ this.Canvas.strokeStyle="rgb(0,0,0)";
36392
+ this.Canvas.strokeRect(rtDraw.Left, rtDraw.Top, rtDraw.Width, rtDraw.Height);
36393
+ }
36394
+
36395
+ var aryText=[null, null]; //大于3位数的 2行输出
36396
+ var sign=""; //负数
36397
+ if (value<0)
36398
+ {
36399
+ value=Math.abs(value);
36400
+ sign='-';
36401
+ }
36402
+
36403
+ if (value>999)
36404
+ {
36405
+ var thousand=parseInt(value/1000);
36406
+ var hundred=parseInt(value%1000);
36407
+
36408
+ aryText[0]=`${sign}${thousand}`;
36409
+ aryText[1]=`${hundred}`;
36410
+ if (hundred<10) aryText[1]=`00${hundred}`;
36411
+ else if (hundred<100) aryText[1]=`0${hundred}`;
36412
+ }
36413
+ else
36414
+ {
36415
+ aryText[1]=`${sign}${value.toFixed(0)}`;
36416
+ }
36417
+
36418
+ this.Canvas.textAlign="right";
36419
+ this.Canvas.textBaseline="top";
36420
+ var xRight=rtDraw.Right-(rtDraw.Right-rtDraw.Left-textWidth)/2;
36421
+
36422
+ this.Canvas.fillStyle=clrText;
36423
+ var yText=textMargin.Top+rtDraw.Top;
36424
+ for(var i=0;i<aryText.length;++i)
36425
+ {
36426
+ var text=aryText[i];
36427
+ if (text)
36428
+ {
36429
+ this.Canvas.fillText(text,xRight,yText);
36430
+ }
36431
+
36432
+ yText+=textHeight;
36433
+ }
36434
+ }
36435
+
36266
36436
  this.GetMaxMin=function()
36267
36437
  {
36268
36438
  if (!IFrameSplitOperator.IsNumber(this.BaseValue) || this.BaseValue==0)
@@ -36325,13 +36495,36 @@ function ChartClipColorStick()
36325
36495
 
36326
36496
  if (this.BaseValue>0)
36327
36497
  {
36328
- if (IFrameSplitOperator.IsNumber(maxDiffValue) && IFrameSplitOperator.IsNumber(range.Min))
36329
- range.Min-=maxDiffValue;
36498
+ if (this.Style==1)
36499
+ {
36500
+ if (IFrameSplitOperator.IsNumber(maxDiffValue))
36501
+ {
36502
+ var value=this.BaseValue+maxDiffValue;
36503
+ if (IFrameSplitOperator.IsNumber(range.Max) || range.Max<value) range.Max=value;
36504
+ }
36505
+ }
36506
+ else
36507
+ {
36508
+ if (IFrameSplitOperator.IsNumber(maxDiffValue) && IFrameSplitOperator.IsNumber(range.Min))
36509
+ range.Min-=maxDiffValue;
36510
+ }
36511
+
36330
36512
  }
36331
36513
  else
36332
36514
  {
36333
- if (IFrameSplitOperator.IsNumber(maxDiffValue) && IFrameSplitOperator.IsNumber(range.Max))
36334
- range.Max+=maxDiffValue;
36515
+ if (this.Style==1)
36516
+ {
36517
+ if (IFrameSplitOperator.IsNumber(maxDiffValue))
36518
+ {
36519
+ var value=this.BaseValue-maxDiffValue;
36520
+ if (IFrameSplitOperator.IsNumber(range.Min) || range.Min>value) range.Min=value;
36521
+ }
36522
+ }
36523
+ else
36524
+ {
36525
+ if (IFrameSplitOperator.IsNumber(maxDiffValue) && IFrameSplitOperator.IsNumber(range.Max))
36526
+ range.Max+=maxDiffValue;
36527
+ }
36335
36528
  }
36336
36529
 
36337
36530
  return range;
@@ -79590,8 +79783,8 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
79590
79783
  drawPictrueData.Y=(touches[0].clientY-uielement.getBoundingClientRect().top);
79591
79784
  if (this.GetChartDrawPictureByPoint(drawPictrueData))
79592
79785
  {
79593
-
79594
- drawPictrueData.ChartDrawPicture.Status=20;
79786
+ if (drawPictrueData.ChartDrawPicture.EnableMove==true)
79787
+ drawPictrueData.ChartDrawPicture.Status=20;
79595
79788
  drawPictrueData.ChartDrawPicture.ValueToPoint();
79596
79789
  drawPictrueData.ChartDrawPicture.MovePointIndex=drawPictrueData.PointIndex;
79597
79790
  drawPictrueData.ChartDrawPicture.IsSelected=true;