demoprogressbar.lpr 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. program demoprogressbar;
  2. {$MODE OBJFPC}
  3. {$MODESWITCH EXTERNALCLASS}
  4. uses
  5. JS,
  6. Web,
  7. Math,
  8. ChartJS;
  9. function randomScalingFactor: NativeUInt;
  10. begin
  11. Result := RandomRange(-100, 100);
  12. end;
  13. var
  14. progress: TJSHTMLProgressElement;
  15. myLine: TChart;
  16. config: TChartConfiguration;
  17. dataset: TChartLineDataset;
  18. begin
  19. progress := TJSHTMLProgressElement(document.getElementById('animationProgress'));
  20. config := TChartConfiguration.new;
  21. config.data := TChartData.new;
  22. config.data.datasets_ := TJSArray.new;
  23. config.type_ := 'line';
  24. config.data.labels := ['January', 'February', 'March', 'April', 'May',
  25. 'June', 'July'];
  26. dataset := TChartLineDataset.new;
  27. dataset.label_ := 'My First dataset';
  28. dataset.data := [randomScalingFactor, randomScalingFactor,
  29. randomScalingFactor, randomScalingFactor, randomScalingFactor,
  30. randomScalingFactor, randomScalingFactor];
  31. dataset.fill := False;
  32. dataset.borderColor := 'rgb(255, 99, 132)';
  33. dataset.backgroundColor := 'rgb(255, 99, 132)';
  34. config.data.datasets_.push(dataset);
  35. dataset := TChartLineDataset.new;
  36. dataset.label_ := 'My Second dataset ';
  37. dataset.fill := False;
  38. dataset.borderColor := 'rgb(54, 162, 235)';
  39. dataset.backgroundColor := 'rgb(54, 162, 235)';
  40. dataset.data := [randomScalingFactor, randomScalingFactor,
  41. randomScalingFactor, randomScalingFactor, randomScalingFactor,
  42. randomScalingFactor, randomScalingFactor];
  43. config.data.datasets_.push(dataset);
  44. config.options := TChartOptions.new;
  45. config.options.title := TChartTitleConfiguration.new;
  46. config.options.title.display := True;
  47. config.options.title.text := 'Chart.js Line Chart - Animation Progress Bar';
  48. config.options.animation := TChartAnimationConfiguration.new;
  49. config.options.animation.duration := 2000;
  50. config.options.animation.onProgress :=
  51. procedure(const animation: TChartAnimationCallback)
  52. begin
  53. progress.value := animation.currentStep / animation.numSteps;
  54. end;
  55. config.options.animation.onComplete :=
  56. procedure(const animation: TChartAnimationCallback)
  57. begin
  58. window.setTimeout(
  59. procedure
  60. begin
  61. progress.value := 0;
  62. end, 2000);
  63. end;
  64. myLine := TChart.new('canvas', config);
  65. document.getElementById('randomizeData').addEventListener('click',
  66. procedure
  67. begin
  68. config.data.datasets_.forEach(
  69. function(el: JSValue; index: NativeInt; arr: TJSArray): Boolean
  70. var
  71. dataset: TChartLineDataset;
  72. begin
  73. dataset := TChartLineDataset(el);
  74. dataset.data_ := dataset.data_.map(
  75. function(el: JSValue; index: NativeInt; arr: TJSArray): JSValue
  76. begin
  77. Result := randomScalingFactor;
  78. end);
  79. Result := True;
  80. end);
  81. myLine.update;
  82. end);
  83. end.