hqchart 1.1.14542 → 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