hqchart 1.1.15037 → 1.1.15043

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.
@@ -4518,7 +4518,13 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4518
4518
 
4519
4519
  if (option.DrawTool) //画图工具
4520
4520
  {
4521
- if (option.DrawTool.StorageKey && chart.ChartDrawStorage) chart.ChartDrawStorage.Load(option.DrawTool.StorageKey);
4521
+ var item=option.DrawTool;
4522
+ if (chart.ChartDrawStorage)
4523
+ {
4524
+ if (item.StorageKey) chart.ChartDrawStorage.Load(item.StorageKey);
4525
+ if (IFrameSplitOperator.IsBool(item.EnableCrossPeriod)) chart.ChartDrawStorage.EnableCrossPeriod=item.EnableCrossPeriod;
4526
+ }
4527
+
4522
4528
  }
4523
4529
 
4524
4530
  if (option.KeyboardMove)
@@ -7412,7 +7418,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7412
7418
  this.EnableVerticalDrag=false;
7413
7419
 
7414
7420
  //十字光标长留(手势才有)
7415
- this.ClickModel={ IsShowCorssCursor:false, PreventHide:false, IsClickButton:false }; //PreventHide 阻止隐藏十字光标
7421
+ this.ClickModel=
7422
+ {
7423
+ IsShowCorssCursor:false, PreventHide:false, IsClickButton:false,
7424
+ AutoClose:{ Enable:false, Timer:null, DelayTime:3000 },
7425
+ }; //PreventHide 阻止隐藏十字光标 AutoClose=延迟关闭
7416
7426
  this.EnableClickModel=false;
7417
7427
 
7418
7428
  //标题栏显示最新数据
@@ -9799,6 +9809,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9799
9809
 
9800
9810
 
9801
9811
  this.StopDragTimer();
9812
+ this.StopAutoCloseCorssCursor();
9802
9813
 
9803
9814
  var isSingleTouch=this.IsSingleTouch(e);
9804
9815
  if (this.EnableScrollUpDown==false || !isSingleTouch || //多点触屏
@@ -10316,6 +10327,29 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10316
10327
  return true;
10317
10328
  }
10318
10329
 
10330
+ this.StopAutoCloseCorssCursor=function()
10331
+ {
10332
+ if (!this.ClickModel.AutoClose.Timer) return;
10333
+
10334
+ clearTimeout(this.ClickModel.AutoClose.Timer);
10335
+ this.ClickModel.AutoClose.Timer=null;
10336
+ }
10337
+
10338
+ //自动关闭十字光标
10339
+ this.DelayAutoCloseCorssCursor=function()
10340
+ {
10341
+ if (!this.ClickModel.AutoClose.Enable) return false;
10342
+
10343
+ this.StopAutoCloseCorssCursor();
10344
+
10345
+ this.ClickModel.AutoClose.Timer=setTimeout(()=>
10346
+ {
10347
+ this.ClickModel.IsShowCorssCursor=false;
10348
+ this.DrawDynamicInfo();
10349
+
10350
+ }, this.ClickModel.AutoClose.DelayTime)
10351
+ }
10352
+
10319
10353
  this.MoveCorssCursor=function(point,e)
10320
10354
  {
10321
10355
  var pixelTatio = GetDevicePixelRatio();
@@ -68698,10 +68732,89 @@ function IChartDrawPicture()
68698
68732
  }
68699
68733
  }
68700
68734
 
68701
- this.UpdateXValue=function() //通过datetime更新x的索引
68735
+ this.GetkData=function()
68702
68736
  {
68703
- if (!this.Frame) return false;
68737
+ if (!this.Frame) return null;
68704
68738
  var data=this.Frame.Data;
68739
+ if (!data) return null;
68740
+
68741
+ return data;
68742
+ }
68743
+
68744
+ //周期变动 X重新定位
68745
+ this.ChangePeriod=function(period)
68746
+ {
68747
+ var kData=this.GetkData();
68748
+ if (!kData) return;
68749
+
68750
+ var aryDateTime=[];
68751
+ for(var i=0; i<this.Value.length; ++i)
68752
+ {
68753
+ var item=this.Value[i];
68754
+ if (!item.DateTime) break;
68755
+ var dateTime={ Date:item.DateTime.Date, Time:0, Match:null };
68756
+ if (IFrameSplitOperator.IsNumber(item.DateTime.Time)) dateTime.Time=item.DateTime.Time;
68757
+ aryDateTime[i]=dateTime;
68758
+ }
68759
+
68760
+ var findCount=0;
68761
+ var perData=null;
68762
+ var perIndex=-1;
68763
+ for(var i=0, j=0;i<kData.Data.length;++i)
68764
+ {
68765
+ var kItem=kData.Data[i];
68766
+
68767
+ for(j=0;j<aryDateTime.length;++j)
68768
+ {
68769
+ var item=aryDateTime[j];
68770
+ if (item.Match) continue;
68771
+
68772
+ if (ChartData.IsDayPeriod(period, true))
68773
+ {
68774
+ if (kItem.Date>item.Date)
68775
+ {
68776
+ item.Match={ KItem:perData, Index:perIndex };
68777
+ ++findCount;
68778
+ }
68779
+ }
68780
+ else if (ChartData.IsMinutePeriod(period, true))
68781
+ {
68782
+ if (kItem.Date>item.Date || (kItem.Date==item.Date && kItem.Time>item.Time))
68783
+ {
68784
+ item.Match={ KItem:perData, Index:perIndex };
68785
+ ++findCount;
68786
+ }
68787
+ }
68788
+ }
68789
+
68790
+ perData=kItem;
68791
+ perIndex=i;
68792
+
68793
+ if (findCount>=aryDateTime.length) break;
68794
+ }
68795
+
68796
+ for(var i=0;i<aryDateTime.length;++i)
68797
+ {
68798
+ var item=aryDateTime[i];
68799
+ var valueItem=this.Value[i];
68800
+ if (item.Match && item.Match.KItem)
68801
+ {
68802
+ valueItem.DateTime={ Date:item.Match.Date, Time:item.Match.Time };
68803
+ valueItem.XValue=item.Match.Index;
68804
+ }
68805
+ else
68806
+ {
68807
+ valueItem.DateTime=null;
68808
+ valueItem.XValue=null;
68809
+ }
68810
+ }
68811
+
68812
+ this.Period=period;
68813
+ }
68814
+
68815
+ this.UpdateXValue=function() //通过datetime更新x的索引
68816
+ {
68817
+ var data=this.GetkData();
68705
68818
  if (!data) return false;
68706
68819
 
68707
68820
  var aryDateTime=[];
@@ -80411,9 +80524,12 @@ function ChartDrawTVShortPosition()
80411
80524
 
80412
80525
  function ChartDrawStorage()
80413
80526
  {
80414
- this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
80527
+ //this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
80528
+ this.DrawDataV2=new Map(); //画图工具数据 key=symbol, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
80529
+
80415
80530
  this.StorageKey;
80416
- this.GetEventCallback; //事件回调
80531
+ this.GetEventCallback; //事件回调
80532
+ this.EnableCrossPeriod=false; //跨周期
80417
80533
 
80418
80534
  this.Load=function(key) //从本地读取画图工具
80419
80535
  {
@@ -80426,18 +80542,39 @@ function ChartDrawStorage()
80426
80542
  if (typeof(cacheValue) != "string") return;
80427
80543
 
80428
80544
  var saveData=JSON.parse(cacheValue);
80429
- for(var i in saveData)
80430
- {
80431
- var item=saveData[i];
80432
- var drawMap=new Map();
80545
+ if (!saveData) return;
80433
80546
 
80434
- for(var j in item.Value)
80547
+ if (IFrameSplitOperator.IsNonEmptyArray(saveData)) //老版本 key=symbol-Period
80548
+ {
80549
+ for(var i=0;i<saveData.length;++i)
80435
80550
  {
80436
- var drawItem=item.Value[j];
80437
- drawMap.set(drawItem.Key, drawItem.Value);
80551
+ var item=saveData[i];
80552
+ for(var j=0;j<item.Value.length;++j)
80553
+ {
80554
+ var drawItem=item.Value[j];
80555
+ var symbol=drawItem.Value.Symbol;
80556
+ if (!this.DrawDataV2.has(symbol))
80557
+ this.DrawDataV2.set(symbol, {Symbol:symbol, MapPicture: new Map() });
80558
+
80559
+ var stockItem=this.DrawDataV2.get(symbol);
80560
+ stockItem.MapPicture.set(drawItem.Value.Guid, drawItem.Value);
80561
+ }
80438
80562
  }
80563
+ }
80564
+ else if (saveData.Ver==2.0 && IFrameSplitOperator.IsNonEmptyArray(saveData.Data))
80565
+ {
80566
+ for(var i=0;i<saveData.Data.length;++i)
80567
+ {
80568
+ var item=saveData.Data[i]; //{ Symbol:, AryPicture:[ { Guid, Symbol, Period, ClassName, Value }, ] }
80569
+ var stockItem={ Symbol:item.Symbol, MapPicture:new Map() };
80570
+ for(var j=0; j<item.AryPicture.length;++j)
80571
+ {
80572
+ var drawItem=item.AryPicture[j];
80573
+ stockItem.MapPicture.set(drawItem.Guid, drawItem);
80574
+ }
80439
80575
 
80440
- this.DrawData.set(item.Key,drawMap);
80576
+ this.DrawDataV2.set(stockItem.Symbol,stockItem);
80577
+ }
80441
80578
  }
80442
80579
  }
80443
80580
 
@@ -80446,89 +80583,95 @@ function ChartDrawStorage()
80446
80583
  if (!this.StorageKey) return;
80447
80584
 
80448
80585
  var saveData=[];
80449
- for(var stock of this.DrawData)
80586
+ for(var mapItem of this.DrawDataV2)
80450
80587
  {
80451
- var key=stock[0];
80452
- var value=stock[1];
80453
- var itemData={ Key:key, Value:[]};
80588
+ var symbol=mapItem[0];
80589
+ var stockItem=mapItem[1];
80454
80590
 
80455
- for(var drawItem of value)
80591
+ var itemData={ Symbol:symbol, AryPicture:[] };
80592
+
80593
+ for(var pictureItem of stockItem.MapPicture)
80456
80594
  {
80457
- if (drawItem[1] && drawItem[1].EnableSave===false) continue;
80595
+ var drawItem=pictureItem[1];
80596
+ if (drawItem.EnableSave===false) continue;
80458
80597
 
80459
- itemData.Value.push({Key:drawItem[0], Value:drawItem[1]});
80598
+ itemData.AryPicture.push(drawItem);
80460
80599
  }
80461
80600
 
80462
- if (IFrameSplitOperator.IsNonEmptyArray(itemData.Value))
80601
+ if (IFrameSplitOperator.IsNonEmptyArray(itemData.AryPicture))
80463
80602
  saveData.push(itemData);
80464
80603
  }
80465
80604
 
80466
80605
  JSConsole.Chart.Log(`[ChartDrawStorage::Save] save to localStorage, key=${this.StorageKey}`);
80467
- var strData=JSON.stringify(saveData);
80606
+ var strData=JSON.stringify({Ver:2.0, Data:saveData});
80468
80607
  localStorage[this.StorageKey]=strData;
80469
80608
  }
80470
80609
 
80471
- this.GetItemKey=function(obj) //生成每个画图工具的key
80472
- {
80473
- var strKey=`${obj.Symbol}-${obj.Period}`;
80474
- return strKey;
80475
- }
80476
-
80477
80610
  this.SaveDrawData=function(drawPicture) //保存一个画图工具
80478
80611
  {
80479
- var strKey=this.GetItemKey(drawPicture);
80612
+ var symbol=drawPicture.Symbol;
80480
80613
  var data=drawPicture.ExportStorageData();
80481
80614
  if (!data) return;
80482
80615
 
80483
- if (this.DrawData.has(strKey)) //更新
80616
+ if (this.DrawDataV2.has(symbol)) //更新
80484
80617
  {
80485
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: key, drawPicture, data', strKey, drawPicture,data);
80486
- this.DrawData.get(strKey).set(data.Guid, data);
80618
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: symbol, drawPicture, data', symbol, drawPicture, data);
80619
+ var stockItem=this.DrawDataV2.get(symbol);
80620
+ stockItem.MapPicture.set(data.Guid, data);
80487
80621
  }
80488
80622
  else //新增
80489
80623
  {
80490
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: key, drawPicture, data', strKey, drawPicture,data);
80491
- var newData=new Map();
80492
- newData.set(data.Guid, data);
80493
- this.DrawData.set(strKey,newData);
80624
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: symbol, drawPicture, data', symbol, drawPicture,data);
80625
+ var stockItem={ Symbol:symbol, MapPicture:new Map() } ;
80626
+ stockItem.set(data.Guid, data);
80627
+ this.DrawDataV2.set(symbol,newData);
80494
80628
  }
80495
80629
 
80496
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawData);
80630
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawDataV2);
80497
80631
 
80498
80632
  this.Save();
80499
80633
  }
80500
80634
 
80501
80635
  this.DeleteDrawData=function(drawPicture) //删除一个画图工具
80502
80636
  {
80503
- var strKey=this.GetItemKey(drawPicture);
80504
- if (!this.DrawData.has(strKey)) return;
80637
+ var symbol=drawPicture.Symbol;
80638
+ if (!this.DrawDataV2.has(symbol)) return;
80505
80639
 
80506
- var mapDraw=this.DrawData.get(strKey);
80507
- if (!mapDraw.has(drawPicture.Guid)) return;
80640
+ var stockItem=this.DrawDataV2.get(symbol);
80641
+ if (!stockItem.MapPicture.has(drawPicture.Guid)) return;
80508
80642
 
80509
- mapDraw.delete(drawPicture.Guid);
80643
+ stockItem.MapPicture.delete(drawPicture.Guid);
80510
80644
  this.Save();
80511
80645
  }
80512
80646
 
80513
80647
  this.Clear=function()
80514
80648
  {
80515
- this.DrawData=new Map();
80649
+ this.DrawDataV2=new Map();
80516
80650
  this.Save();
80517
80651
  }
80518
80652
 
80519
- this.GetDrawData=function(obj) //获取已有的画图工具数据{Symbol: , Period:, }
80653
+ this.GetDrawData=function(obj) //获取已有的画图工具数据{ Symbol: , Period:, }
80520
80654
  {
80521
- var data=[];
80522
- var strKey=this.GetItemKey(obj);
80523
- if (!this.DrawData.has(strKey)) return data;
80655
+ var aryData=[];
80656
+ var symbol=obj.Symbol;
80657
+
80658
+ if (!this.DrawDataV2.has(symbol)) return aryData;
80524
80659
 
80525
- var stockData=this.DrawData.get(strKey);
80526
- for(var item of stockData)
80660
+ var stockItem=this.DrawDataV2.get(symbol);
80661
+ for(var mapItem of stockItem.MapPicture)
80527
80662
  {
80528
- data.push(item[1]);
80663
+ var drawItem=mapItem[1];
80664
+ if (this.EnableCrossPeriod)
80665
+ {
80666
+ aryData.push(drawItem);
80667
+ }
80668
+ else
80669
+ {
80670
+ if (drawItem.Period==obj.Period) aryData.push(drawItem);
80671
+ }
80529
80672
  }
80530
80673
 
80531
- return data;
80674
+ return aryData;
80532
80675
  }
80533
80676
  }
80534
80677
 
@@ -90292,8 +90435,15 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90292
90435
 
90293
90436
  if (this.EnableClickModel===true)
90294
90437
  {
90295
- if (this.ClickModel.IsShowCorssCursor==true && this.ClickModel.PreventHide) return; //阻止隐藏
90296
- if (this.ClickModel.IsShowCorssCursor==true && this.TouchDrawCount>0 ) return;
90438
+ var bShowCorssCursor=false;
90439
+ if (this.ClickModel.IsShowCorssCursor==true && this.ClickModel.PreventHide) bShowCorssCursor=true; //阻止隐藏
90440
+ if (this.ClickModel.IsShowCorssCursor==true && this.TouchDrawCount>0 ) bShowCorssCursor=true;
90441
+
90442
+ if (bShowCorssCursor)
90443
+ {
90444
+ this.DelayAutoCloseCorssCursor(); //自动延迟关闭十字光标
90445
+ return;
90446
+ }
90297
90447
 
90298
90448
  this.ClickModel.IsShowCorssCursor=false;
90299
90449
  this.DrawDynamicInfo();
@@ -90306,7 +90456,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
90306
90456
  return;
90307
90457
  }
90308
90458
 
90309
- for(var i in this.ExtendChartPaint)
90459
+ for(var i=0; i<this.ExtendChartPaint.length; ++i)
90310
90460
  {
90311
90461
  var item=this.ExtendChartPaint[i];
90312
90462
  if (item.ClassName==='KLineTooltipPaint')
@@ -91842,7 +91992,16 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
91842
91992
  drawPicture.Option=this.ChartDrawOption;
91843
91993
 
91844
91994
  if (drawPicture.ImportStorageData) drawPicture.ImportStorageData(item);
91845
- drawPicture.UpdateXValue();
91995
+ if (drawPicture.Period!=this.Period)
91996
+ {
91997
+ drawPicture.ChangePeriod(this.Period);
91998
+ }
91999
+ else
92000
+ {
92001
+ drawPicture.UpdateXValue();
92002
+ }
92003
+
92004
+
91846
92005
  drawPicture.ValueToPoint();
91847
92006
 
91848
92007
  var self=this;
@@ -99640,7 +99799,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
99640
99799
  {
99641
99800
  if (!this.ChartDrawStorageCache || this.ChartDrawStorageCache.length<=0) return;
99642
99801
 
99643
- var self=this;
99802
+ var kData=this.GetKData();
99644
99803
  for(var i=0; i<this.ChartDrawStorageCache.length; ++i)
99645
99804
  {
99646
99805
  var item=this.ChartDrawStorageCache[i];
@@ -153136,7 +153295,7 @@ function ScrollBarBGChart()
153136
153295
 
153137
153296
 
153138
153297
 
153139
- var HQCHART_VERSION="1.1.15036";
153298
+ var HQCHART_VERSION="1.1.15042";
153140
153299
 
153141
153300
  function PrintHQChartVersion()
153142
153301
  {
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var HQCHART_VERSION="1.1.15036";
8
+ var HQCHART_VERSION="1.1.15042";
9
9
 
10
10
  function PrintHQChartVersion()
11
11
  {