hqchart 1.1.14552 → 1.1.14555

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.
@@ -30,6 +30,17 @@ function JSPopMinuteChart()
30
30
  Option:JSPopMinuteChart.GetMinuteOption(),
31
31
  JSChart:null,
32
32
  Date:null,
33
+ Symbol:null,
34
+ Name:null,
35
+ Chart:null,
36
+ }
37
+
38
+ this.ClearCache=function()
39
+ {
40
+ this.Minute.Date=null;
41
+ this.Minute.Symbol=null;
42
+ this.Minute.Name=null;
43
+ this.Minute.Chart=null;
33
44
  }
34
45
 
35
46
  this.Inital=function(hqchart, option)
@@ -43,6 +54,11 @@ function JSPopMinuteChart()
43
54
  var item=CloneData(option.Option); //复制一份出来
44
55
  this.Minute.Option=Object.assign(this.Minute.Option,item);
45
56
  }
57
+
58
+ if (option.EnableMarkBG) //标记背景
59
+ {
60
+ this.HQChart.CreateExtendChart("MarkPopMinutePaint");
61
+ }
46
62
  }
47
63
  }
48
64
 
@@ -83,6 +99,15 @@ function JSPopMinuteChart()
83
99
  if (this.HQChart) this.Minute.Option.Language=g_JSChartLocalization.GetLanguageName(this.HQChart.LanguageID);
84
100
  this.Minute.Option.OnCreatedCallback=(chart)=>{ this.OnCreateHQChart(chart); }
85
101
  this.Minute.Option.NetworkFilter=(data, callback)=>{ this.NetworkFilter(data, callback); }
102
+
103
+ this.Minute.Option.EventCallback=
104
+ [
105
+ {
106
+ event:JSCHART_EVENT_ID.ON_KEYDOWN, //键盘消息
107
+ callback:(event, data, obj)=>{ this.OnKeyDown(event, data, obj); }
108
+ },
109
+ ];
110
+
86
111
  chart.SetOption(this.Minute.Option); //设置K线配置
87
112
 
88
113
  document.body.appendChild(divDom);
@@ -143,14 +168,16 @@ function JSPopMinuteChart()
143
168
  if (!data.Symbol || !IFrameSplitOperator.IsPlusNumber(data.Date)) return;
144
169
 
145
170
  this.Date=data.Date;
146
- var name=data.Symbol;
147
- if (data.Name) name=data.Name;
148
- var title=`${name} ${IFrameSplitOperator.FormatDateString(data.Date)} 分时图`
149
- this.TitleBox.DivName.innerText=title;
171
+ this.Symbol=this.Name=data.Symbol;
172
+ if (data.Name) this.Name=data.Name;
173
+ this.Chart=data.Chart;
174
+
175
+ this.UpdateDialogTitle();
150
176
 
151
177
  if (this.Minute.JSChart)
152
178
  {
153
- this.Minute.JSChart.ChangeSymbol(data.Symbol);
179
+ this.Minute.JSChart.ChangeSymbol(this.Symbol);
180
+ this.MarkKLineBG();
154
181
  }
155
182
 
156
183
  if (!this.Minute.Option.EnableResize)
@@ -173,11 +200,19 @@ function JSPopMinuteChart()
173
200
  this.DivDialog.style.left = x + "px";
174
201
  }
175
202
 
203
+ this.UpdateDialogTitle=function()
204
+ {
205
+ var title=`${this.Name} ${IFrameSplitOperator.FormatDateString(this.Date)} 分时图 PageUp/PageDown翻页`;
206
+ this.TitleBox.DivName.innerText=title;
207
+ }
208
+
176
209
  this.Close=function(e)
177
210
  {
178
211
  if (!this.DivDialog) return;
179
212
 
213
+ this.ClearCache();
180
214
  this.DivDialog.style.visibility='hidden';
215
+ this.ClearMarkKLineBG();
181
216
  }
182
217
 
183
218
  this.OnMouseDownTitle=function(e)
@@ -239,6 +274,114 @@ function JSPopMinuteChart()
239
274
 
240
275
  if (this.Minute.JSChart) this.Minute.JSChart.SetLanguage(language);
241
276
  }
277
+
278
+
279
+ this.OnKeyDown=function(event, data, obj)
280
+ {
281
+ switch(data.KeyID)
282
+ {
283
+ case 33: //page up
284
+ data.PreventDefault=true;
285
+ var date=this.GetNextDate(1);
286
+ if (IFrameSplitOperator.IsPlusNumber(date)) this.ChangeDate(date);
287
+ break;
288
+ case 34: //page down
289
+ data.PreventDefault=true;
290
+ var date=this.GetNextDate(-1);
291
+ if (IFrameSplitOperator.IsPlusNumber(date)) this.ChangeDate(date);
292
+ break;
293
+ default:
294
+ return;
295
+ }
296
+ }
297
+
298
+ this.GetNextDate=function(step)
299
+ {
300
+ if (!this.Chart) return null;
301
+ if (!IFrameSplitOperator.IsNumber(this.Date)) return null;
302
+ if (step==0) return null;
303
+
304
+ var kData=this.Chart.Data;
305
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return null;
306
+
307
+ var index=-1;
308
+ for(var i=0;i<kData.Data.length;++i)
309
+ {
310
+ var kItem=kData.Data[i];
311
+ if (!kItem) continue;
312
+
313
+ if (kItem.Date==this.Date)
314
+ {
315
+ index=i;
316
+ break;
317
+ }
318
+ }
319
+
320
+ if (index<0) return null;
321
+
322
+ var date=null;
323
+ if (step>0)
324
+ {
325
+ for(var i=1, j=0;j<step && index+i<kData.Data.length;++i)
326
+ {
327
+ var kItem=kData.Data[index+i];
328
+ if (!kItem || !IFrameSplitOperator.IsNumber(kItem.Date)) continue;
329
+
330
+ date=kItem.Date;
331
+ ++j;
332
+ }
333
+ }
334
+ else
335
+ {
336
+ step=Math.abs(step);
337
+ for(var i=1, j=0;j<step && index-i>=0;++i)
338
+ {
339
+ var kItem=kData.Data[index-i];
340
+ if (!kItem || !IFrameSplitOperator.IsNumber(kItem.Date)) continue;
341
+
342
+ date=kItem.Date;
343
+ ++j;
344
+ }
345
+ }
346
+
347
+ if (date==this.Date) return null;
348
+
349
+ return date;
350
+ }
351
+
352
+ //修改日期
353
+ this.ChangeDate=function(date)
354
+ {
355
+ if (!this.Minute.JSChart) return;
356
+
357
+ this.Date=date;
358
+ this.UpdateDialogTitle();
359
+ this.Minute.JSChart.ChangeSymbol(this.Symbol);
360
+ this.MarkKLineBG();
361
+ }
362
+
363
+ this.MarkKLineBG=function()
364
+ {
365
+ if (!this.HQChart) return;
366
+
367
+ var finder=this.HQChart.GetExtendChartByClassName("MarkPopMinutePaint");
368
+ if (!finder || !finder.Chart) return;
369
+
370
+ finder.Chart.SetDate([this.Date]);
371
+ this.HQChart.Draw();
372
+
373
+ }
374
+
375
+ this.ClearMarkKLineBG=function()
376
+ {
377
+ if (!this.HQChart) return;
378
+
379
+ var finder=this.HQChart.GetExtendChartByClassName("MarkPopMinutePaint");
380
+ if (!finder || !finder.Chart) return;
381
+
382
+ finder.Chart.ClearData();
383
+ this.HQChart.Draw();
384
+ }
242
385
  }
243
386
 
244
387
 
@@ -570,6 +713,118 @@ JSTooltipMinuteChart.GetMinuteOption=function()
570
713
  }
571
714
 
572
715
 
716
+ ///////////////////////////////////////////////////////
717
+ // K线上标记选中
718
+
719
+ function MarkPopMinutePaint()
720
+ {
721
+ this.newMethod=IExtendChartPainting; //派生
722
+ this.newMethod();
723
+ delete this.newMethod;
724
+
725
+ this.ClassName="MarkPopMinutePaint";
726
+ this.MapDate; //标记日期
727
+ this.BGColor="rgba(100,100,100,0.2)";
728
+ this.LineWidth=g_JSChartResource.PopMinuteChart.Mark.LineWidth;
729
+ this.LineColor=g_JSChartResource.PopMinuteChart.Mark.LineColor;
730
+ this.SubFrame;
731
+ this.IsDynamic=true;
732
+
733
+
734
+ this.ReloadResource=function(resource)
735
+ {
736
+ this.LineWidth=g_JSChartResource.PopMinuteChart.Mark.LineWidth;
737
+ this.LineColor=g_JSChartResource.PopMinuteChart.Mark.LineColor;
738
+ }
739
+
740
+ this.SetDate=function(aryDate)
741
+ {
742
+ this.MapDate=new Map();
743
+ if (IFrameSplitOperator.IsNonEmptyArray(aryDate))
744
+ {
745
+ for(var i=0;i<aryDate.length;++i)
746
+ {
747
+ var date=aryDate[i];
748
+ this.MapDate.set(date, { Date:date} );
749
+ }
750
+ }
751
+ }
752
+
753
+ this.ClearData=function()
754
+ {
755
+ this.MapDate=null;
756
+ }
757
+
758
+ this.Draw=function()
759
+ {
760
+ this.SubFrame=null;
761
+ if (!this.HQChart) return;
762
+ if (!this.ChartFrame || !IFrameSplitOperator.IsNonEmptyArray(this.ChartFrame.SubFrame)) return;
763
+ if (!this.MapDate || this.MapDate.size<=0) return;
764
+
765
+ var kData=this.HQChart.GetKData();
766
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return;
767
+ this.SubFrame=this.ChartFrame.SubFrame[0].Frame;
768
+ if (!this.SubFrame) return;
769
+
770
+ var dataWidth=this.SubFrame.DataWidth;
771
+ var distanceWidth=this.SubFrame.DistanceWidth;
772
+ var xPointCount=this.SubFrame.XPointCount;
773
+ var border=this.SubFrame.GetBorder();
774
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
775
+ var chartright=border.RightEx;
776
+
777
+ var startIndex=kData.DataOffset;
778
+ var aryBG=[];
779
+ for(var i=startIndex,j=0;i<kData.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
780
+ {
781
+ var kItem=kData.Data[i];
782
+ if (!kItem) continue;
783
+ if (!this.MapDate.has(kItem.Date)) continue
784
+
785
+ var left=xOffset;
786
+ var right=xOffset+dataWidth;
787
+ var x=left+(right-left)/2;
788
+
789
+ var bgItem={ Left:left, XCenter:x, Right:right, DataIndex:i, DataWidth:dataWidth };
790
+ aryBG.push(bgItem);
791
+ }
792
+
793
+ if (IFrameSplitOperator.IsNonEmptyArray(aryBG))
794
+ {
795
+ this.Canvas.save();
796
+ this.DrawBG(aryBG);
797
+ this.Canvas.restore();
798
+ }
799
+
800
+ this.SubFrame=null;
801
+ }
802
+
803
+ this.DrawBG=function(aryBG)
804
+ {
805
+ var border=this.ChartFrame.ChartBorder.GetBorder();
806
+ var pixelRatio=GetDevicePixelRatio();
807
+ if (this.MapDate.size==1) //标记一天
808
+ {
809
+ var item=aryBG[0];
810
+ var lineWidth=this.LineWidth*pixelRatio;
811
+ if (item.DataWidth<=4) lineWidth=1*pixelRatio;
812
+
813
+ this.Canvas.lineWidth=lineWidth;
814
+ this.Canvas.strokeStyle=this.LineColor;
815
+ this.Canvas.beginPath();
816
+ this.Canvas.moveTo(item.XCenter,border.TopEx);
817
+ this.Canvas.lineTo(item.XCenter,border.BottomEx);
818
+ this.Canvas.stroke();
819
+ }
820
+ }
821
+ }
822
+
823
+
824
+ JSChart.RegisterExtendChartClass("MarkPopMinutePaint", { Create:function() { return new MarkPopMinutePaint}} );
825
+
826
+
827
+
573
828
 
574
829
 
575
830
 
@@ -6986,16 +6986,16 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6986
6986
  {
6987
6987
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
6988
6988
 
6989
+ var keyID = e.keyCode ? e.keyCode :e.which;
6990
+
6989
6991
  //回调事件
6990
6992
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_KEYDOWN);
6991
6993
  if (event && event.Callback)
6992
6994
  {
6993
- var sendData={ e:e, PreventDefault:false };
6995
+ var sendData={ e:e, KeyID:keyID, PreventDefault:false };
6994
6996
  event.Callback(event, sendData, this);
6995
6997
  if (sendData.PreventDefault) return;
6996
6998
  }
6997
-
6998
- var keyID = e.keyCode ? e.keyCode :e.which;
6999
6999
 
7000
7000
  var draw=false;
7001
7001
  if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
@@ -36087,8 +36087,7 @@ function ChartStickLine()
36087
36087
  this.Width=0; //柱子宽度 0=1 3,50=k线宽度 101=K线宽度+间距宽度
36088
36088
  this.IsHScreen=false;
36089
36089
 
36090
- this.EmptyBGColor=null; //空心柱子背景色(缓存)
36091
- this.BarCache={ }; //Type:1=线段 2=柱子
36090
+ this.BarCache={ Type:0 }; //Type:1=线段 2=柱子
36092
36091
 
36093
36092
  this.SetEmptyBar=function() //设置空心柱子
36094
36093
  {
@@ -72079,6 +72078,12 @@ function JSChartResource()
72079
72078
 
72080
72079
  TitleColor:'rgb(250,250,250)', //标题颜色
72081
72080
  TitleBGColor:"rgb(200, 66, 69)", //标题背景颜色
72081
+
72082
+ Mark:
72083
+ {
72084
+ LineColor:"rgba(255,165,0,0.6)",
72085
+ LineWidth:2,
72086
+ }
72082
72087
  }
72083
72088
 
72084
72089
  this.PopKLineChart=
@@ -73685,6 +73690,11 @@ function JSChartResource()
73685
73690
  if (item.BorderColor) dest.BorderColor=item.BorderColor;
73686
73691
  if (item.TitleColor) dest.TitleColor=item.TitleColor;
73687
73692
  if (item.TitleBGColor) dest.TitleBGColor=item.TitleBGColor;
73693
+ if (item.Mark)
73694
+ {
73695
+ if (item.Mark.LineColor) dest.Mark.LineColor=item.Mark.LineColor;
73696
+ if (IFrameSplitOperator.IsNumber(item.Mark.LineWidth)) dest.Mark.LineWidth=item.Mark.LineWidth;
73697
+ }
73688
73698
  }
73689
73699
 
73690
73700
  if (style.PopKLineChart)
@@ -77173,6 +77183,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77173
77183
  this.ShowMinuteChartDialog=function(data, x,y)
77174
77184
  {
77175
77185
  if (!this.PopMinuteChart) return;
77186
+ if (!ChartData.IsDayPeriod(this.Period,true)) return; //只支持日K
77176
77187
  if (!data.Tooltip || !data.Chart) return;
77177
77188
 
77178
77189
  var pixelRatio=GetDevicePixelRatio();
@@ -77198,7 +77209,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77198
77209
 
77199
77210
  if (!symbol) return;
77200
77211
 
77201
- this.PopMinuteChart.Show({ Date:date, Symbol:symbol, Data:data.Tooltip.Data }, x/pixelRatio,y/pixelRatio);
77212
+ this.PopMinuteChart.Show({ Date:date, Symbol:symbol, Data:data.Tooltip.Data, Chart:data.Tooltip.ChartPaint }, x/pixelRatio,y/pixelRatio);
77202
77213
  }
77203
77214
 
77204
77215
 
@@ -86024,17 +86035,17 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86024
86035
 
86025
86036
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
86026
86037
 
86038
+ var keyID = e.keyCode ? e.keyCode :e.which;
86039
+
86027
86040
  //回调事件
86028
86041
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_KEYDOWN);
86029
86042
  if (event && event.Callback)
86030
86043
  {
86031
- var sendData={ e:e, PreventDefault:false };
86044
+ var sendData={ e:e, KeyID:keyID, PreventDefault:false };
86032
86045
  event.Callback(event, sendData, this);
86033
86046
  if (sendData.PreventDefault) return;
86034
86047
  }
86035
86048
 
86036
- var keyID = e.keyCode ? e.keyCode :e.which;
86037
-
86038
86049
  var draw=false;
86039
86050
  if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
86040
86051
  {
@@ -95,6 +95,11 @@ function GetBlackStyle()
95
95
  {
96
96
  BGColor:"rgba(0,0,0,0.85)",
97
97
  BorderColor:"rgb(230,230,230)",
98
+
99
+ Mark:
100
+ {
101
+ LineColor:"rgba(255,215,0,0.6)",
102
+ }
98
103
  },
99
104
 
100
105
  PopKLineChart:
@@ -10911,16 +10911,16 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10911
10911
  {
10912
10912
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
10913
10913
 
10914
+ var keyID = e.keyCode ? e.keyCode :e.which;
10915
+
10914
10916
  //回调事件
10915
10917
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_KEYDOWN);
10916
10918
  if (event && event.Callback)
10917
10919
  {
10918
- var sendData={ e:e, PreventDefault:false };
10920
+ var sendData={ e:e, KeyID:keyID, PreventDefault:false };
10919
10921
  event.Callback(event, sendData, this);
10920
10922
  if (sendData.PreventDefault) return;
10921
10923
  }
10922
-
10923
- var keyID = e.keyCode ? e.keyCode :e.which;
10924
10924
 
10925
10925
  var draw=false;
10926
10926
  if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
@@ -40012,8 +40012,7 @@ function ChartStickLine()
40012
40012
  this.Width=0; //柱子宽度 0=1 3,50=k线宽度 101=K线宽度+间距宽度
40013
40013
  this.IsHScreen=false;
40014
40014
 
40015
- this.EmptyBGColor=null; //空心柱子背景色(缓存)
40016
- this.BarCache={ }; //Type:1=线段 2=柱子
40015
+ this.BarCache={ Type:0 }; //Type:1=线段 2=柱子
40017
40016
 
40018
40017
  this.SetEmptyBar=function() //设置空心柱子
40019
40018
  {
@@ -76004,6 +76003,12 @@ function JSChartResource()
76004
76003
 
76005
76004
  TitleColor:'rgb(250,250,250)', //标题颜色
76006
76005
  TitleBGColor:"rgb(200, 66, 69)", //标题背景颜色
76006
+
76007
+ Mark:
76008
+ {
76009
+ LineColor:"rgba(255,165,0,0.6)",
76010
+ LineWidth:2,
76011
+ }
76007
76012
  }
76008
76013
 
76009
76014
  this.PopKLineChart=
@@ -77610,6 +77615,11 @@ function JSChartResource()
77610
77615
  if (item.BorderColor) dest.BorderColor=item.BorderColor;
77611
77616
  if (item.TitleColor) dest.TitleColor=item.TitleColor;
77612
77617
  if (item.TitleBGColor) dest.TitleBGColor=item.TitleBGColor;
77618
+ if (item.Mark)
77619
+ {
77620
+ if (item.Mark.LineColor) dest.Mark.LineColor=item.Mark.LineColor;
77621
+ if (IFrameSplitOperator.IsNumber(item.Mark.LineWidth)) dest.Mark.LineWidth=item.Mark.LineWidth;
77622
+ }
77613
77623
  }
77614
77624
 
77615
77625
  if (style.PopKLineChart)
@@ -81098,6 +81108,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81098
81108
  this.ShowMinuteChartDialog=function(data, x,y)
81099
81109
  {
81100
81110
  if (!this.PopMinuteChart) return;
81111
+ if (!ChartData.IsDayPeriod(this.Period,true)) return; //只支持日K
81101
81112
  if (!data.Tooltip || !data.Chart) return;
81102
81113
 
81103
81114
  var pixelRatio=GetDevicePixelRatio();
@@ -81123,7 +81134,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81123
81134
 
81124
81135
  if (!symbol) return;
81125
81136
 
81126
- this.PopMinuteChart.Show({ Date:date, Symbol:symbol, Data:data.Tooltip.Data }, x/pixelRatio,y/pixelRatio);
81137
+ this.PopMinuteChart.Show({ Date:date, Symbol:symbol, Data:data.Tooltip.Data, Chart:data.Tooltip.ChartPaint }, x/pixelRatio,y/pixelRatio);
81127
81138
  }
81128
81139
 
81129
81140
 
@@ -89949,17 +89960,17 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
89949
89960
 
89950
89961
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
89951
89962
 
89963
+ var keyID = e.keyCode ? e.keyCode :e.which;
89964
+
89952
89965
  //回调事件
89953
89966
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_KEYDOWN);
89954
89967
  if (event && event.Callback)
89955
89968
  {
89956
- var sendData={ e:e, PreventDefault:false };
89969
+ var sendData={ e:e, KeyID:keyID, PreventDefault:false };
89957
89970
  event.Callback(event, sendData, this);
89958
89971
  if (sendData.PreventDefault) return;
89959
89972
  }
89960
89973
 
89961
- var keyID = e.keyCode ? e.keyCode :e.which;
89962
-
89963
89974
  var draw=false;
89964
89975
  if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
89965
89976
  {
@@ -129592,6 +129603,11 @@ function GetBlackStyle()
129592
129603
  {
129593
129604
  BGColor:"rgba(0,0,0,0.85)",
129594
129605
  BorderColor:"rgb(230,230,230)",
129606
+
129607
+ Mark:
129608
+ {
129609
+ LineColor:"rgba(255,215,0,0.6)",
129610
+ }
129595
129611
  },
129596
129612
 
129597
129613
  PopKLineChart:
@@ -144926,7 +144942,7 @@ function ScrollBarBGChart()
144926
144942
 
144927
144943
 
144928
144944
 
144929
- var HQCHART_VERSION="1.1.14551";
144945
+ var HQCHART_VERSION="1.1.14554";
144930
144946
 
144931
144947
  function PrintHQChartVersion()
144932
144948
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.14551";
8
+ var HQCHART_VERSION="1.1.14554";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {