jsPsych/docs/overview/progress-bar.md
2023-09-22 16:37:33 -04:00

108 lines
3.0 KiB
Markdown

# Automatic Progress Bar
jsPsych can show a progress bar at the top of the experiment page indicating the participant's overall completion progress. The progress bar is rendered outside the jsPsych display element, and it requires the `jspsych.css` file to be loaded on the page. As of version 6.0, the progress bar looks like this:
![Progressbar Screenshot](../img/progress_bar.png)
To show the progress bar, set the `show_progress_bar` option in `initJsPsych` to `true`:
```javascript
const jsPsych = initJsPsych({
show_progress_bar: true
});
```
The progress bar automatically updates after every trial.
## Manual Control
The progress bar can also be manually controlled by setting `jsPsych.progressBar.progress`. The value of `jsPsych.progressBar.progress` should be a number between 0 and 1. For example, to set the progress bar to 85% full, you would do this:
```js
const trial = {
type: jsPsychHtmlKeyboardResponse,
stimulus: 'Almost done...',
on_finish: function(){
jsPsych.progressBar.progress = 0.85; // set progress bar to 85% full.
}
}
```
You can also get the current value of the progress bar as `jsPsych.progressBar.progress`
```js
const proportion_complete = jsPsych.progressBar.progress;
```
If you are going to use manual progress bar control, you may want to disable the automatic progress bar updates by setting the `auto_update_progress_bar` property in `initJsPsych()` to `false`.
```js
const jsPsych = initJsPsych({
show_progress_bar: true,
auto_update_progress_bar: false
});
```
Here's a complete example showing how to use these functions and `initJsPsych()` settings to manually update the progress bar:
```js
const jsPsych = initJsPsych({
show_progress_bar: true,
auto_update_progress_bar: false
});
const n_trials = 5;
const start = {
type: jsPsychHtmlKeyboardResponse,
stimulus: 'Press any key to start!',
on_start: function() {
// set progress bar to 0 at the start of experiment
jsPsych.progressBar.progress = 0
}
};
const trial = {
type: jsPsychHtmlKeyboardResponse,
stimulus: 'This is a trial!',
on_finish: function() {
// at the end of each trial, update the progress bar
// based on the current value and the proportion to update for each trial
var curr_progress_bar_value = jsPsych.progressBar.progress;
jsPsych.progressBar.progress = curr_progress_bar_value + (1/n_trials)
}
};
const trials = {
timeline: [trial],
repetitions: n_trials
};
const done = {
type: jsPsychHtmlKeyboardResponse,
stimulus: 'Done!'
};
jsPsych.run([start, trials, done]);
```
## Custom Text
By default, jsPsych adds the text "Completion Progress" to the left of the progress bar. You can specify custom text using the `message_progress_bar` parameter in `initJsPsych`.
```js
// support for different spoken languages
const jsPsych = initJsPsych({
show_progress_bar: true,
message_progress_bar: 'Porcentaje completo'
});
```
```js
// no message
const jsPsych = initJsPsych({
show_progress_bar: true,
message_progress_bar: ''
});
```