123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- program demoprogressbar;
- {$MODE OBJFPC}
- {$MODESWITCH EXTERNALCLASS}
- uses
- JS,
- Web,
- Math,
- ChartJS;
- function randomScalingFactor: NativeUInt;
- begin
- Result := RandomRange(-100, 100);
- end;
- var
- progress: TJSHTMLProgressElement;
- myLine: TChart;
- config: TChartConfiguration;
- dataset: TChartLineDataset;
- begin
- progress := TJSHTMLProgressElement(document.getElementById('animationProgress'));
- config := TChartConfiguration.new;
- config.data := TChartData.new;
- config.data.datasets_ := TJSArray.new;
- config.type_ := 'line';
- config.data.labels := ['January', 'February', 'March', 'April', 'May',
- 'June', 'July'];
- dataset := TChartLineDataset.new;
- dataset.label_ := 'My First dataset';
- dataset.data := [randomScalingFactor, randomScalingFactor,
- randomScalingFactor, randomScalingFactor, randomScalingFactor,
- randomScalingFactor, randomScalingFactor];
- dataset.fill := False;
- dataset.borderColor := 'rgb(255, 99, 132)';
- dataset.backgroundColor := 'rgb(255, 99, 132)';
- config.data.datasets_.push(dataset);
- dataset := TChartLineDataset.new;
- dataset.label_ := 'My Second dataset ';
- dataset.fill := False;
- dataset.borderColor := 'rgb(54, 162, 235)';
- dataset.backgroundColor := 'rgb(54, 162, 235)';
- dataset.data := [randomScalingFactor, randomScalingFactor,
- randomScalingFactor, randomScalingFactor, randomScalingFactor,
- randomScalingFactor, randomScalingFactor];
- config.data.datasets_.push(dataset);
- config.options := TChartOptions.new;
- config.options.title := TChartTitleConfiguration.new;
- config.options.title.display := True;
- config.options.title.text := 'Chart.js Line Chart - Animation Progress Bar';
- config.options.animation := TChartAnimationConfiguration.new;
- config.options.animation.duration := 2000;
- config.options.animation.onProgress :=
- procedure(const animation: TChartAnimationCallback)
- begin
- progress.value := animation.currentStep / animation.numSteps;
- end;
- config.options.animation.onComplete :=
- procedure(const animation: TChartAnimationCallback)
- begin
- window.setTimeout(
- procedure
- begin
- progress.value := 0;
- end, 2000);
- end;
- myLine := TChart.new('canvas', config);
- document.getElementById('randomizeData').addEventListener('click',
- procedure
- begin
- config.data.datasets_.forEach(
- function(el: JSValue; index: NativeInt; arr: TJSArray): Boolean
- var
- dataset: TChartLineDataset;
- begin
- dataset := TChartLineDataset(el);
- dataset.data_ := dataset.data_.map(
- function(el: JSValue; index: NativeInt; arr: TJSArray): JSValue
- begin
- Result := randomScalingFactor;
- end);
- Result := True;
- end);
- myLine.update;
- end);
- end.
|