jspsych 6.3.1 → 7.1.2
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.
- package/README.md +36 -37
- package/css/jspsych.css +39 -39
- package/dist/JsPsych.d.ts +112 -0
- package/dist/TimelineNode.d.ts +34 -0
- package/dist/index.browser.js +3171 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.browser.min.js +2 -0
- package/dist/index.browser.min.js.map +1 -0
- package/dist/index.cjs +3165 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +3159 -0
- package/dist/index.js.map +1 -0
- package/dist/migration.d.ts +3 -0
- package/dist/modules/data/DataCollection.d.ts +45 -0
- package/dist/modules/data/DataColumn.d.ts +15 -0
- package/dist/modules/data/index.d.ts +25 -0
- package/dist/modules/data/utils.d.ts +3 -0
- package/dist/modules/extensions.d.ts +22 -0
- package/dist/modules/plugin-api/HardwareAPI.d.ts +15 -0
- package/dist/modules/plugin-api/KeyboardListenerAPI.d.ts +34 -0
- package/dist/modules/plugin-api/MediaAPI.d.ts +27 -0
- package/dist/modules/plugin-api/SimulationAPI.d.ts +41 -0
- package/dist/modules/plugin-api/TimeoutAPI.d.ts +5 -0
- package/dist/modules/plugin-api/index.d.ts +8 -0
- package/dist/modules/plugins.d.ts +136 -0
- package/dist/modules/randomization.d.ts +35 -0
- package/dist/modules/turk.d.ts +40 -0
- package/dist/modules/utils.d.ts +7 -0
- package/package.json +32 -15
- package/src/JsPsych.ts +884 -0
- package/src/TimelineNode.ts +536 -0
- package/src/index.ts +71 -0
- package/src/migration.ts +37 -0
- package/src/modules/data/DataCollection.ts +198 -0
- package/src/modules/data/DataColumn.ts +86 -0
- package/src/modules/data/index.ts +174 -0
- package/src/modules/data/utils.ts +75 -0
- package/src/modules/extensions.ts +23 -0
- package/src/modules/plugin-api/HardwareAPI.ts +32 -0
- package/src/modules/plugin-api/KeyboardListenerAPI.ts +165 -0
- package/src/modules/plugin-api/MediaAPI.ts +337 -0
- package/src/modules/plugin-api/SimulationAPI.ts +181 -0
- package/src/modules/plugin-api/TimeoutAPI.ts +16 -0
- package/src/modules/plugin-api/index.ts +28 -0
- package/src/modules/plugins.ts +165 -0
- package/src/modules/randomization.ts +327 -0
- package/src/modules/turk.ts +99 -0
- package/src/modules/utils.ts +30 -0
- package/.github/workflows/jest.yml +0 -20
- package/code-of-conduct.md +0 -56
- package/contributors.md +0 -61
- package/docs/CNAME +0 -1
- package/docs/about/about.md +0 -18
- package/docs/about/contributing.md +0 -43
- package/docs/about/license.md +0 -25
- package/docs/about/support.md +0 -7
- package/docs/core_library/jspsych-core.md +0 -719
- package/docs/core_library/jspsych-data.md +0 -587
- package/docs/core_library/jspsych-pluginAPI.md +0 -624
- package/docs/core_library/jspsych-randomization.md +0 -389
- package/docs/core_library/jspsych-turk.md +0 -98
- package/docs/extensions/extensions.md +0 -83
- package/docs/extensions/jspsych-ext-webgazer.md +0 -137
- package/docs/img/blue.png +0 -0
- package/docs/img/devtools-change-css.png +0 -0
- package/docs/img/devtools-css-errors.png +0 -0
- package/docs/img/devtools-inspect-element.png +0 -0
- package/docs/img/folder-setup.png +0 -0
- package/docs/img/folder-with-html.png +0 -0
- package/docs/img/githubreleases.jpg +0 -0
- package/docs/img/jspsych-favicon.png +0 -0
- package/docs/img/jspsych-logo-no-text-mono.svg +0 -493
- package/docs/img/jspsych-logo.jpg +0 -0
- package/docs/img/orange.png +0 -0
- package/docs/img/palmer_stim.png +0 -0
- package/docs/img/progress_bar.png +0 -0
- package/docs/img/prolific-study-completion.png +0 -0
- package/docs/img/prolific-study-link.png +0 -0
- package/docs/img/visual_search_example.jpg +0 -0
- package/docs/index.md +0 -9
- package/docs/overview/browser-device-support.md +0 -35
- package/docs/overview/callbacks.md +0 -180
- package/docs/overview/data.md +0 -281
- package/docs/overview/dynamic-parameters.md +0 -147
- package/docs/overview/exclude-browser.md +0 -32
- package/docs/overview/experiment-options.md +0 -149
- package/docs/overview/eye-tracking.md +0 -271
- package/docs/overview/fullscreen.md +0 -36
- package/docs/overview/media-preloading.md +0 -369
- package/docs/overview/mturk.md +0 -77
- package/docs/overview/plugins.md +0 -320
- package/docs/overview/progress-bar.md +0 -110
- package/docs/overview/prolific.md +0 -78
- package/docs/overview/record-browser-interactions.md +0 -23
- package/docs/overview/running-experiments.md +0 -95
- package/docs/overview/style.md +0 -293
- package/docs/overview/timeline.md +0 -457
- package/docs/plugins/jspsych-animation.md +0 -40
- package/docs/plugins/jspsych-audio-button-response.md +0 -60
- package/docs/plugins/jspsych-audio-keyboard-response.md +0 -58
- package/docs/plugins/jspsych-audio-slider-response.md +0 -53
- package/docs/plugins/jspsych-call-function.md +0 -81
- package/docs/plugins/jspsych-canvas-button-response.md +0 -66
- package/docs/plugins/jspsych-canvas-keyboard-response.md +0 -68
- package/docs/plugins/jspsych-canvas-slider-response.md +0 -89
- package/docs/plugins/jspsych-categorize-animation.md +0 -60
- package/docs/plugins/jspsych-categorize-html.md +0 -53
- package/docs/plugins/jspsych-categorize-image.md +0 -53
- package/docs/plugins/jspsych-cloze.md +0 -45
- package/docs/plugins/jspsych-external-html.md +0 -70
- package/docs/plugins/jspsych-free-sort.md +0 -56
- package/docs/plugins/jspsych-fullscreen.md +0 -57
- package/docs/plugins/jspsych-html-button-response.md +0 -42
- package/docs/plugins/jspsych-html-keyboard-response.md +0 -51
- package/docs/plugins/jspsych-html-slider-response.md +0 -45
- package/docs/plugins/jspsych-iat-html.md +0 -64
- package/docs/plugins/jspsych-iat-image.md +0 -64
- package/docs/plugins/jspsych-image-button-response.md +0 -48
- package/docs/plugins/jspsych-image-keyboard-response.md +0 -58
- package/docs/plugins/jspsych-image-slider-response.md +0 -54
- package/docs/plugins/jspsych-instructions.md +0 -58
- package/docs/plugins/jspsych-maxdiff.md +0 -41
- package/docs/plugins/jspsych-preload.md +0 -128
- package/docs/plugins/jspsych-rdk.md +0 -119
- package/docs/plugins/jspsych-reconstruction.md +0 -48
- package/docs/plugins/jspsych-resize.md +0 -39
- package/docs/plugins/jspsych-same-different-html.md +0 -53
- package/docs/plugins/jspsych-same-different-image.md +0 -66
- package/docs/plugins/jspsych-serial-reaction-time-mouse.md +0 -52
- package/docs/plugins/jspsych-serial-reaction-time.md +0 -57
- package/docs/plugins/jspsych-survey-html-form.md +0 -50
- package/docs/plugins/jspsych-survey-likert.md +0 -70
- package/docs/plugins/jspsych-survey-multi-choice.md +0 -48
- package/docs/plugins/jspsych-survey-multi-select.md +0 -53
- package/docs/plugins/jspsych-survey-text.md +0 -63
- package/docs/plugins/jspsych-video-button-response.md +0 -54
- package/docs/plugins/jspsych-video-keyboard-response.md +0 -50
- package/docs/plugins/jspsych-video-slider-response.md +0 -60
- package/docs/plugins/jspsych-virtual-chinrest.md +0 -105
- package/docs/plugins/jspsych-visual-search-circle.md +0 -52
- package/docs/plugins/jspsych-vsl-animate-occlusion.md +0 -55
- package/docs/plugins/jspsych-vsl-grid-scene.md +0 -62
- package/docs/plugins/jspsych-webgazer-calibrate.md +0 -61
- package/docs/plugins/jspsych-webgazer-init-camera.md +0 -30
- package/docs/plugins/jspsych-webgazer-validate.md +0 -44
- package/docs/plugins/list-of-plugins.md +0 -54
- package/docs/tutorials/hello-world.md +0 -162
- package/docs/tutorials/rt-task.md +0 -1334
- package/docs/tutorials/video-tutorials.md +0 -11
- package/examples/add-to-end-of-timeline.html +0 -38
- package/examples/case-sensitive-responses.html +0 -45
- package/examples/conditional-and-loop-functions.html +0 -64
- package/examples/css/jquery-ui.css +0 -1225
- package/examples/css-classes-parameter.html +0 -145
- package/examples/data-add-properties.html +0 -44
- package/examples/data-as-function.html +0 -39
- package/examples/data-from-timeline.html +0 -52
- package/examples/data-from-url.html +0 -21
- package/examples/demo-flanker.html +0 -117
- package/examples/demo-simple-rt-task.html +0 -120
- package/examples/demos/demo_1.html +0 -35
- package/examples/demos/demo_2.html +0 -50
- package/examples/demos/demo_3.html +0 -63
- package/examples/display-element-to-embed-experiment.html +0 -79
- package/examples/end-active-node.html +0 -52
- package/examples/end-experiment.html +0 -45
- package/examples/exclusions.html +0 -32
- package/examples/external_html/simple_consent.html +0 -4
- package/examples/img/1.gif +0 -0
- package/examples/img/10.gif +0 -0
- package/examples/img/11.gif +0 -0
- package/examples/img/12.gif +0 -0
- package/examples/img/2.gif +0 -0
- package/examples/img/3.gif +0 -0
- package/examples/img/4.gif +0 -0
- package/examples/img/5.gif +0 -0
- package/examples/img/6.gif +0 -0
- package/examples/img/7.gif +0 -0
- package/examples/img/8.gif +0 -0
- package/examples/img/9.gif +0 -0
- package/examples/img/age/of1.jpg +0 -0
- package/examples/img/age/of2.jpg +0 -0
- package/examples/img/age/of3.jpg +0 -0
- package/examples/img/age/om1.jpg +0 -0
- package/examples/img/age/om2.jpg +0 -0
- package/examples/img/age/om3.jpg +0 -0
- package/examples/img/age/yf1.jpg +0 -0
- package/examples/img/age/yf4.jpg +0 -0
- package/examples/img/age/yf5.jpg +0 -0
- package/examples/img/age/ym2.jpg +0 -0
- package/examples/img/age/ym3.jpg +0 -0
- package/examples/img/age/ym5.jpg +0 -0
- package/examples/img/backwardN.gif +0 -0
- package/examples/img/blue.png +0 -0
- package/examples/img/card.png +0 -0
- package/examples/img/con1.png +0 -0
- package/examples/img/con2.png +0 -0
- package/examples/img/fixation.gif +0 -0
- package/examples/img/happy_face_1.jpg +0 -0
- package/examples/img/happy_face_2.jpg +0 -0
- package/examples/img/happy_face_3.jpg +0 -0
- package/examples/img/happy_face_4.jpg +0 -0
- package/examples/img/inc1.png +0 -0
- package/examples/img/inc2.png +0 -0
- package/examples/img/normalN.gif +0 -0
- package/examples/img/orange.png +0 -0
- package/examples/img/redX.png +0 -0
- package/examples/img/ribbon.jpg +0 -0
- package/examples/img/sad_face_1.jpg +0 -0
- package/examples/img/sad_face_2.jpg +0 -0
- package/examples/img/sad_face_3.jpg +0 -0
- package/examples/img/sad_face_4.jpg +0 -0
- package/examples/js/snap.svg-min.js +0 -21
- package/examples/js/webgazer/ridgeWorker.mjs +0 -135
- package/examples/js/webgazer/webgazer.js +0 -88909
- package/examples/js/webgazer/worker_scripts/mat.js +0 -306
- package/examples/js/webgazer/worker_scripts/util.js +0 -398
- package/examples/jspsych-RDK.html +0 -58
- package/examples/jspsych-animation.html +0 -39
- package/examples/jspsych-audio-button-response.html +0 -58
- package/examples/jspsych-audio-keyboard-response.html +0 -68
- package/examples/jspsych-audio-slider-response.html +0 -61
- package/examples/jspsych-call-function.html +0 -32
- package/examples/jspsych-canvas-button-response.html +0 -95
- package/examples/jspsych-canvas-keyboard-response.html +0 -78
- package/examples/jspsych-canvas-slider-response.html +0 -67
- package/examples/jspsych-categorize-animation.html +0 -49
- package/examples/jspsych-categorize-html.html +0 -33
- package/examples/jspsych-categorize-image.html +0 -44
- package/examples/jspsych-cloze.html +0 -37
- package/examples/jspsych-free-sort.html +0 -109
- package/examples/jspsych-fullscreen.html +0 -45
- package/examples/jspsych-html-button-response.html +0 -43
- package/examples/jspsych-html-keyboard-response.html +0 -42
- package/examples/jspsych-html-slider-response.html +0 -53
- package/examples/jspsych-iat.html +0 -520
- package/examples/jspsych-image-button-response.html +0 -91
- package/examples/jspsych-image-keyboard-response.html +0 -85
- package/examples/jspsych-image-slider-response.html +0 -85
- package/examples/jspsych-instructions.html +0 -37
- package/examples/jspsych-maxdiff.html +0 -33
- package/examples/jspsych-preload.html +0 -140
- package/examples/jspsych-reconstruction.html +0 -43
- package/examples/jspsych-resize.html +0 -34
- package/examples/jspsych-same-different-html.html +0 -28
- package/examples/jspsych-same-different-image.html +0 -39
- package/examples/jspsych-serial-reaction-time-mouse.html +0 -98
- package/examples/jspsych-serial-reaction-time.html +0 -54
- package/examples/jspsych-survey-html-form.html +0 -33
- package/examples/jspsych-survey-likert.html +0 -42
- package/examples/jspsych-survey-multi-choice.html +0 -40
- package/examples/jspsych-survey-multi-select.html +0 -42
- package/examples/jspsych-survey-text.html +0 -34
- package/examples/jspsych-video-button-response.html +0 -65
- package/examples/jspsych-video-keyboard-response.html +0 -61
- package/examples/jspsych-video-slider-response.html +0 -63
- package/examples/jspsych-virtual-chinrest.html +0 -69
- package/examples/jspsych-visual-search-circle.html +0 -64
- package/examples/jspsych-vsl-animate-occlusion.html +0 -35
- package/examples/jspsych-vsl-grid-scene.html +0 -47
- package/examples/lexical-decision.html +0 -134
- package/examples/manual-preloading.html +0 -59
- package/examples/pause-unpause.html +0 -33
- package/examples/progress-bar.html +0 -68
- package/examples/save-trial-parameters.html +0 -98
- package/examples/sound/hammer.mp3 +0 -0
- package/examples/sound/sound.mp3 +0 -0
- package/examples/sound/speech_blue.mp3 +0 -0
- package/examples/sound/speech_green.mp3 +0 -0
- package/examples/sound/speech_joke.mp3 +0 -0
- package/examples/sound/speech_red.mp3 +0 -0
- package/examples/sound/tone.mp3 +0 -0
- package/examples/timeline-variables-sampling.html +0 -50
- package/examples/timeline-variables.html +0 -64
- package/examples/video/sample_video.mp4 +0 -0
- package/examples/webgazer.html +0 -174
- package/examples/webgazer_audio.html +0 -90
- package/examples/webgazer_image.html +0 -60
- package/extensions/jspsych-ext-webgazer.js +0 -265
- package/jspsych.js +0 -3023
- package/license.txt +0 -21
- package/mkdocs.yml +0 -118
- package/plugins/jspsych-animation.js +0 -189
- package/plugins/jspsych-audio-button-response.js +0 -269
- package/plugins/jspsych-audio-keyboard-response.js +0 -209
- package/plugins/jspsych-audio-slider-response.js +0 -278
- package/plugins/jspsych-call-function.js +0 -58
- package/plugins/jspsych-canvas-button-response.js +0 -199
- package/plugins/jspsych-canvas-keyboard-response.js +0 -155
- package/plugins/jspsych-canvas-slider-response.js +0 -207
- package/plugins/jspsych-categorize-animation.js +0 -266
- package/plugins/jspsych-categorize-html.js +0 -220
- package/plugins/jspsych-categorize-image.js +0 -222
- package/plugins/jspsych-cloze.js +0 -112
- package/plugins/jspsych-external-html.js +0 -112
- package/plugins/jspsych-free-sort.js +0 -478
- package/plugins/jspsych-fullscreen.js +0 -106
- package/plugins/jspsych-html-button-response.js +0 -188
- package/plugins/jspsych-html-keyboard-response.js +0 -149
- package/plugins/jspsych-html-slider-response.js +0 -202
- package/plugins/jspsych-iat-html.js +0 -284
- package/plugins/jspsych-iat-image.js +0 -286
- package/plugins/jspsych-image-button-response.js +0 -327
- package/plugins/jspsych-image-keyboard-response.js +0 -263
- package/plugins/jspsych-image-slider-response.js +0 -369
- package/plugins/jspsych-instructions.js +0 -237
- package/plugins/jspsych-maxdiff.js +0 -173
- package/plugins/jspsych-preload.js +0 -345
- package/plugins/jspsych-rdk.js +0 -1373
- package/plugins/jspsych-reconstruction.js +0 -134
- package/plugins/jspsych-resize.js +0 -166
- package/plugins/jspsych-same-different-html.js +0 -168
- package/plugins/jspsych-same-different-image.js +0 -169
- package/plugins/jspsych-serial-reaction-time-mouse.js +0 -212
- package/plugins/jspsych-serial-reaction-time.js +0 -247
- package/plugins/jspsych-survey-html-form.js +0 -171
- package/plugins/jspsych-survey-likert.js +0 -195
- package/plugins/jspsych-survey-multi-choice.js +0 -208
- package/plugins/jspsych-survey-multi-select.js +0 -232
- package/plugins/jspsych-survey-text.js +0 -185
- package/plugins/jspsych-video-button-response.js +0 -335
- package/plugins/jspsych-video-keyboard-response.js +0 -279
- package/plugins/jspsych-video-slider-response.js +0 -351
- package/plugins/jspsych-virtual-chinrest.js +0 -471
- package/plugins/jspsych-visual-search-circle.js +0 -259
- package/plugins/jspsych-vsl-animate-occlusion.js +0 -196
- package/plugins/jspsych-vsl-grid-scene.js +0 -103
- package/plugins/jspsych-webgazer-calibrate.js +0 -161
- package/plugins/jspsych-webgazer-init-camera.js +0 -139
- package/plugins/jspsych-webgazer-validate.js +0 -314
- package/plugins/template/jspsych-plugin-template.js +0 -35
- package/tests/README.md +0 -7
- package/tests/jsPsych/case-sensitive-responses.test.js +0 -53
- package/tests/jsPsych/css-classes-parameter.test.js +0 -107
- package/tests/jsPsych/default-iti.test.js +0 -51
- package/tests/jsPsych/default-parameters.test.js +0 -58
- package/tests/jsPsych/endexperiment.test.js +0 -49
- package/tests/jsPsych/events.test.js +0 -606
- package/tests/jsPsych/functions-as-parameters.test.js +0 -210
- package/tests/jsPsych/init.test.js +0 -48
- package/tests/jsPsych/loads.test.js +0 -7
- package/tests/jsPsych/min-rt.test.js +0 -58
- package/tests/jsPsych/progressbar.test.js +0 -202
- package/tests/jsPsych/timeline-variables.test.js +0 -531
- package/tests/jsPsych/timelines.test.js +0 -569
- package/tests/jsPsych.data/data-csv-conversion.test.js +0 -85
- package/tests/jsPsych.data/data-json-conversion.test.js +0 -120
- package/tests/jsPsych.data/datacollection.test.js +0 -117
- package/tests/jsPsych.data/datacolumn.test.js +0 -50
- package/tests/jsPsych.data/datamodule.test.js +0 -152
- package/tests/jsPsych.data/dataparameter.test.js +0 -251
- package/tests/jsPsych.data/interactions.test.js +0 -109
- package/tests/jsPsych.data/trialparameters.test.js +0 -175
- package/tests/jsPsych.extensions/extensions.test.js +0 -207
- package/tests/jsPsych.extensions/test-extension.js +0 -42
- package/tests/jsPsych.pluginAPI/pluginapi.test.js +0 -365
- package/tests/jsPsych.pluginAPI/preloads.test.js +0 -43
- package/tests/jsPsych.randomization/randomziation.test.js +0 -27
- package/tests/jsPsych.utils/utils.test.js +0 -58
- package/tests/plugins/plugin-animation.test.js +0 -34
- package/tests/plugins/plugin-audio-button-response.test.js +0 -15
- package/tests/plugins/plugin-audio-keyboard-response.test.js +0 -15
- package/tests/plugins/plugin-audio-slider-response.test.js +0 -15
- package/tests/plugins/plugin-call-function.test.js +0 -49
- package/tests/plugins/plugin-categorize-animation.test.js +0 -263
- package/tests/plugins/plugin-categorize-html.test.js +0 -17
- package/tests/plugins/plugin-categorize-image.test.js +0 -17
- package/tests/plugins/plugin-cloze.test.js +0 -157
- package/tests/plugins/plugin-free-sort.test.js +0 -106
- package/tests/plugins/plugin-fullscreen.test.js +0 -41
- package/tests/plugins/plugin-html-button-response.test.js +0 -161
- package/tests/plugins/plugin-html-keyboard-response.test.js +0 -139
- package/tests/plugins/plugin-html-slider-response.test.js +0 -155
- package/tests/plugins/plugin-iat-html.test.js +0 -299
- package/tests/plugins/plugin-iat-image.test.js +0 -298
- package/tests/plugins/plugin-image-button-response.test.js +0 -174
- package/tests/plugins/plugin-image-keyboard-response.test.js +0 -147
- package/tests/plugins/plugin-image-slider-response.test.js +0 -174
- package/tests/plugins/plugin-instructions.test.js +0 -85
- package/tests/plugins/plugin-maxdiff.test.js +0 -39
- package/tests/plugins/plugin-preload.test.js +0 -916
- package/tests/plugins/plugin-rdk.test.js +0 -61
- package/tests/plugins/plugin-reconstruction.test.js +0 -16
- package/tests/plugins/plugin-resize.test.js +0 -16
- package/tests/plugins/plugin-same-different-html.test.js +0 -17
- package/tests/plugins/plugin-same-different-image.test.js +0 -17
- package/tests/plugins/plugin-serial-reaction-time-mouse.test.js +0 -42
- package/tests/plugins/plugin-serial-reaction-time.test.js +0 -109
- package/tests/plugins/plugin-survey-html-form.test.js +0 -44
- package/tests/plugins/plugin-survey-likert.test.js +0 -48
- package/tests/plugins/plugin-survey-multi-choice.test.js +0 -47
- package/tests/plugins/plugin-survey-multi-select.test.js +0 -71
- package/tests/plugins/plugin-survey-text.test.js +0 -115
- package/tests/plugins/plugin-video-button-response.test.js +0 -32
- package/tests/plugins/plugin-video-keyboard-response.test.js +0 -32
- package/tests/plugins/plugin-video-slider-response.test.js +0 -31
- package/tests/plugins/plugin-visual-search-circle.test.js +0 -16
- package/tests/plugins/plugin-vsl-animate-occlusion.test.js +0 -16
- package/tests/plugins/plugin-vsl-grid-scene.test.js +0 -16
- package/tests/testing-utils.js +0 -13
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# Experiment-wide settings
|
|
2
|
-
|
|
3
|
-
There are several options that can be set when calling `jsPsych.init()` to launch the experiment.
|
|
4
|
-
|
|
5
|
-
Options are specified in the object passed to `jsPsych.init`. For example, to specify a default inter-trial interval, a minimum valid response time duration, and a maximum width for all of the experiment's page content, the object would contain:
|
|
6
|
-
|
|
7
|
-
```js
|
|
8
|
-
jsPsych.init({
|
|
9
|
-
timeline: [...],
|
|
10
|
-
default_iti: 250,
|
|
11
|
-
minimum_valid_rt: 100,
|
|
12
|
-
experiment_width: 800
|
|
13
|
-
});
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Controlling where jsPsych renders on the page
|
|
17
|
-
|
|
18
|
-
By default, jsPsych will render the experiment in the `<body>` element of a page. It is possible to display the experiment in a different element (e.g., a `<div>`) by specifying the `display_element` parameter.
|
|
19
|
-
|
|
20
|
-
```html
|
|
21
|
-
<body>
|
|
22
|
-
<div id="jspsych-target"></div>
|
|
23
|
-
</body>
|
|
24
|
-
<script>
|
|
25
|
-
|
|
26
|
-
// ... //
|
|
27
|
-
|
|
28
|
-
jsPsych.init({
|
|
29
|
-
timeline: [...],
|
|
30
|
-
display_element: 'jspsych-target'
|
|
31
|
-
})
|
|
32
|
-
</script>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
This option is useful if the experiment needs to be rendered on a page with other content (e.g., a demo version of the experiment with annotation text), or if additional control over the display element is desired. Custom CSS rules can be applied to position, size, scale, etc. the display element.
|
|
36
|
-
|
|
37
|
-
## Experiment events
|
|
38
|
-
|
|
39
|
-
Several experiment-wide events can trigger functions. This is documented in more detail on the [event-related callback functions page](callbacks.md). The events that trigger functions are:
|
|
40
|
-
|
|
41
|
-
* `on_finish`: Called at the end of the experiment.
|
|
42
|
-
* `on_trial_start`: Called at the beginning of every trial.
|
|
43
|
-
* `on_trial_finish`: Called at the end of every trial.
|
|
44
|
-
* `on_data_update`: Called whenever new data is added to the jsPsych data object.
|
|
45
|
-
* `on_interaction_data_update`: Called whenever new interaction data (e.g., the subject enters or exits fullscreen mode) is added.
|
|
46
|
-
* `on_close`: Called right before the page closes, such as when a subject closes the experiment early.
|
|
47
|
-
|
|
48
|
-
## Specify exclusion criteria
|
|
49
|
-
|
|
50
|
-
Exclusion criteria can be specified based on features of the user's web browser, such as the display size and whether certain features are reported. See the page on [excluding subjects based on browser features](exclude-browser.md).
|
|
51
|
-
|
|
52
|
-
## Display a progress bar
|
|
53
|
-
|
|
54
|
-
An automatic or manually updated progress bar can be displayed at the top of the screen. By default, the text next to the progress bar is "Completion Progress", but this text can be changed with the `message_progress_bar` parameter in `jsPsych.init`. See the [progress bar page](progress-bar.md) for more details.
|
|
55
|
-
|
|
56
|
-
## Choose the method for playing audio files
|
|
57
|
-
|
|
58
|
-
Specifying the `use_webaudio` parameter in `jsPsych.init()` allows you to choose whether to use the WebAudio API or HTML5 audio for playing audio files during your experiment. By default, jsPsych uses the WebAudio API to play audio files. Among other features, the WebAudio API allows for more precise measurement of response times relative to the onset of the audio.
|
|
59
|
-
|
|
60
|
-
However, loading files through the WebAudio API causes errors when running an experiment offline (i.e., by double-clicking on the HTML file, rather than hosting it on a web server). This is due to the [cross-origin security policy](https://security.stackexchange.com/a/190321) implemented by web browsers. For this reason, jsPsych switches to a 'safe mode' when it detects that the webpage is running offline, and automatically uses HTML5 audio to prevent errors, even when `use_webaudio` has been explicitly set to `true`. For more information, see the section [Cross-origin requests (CORS) and safe mode](running-experiments.md#cross-origin-requests-cors-and-safe-mode) on the Running Experiments page.
|
|
61
|
-
|
|
62
|
-
```js
|
|
63
|
-
jsPsych.init({
|
|
64
|
-
timeline: [...],
|
|
65
|
-
use_webaudio: false
|
|
66
|
-
});
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Set the default intertrial interval
|
|
70
|
-
|
|
71
|
-
By default the next trial in a timeline will begin immediately after the conclusion of the previous trial. An experiment-wide delay can be specified using the `default_iti` parameter to `jsPsych.init()`.
|
|
72
|
-
|
|
73
|
-
```js
|
|
74
|
-
jsPsych.init({
|
|
75
|
-
timeline: [...],
|
|
76
|
-
default_iti: 500
|
|
77
|
-
});
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
This parameter is specified in milliseconds. A blank screen will display between each trial for the duration of the ITI.
|
|
81
|
-
|
|
82
|
-
## Specify the maximum width of the experiment
|
|
83
|
-
|
|
84
|
-
The experiment will, by default, take up 100% of the display element. Usually the display element is the `<body>`, and the experiment is the full width of the screen. (This can be overridden by specifying the `display_element` parameter described above).
|
|
85
|
-
|
|
86
|
-
Specifying the `experiment_width` parameter will set a maximum width for the display. The parameter is specified in pixels.
|
|
87
|
-
|
|
88
|
-
```js
|
|
89
|
-
jsPsych.init({
|
|
90
|
-
timeline: [...],
|
|
91
|
-
experiment_width: 750
|
|
92
|
-
});
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## Specify a minimum valid response time
|
|
96
|
-
|
|
97
|
-
By default, jsPsych will treat any keyboard response time as valid. However, it's possible to specify a minimum valid response time (in ms) for key presses. Any key press that is less than this value will be treated as invalid and ignored. Note that this parameter only applies to _keyboard responses_, and not to other response types such as buttons and sliders. The default value is 0.
|
|
98
|
-
|
|
99
|
-
```js
|
|
100
|
-
// ignore any keyboard responses that are less than 100 ms
|
|
101
|
-
jsPsych.init({
|
|
102
|
-
timeline: [...],
|
|
103
|
-
minimum_valid_rt: 100
|
|
104
|
-
});
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Choose whether you want keyboard choices/responses to be case-sensitive
|
|
108
|
-
|
|
109
|
-
JavaScript keyboard events make a distinction between uppercase and lowercase key responses (e.g. 'a' and 'A'). Often the researcher just cares about which physical key was pressed, and not whether the key press would result in an uppercase letter (for instance, if CapsLock is on or if the Shift key is held down). For this reason, jsPsych converts all key choice parameters and key responses as lowercase by default. This makes it easier to specify key choices (e.g. `choices: ['a']`, instead of `choices: ['a','A']`), and it makes it easier to check and score a participant's response.
|
|
110
|
-
|
|
111
|
-
There may be situations when you want key choices and responses to be case-sensitive. You can change this by setting the `case_sensitive` parameter to `true` in `jsPsych.init`.
|
|
112
|
-
|
|
113
|
-
```js
|
|
114
|
-
// use case-sensitive key choices and responses,
|
|
115
|
-
// i.e. uppercase and lower case letters ('a' and 'A') will be treated as different key choices,
|
|
116
|
-
// and will be recorded this way in the data
|
|
117
|
-
jsPsych.init({
|
|
118
|
-
timeline: [...],
|
|
119
|
-
case_sensitive: true
|
|
120
|
-
});
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Note that this setting only applies to key choices and responses that use jsPsych's keyboard response listener, such as in the *`-keyboard-response` plugins. This does NOT apply to responses that are made by typing into a text box, such as in the `survey-text` and `cloze` plugins.
|
|
124
|
-
|
|
125
|
-
## Override 'safe mode' when running experiments offline
|
|
126
|
-
|
|
127
|
-
By default, jsPsych switches to a 'safe mode' when it detects that the webpage is running offline (via the `file://` protocol) in order to prevent certain errors. Specifically, in safe mode, HTML5 audio is used to play audio files (even when `use_webaudio` has been explicitly set to `true`) and video preloading is disabled (both automatic and manual preloading). For more information, see the [Cross-origin requests (CORS) and safe mode](running-experiments.md#cross-origin-requests-cors-and-safe-mode) section on the Running Experiments page.
|
|
128
|
-
|
|
129
|
-
It's possible to override this safe mode feature by setting the `override_safe_mode` parameter to `true` in `jsPsych.init`. This is something you might do if you've disabled certain security settings in your browser for testing purposes. This parameter has no effect when your experiment is running online (on a server), because it will be using the `http://` or `https://` protocol, which does not trigger safe mode.
|
|
130
|
-
|
|
131
|
-
```js
|
|
132
|
-
jsPsych.init({
|
|
133
|
-
timeline: [...],
|
|
134
|
-
override_safe_mode: true
|
|
135
|
-
});
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## Add extensions
|
|
139
|
-
|
|
140
|
-
Extensions are jsPsych modules that can run throughout the experiment and interface with any plugin to extend the functionality of the plugin. One example of an extension is eye tracking, which allows you to gather gaze data during any trial and add it to that trial's data object. If you want to use extensions in your experiment, you must specify this when you initialize the experiment with `jsPsych.init`. The `extensions` parameter in `jsPsych.init` is an array of objects, where each object specifies the extension that you'd like to use in the experiment. Below is an example of adding the webgazer extension.
|
|
141
|
-
|
|
142
|
-
```js
|
|
143
|
-
jsPsych.init({
|
|
144
|
-
timeline: [...],
|
|
145
|
-
extensions: [
|
|
146
|
-
{type: 'webgazer'}
|
|
147
|
-
]
|
|
148
|
-
});
|
|
149
|
-
```
|
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
# Eye Tracking
|
|
2
|
-
|
|
3
|
-
jsPsych supports eye tracking through the [WebGazer](https://webgazer.cs.brown.edu/) library. WebGazer uses computer vision techniques to identify features of the participant's eyes via a webcam and predicts gaze location. The system is calibrated by having the participant click on or look at known locations on the screen. These locations are linked to eye features. Gaze location is predicted using regression.
|
|
4
|
-
|
|
5
|
-
## Getting Started
|
|
6
|
-
|
|
7
|
-
### Load webgazer.js
|
|
8
|
-
|
|
9
|
-
The [official version of WebGazer](https://webgazer.cs.brown.edu/#download) is currently **not** supported by jsPsych. Our [fork of the library](https://github.com/jspsych/WebGazer) contains some minor improvements aimed at the kind of experiments that jsPsych is typically used for, e.g., situations in which the timing of display screens needs to be accurate.
|
|
10
|
-
|
|
11
|
-
A copy of our fork is included in the jsPsych release, in the `/examples/js/webgazer` folder. You will need to copy this folder into your project directory. This guide will assume that the folder is located at `/js/webgazer`, but you can change the path as you'd like.
|
|
12
|
-
|
|
13
|
-
Include the `webgazer.js` file in your experiment via a `<script>` tag.
|
|
14
|
-
|
|
15
|
-
```html
|
|
16
|
-
<head>
|
|
17
|
-
<script src="jspsych/jspsych.js"></script>
|
|
18
|
-
<script src="js/webgazer/webgazer.js"></script>
|
|
19
|
-
</head>
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### Load the jsPsych webgazer extension
|
|
23
|
-
|
|
24
|
-
The [webgazer extension](/extensions/jspsych-ext-webgazer.md) adds functionality to jsPsych for interacting with webgazer. Load it like you would a plugin file.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
```html
|
|
28
|
-
<head>
|
|
29
|
-
<script src="jspsych/jspsych.js"></script>
|
|
30
|
-
<script src="webgazer.js"></script>
|
|
31
|
-
<script src="jspsych/extensions/jspsych-ext-webgazer.js"></script>
|
|
32
|
-
</head>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
To use the WebGazer extension in an experiment, include it in the list of extensions passed to `jsPsych.init()`
|
|
36
|
-
|
|
37
|
-
```js
|
|
38
|
-
jsPsych.init({
|
|
39
|
-
timeline: [...],
|
|
40
|
-
extensions: [
|
|
41
|
-
{type: 'webgazer'}
|
|
42
|
-
]
|
|
43
|
-
})
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
!!! tip
|
|
48
|
-
Example experiments using WebGazer are available in the **/examples** folder of the jsPsych release. See `webgazer.html`, `webgazer_image.html`, and `webgazer_audio.html`.
|
|
49
|
-
|
|
50
|
-
### Initialize the camera
|
|
51
|
-
|
|
52
|
-
To help the participant position their face correctly for eye tracking you can use the [jspsych-webgazer-init-camera plugin](/plugins/jspsych-webgazer-init-camera.ms). This will show the participant what the camera sees, including facial feature landmarks, and prevent the participant from continuing until their face is in good position for eye tracking. This plugin will also trigger the experiment to request permission to access the user's webcam if it hasn't already been granted.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
```js
|
|
56
|
-
var init_camera_trial = {
|
|
57
|
-
type: 'webgazer-init-camera'
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
### Calibration
|
|
63
|
-
|
|
64
|
-
To calibrate WebGazer, you can use the [jspsych-webgazer-calibrate plugin](/plugins/jspsych-webgazer-calibrate.md). This plugin allows you to specify a set of points on the screen for calibration and to choose the method for calibrating -- either clicking on each point or simply fixating on each point. The location of calibration points is specified in percentages, e.g., `[25,50]` will result in a point that is 25% of the width of the screen from the left edge and 50% of the height of the screen from the top edge. Options for controlling other details of the calibration are explained in the [documentation for the plugin](/plugins/jspsych-webgazer-calibrate.md).
|
|
65
|
-
|
|
66
|
-
Note that instructions are not included in the calibration plugin, so you'll likely want to use a different plugin (e.g., `html-button-response`) to display instructions prior to running the calibration.
|
|
67
|
-
|
|
68
|
-
```js
|
|
69
|
-
var calibration_trial = {
|
|
70
|
-
type: 'webgazer-calibrate',
|
|
71
|
-
calibration_points: [[25,50], [50,50], [75,50], [50,25], [50,75]],
|
|
72
|
-
calibration_mode: 'click'
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
### Validation
|
|
78
|
-
|
|
79
|
-
To measure the accuracy and precision of the calibration, you can use the [jspsych-webgazer-vaidate plugin](/plugins/jspsych-webgazer-validate.md). Like the calibration plugin, you can specify a list of points to perform validation on. Here you can specify the points as either percentages or in terms of the distance from the center of the screen in pixels. Which mode you use will probably depend on how you are defining your stimuli throughout the experiment. You can also specify the radius of tolerance around each point, and the plugin will calculate the percentage of measured gaze samples within that radius. This is a potentially useful heuristic for deciding whether or not to calibrate again. Options for controlling other details of the validation are explained in the [documentation for the plugin](/plugins/jspsych-webgazer-validate.md).
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
```js
|
|
83
|
-
var validation_trial = {
|
|
84
|
-
type: 'webgazer-validate',
|
|
85
|
-
validation_points: [[-200,200], [200,200],[-200,-200],[200,-200]],
|
|
86
|
-
validation_point_coordinates: 'center-offset-pixels',
|
|
87
|
-
roi_radius: 100
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
The validation procedure stores the raw gaze data for each validation point, the computed average offset from each validation point, the percentage of samples within the `roi_radius` for each validation point, and the number of samples collected per second.
|
|
92
|
-
|
|
93
|
-
```js
|
|
94
|
-
{
|
|
95
|
-
raw_gaze: [...],
|
|
96
|
-
percent_in_roi: [...],
|
|
97
|
-
average_offset: [...],
|
|
98
|
-
samples_per_sec: ...
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
We recommend performing calibration and validation periodically throughout your experiment.
|
|
103
|
-
|
|
104
|
-
### Adding eye tracking to a trial
|
|
105
|
-
|
|
106
|
-
To enable eye tracking for a trial in your experiment, you can simply add the WebGazer extension to the trial.
|
|
107
|
-
|
|
108
|
-
```js
|
|
109
|
-
var trial = {
|
|
110
|
-
type: 'html-keyboard-response',
|
|
111
|
-
stimulus: '<img id="scene" src="my-scene.png"></img>',
|
|
112
|
-
extensions: [
|
|
113
|
-
{
|
|
114
|
-
type: 'webgazer',
|
|
115
|
-
params: {
|
|
116
|
-
targets: ['#scene']
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
]
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
This will turn on WebGazer at the start of the trial.
|
|
124
|
-
|
|
125
|
-
The `params` property in the `extensions` declaration allows you to pass in a list of [CSS selector strings](https://www.w3schools.com/cssref/css_selectors.asp). The [bounding rectangle](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect) of the DOM element that matches each selector will be recorded in the data for that trial. This allows for easy alignment of the gaze data and objects on the screen.
|
|
126
|
-
|
|
127
|
-
```js
|
|
128
|
-
webgazer_targets : {
|
|
129
|
-
'selector': {x: ..., y: ..., height: ..., width: ..., top: ..., left: ..., right: ..., bottom:...}
|
|
130
|
-
'selector': {x: ..., y: ..., height: ..., width: ..., top: ..., left: ..., right: ..., bottom:...}
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Gaze data will be added to the trial's data under the property `webgazer_data`. The gaze data is an array of objects. Each object has an `x`, a `y`, and a `t` property. The `x` and `y` properties specify the gaze location in pixels and `t` specifies the time in milliseconds since the start of the trial. Note that establishing the precision and accuracy of these measurements across the variety of web browsers and systems that your experiment participants might be using is quite difficult. For example, different browsers may cause small systematic shifts in the accuracy of `t` values.
|
|
135
|
-
|
|
136
|
-
```js
|
|
137
|
-
webgazer_data: [
|
|
138
|
-
{x: ..., y: ..., t: ...},
|
|
139
|
-
{x: ..., y: ..., t: ...},
|
|
140
|
-
{x: ..., y: ..., t: ...},
|
|
141
|
-
{x: ..., y: ..., t: ...}
|
|
142
|
-
]
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Tips for Improving Data Quality
|
|
146
|
-
|
|
147
|
-
These are some anecdotal observations about factors that improve data quality.
|
|
148
|
-
|
|
149
|
-
1. The quality of the camera feed is essential. Good lighting makes a big difference. You may want to encourage participants to perform any eye tracking experiments in a well-lit room.
|
|
150
|
-
2. Participants need to keep their head relatively still during and after calibration. The calibration is not robust to head movements.
|
|
151
|
-
3. WebGazer's click-based calibration can be used throughout the experiment. You can turn this on by calling `jsPsych.extensions.webgazer.startMouseCalibration()` at any point in the experiment. If you use a continue button to advance through the experiment and move the location of the continue button around you can be making small adjustments to the calibration throughout.
|
|
152
|
-
4. Computing the gaze predictions consumes more computational resources than most other things that jsPsych is typically used for. The sampling rate that WebGazer is able to achieve will depend on the computing power of the participant's device. You may want to ask the participant to close any non-essential software and browser windows prior to completing the experiment. You may also want to check that the sampling rate is sufficiently high as part of validation.
|
|
153
|
-
|
|
154
|
-
If you have tips based on your own experience please consider sharing them on our [discussion forum](https://github.com/jspsych/jsPsych/discussions) and we'll add to this list!
|
|
155
|
-
|
|
156
|
-
## Example
|
|
157
|
-
|
|
158
|
-
The code below shows a basic example of what it looks like when you put all of these things together in your experiment's HTML file.
|
|
159
|
-
|
|
160
|
-
```html
|
|
161
|
-
<html>
|
|
162
|
-
<head>
|
|
163
|
-
<script src="jspsych/jspsych.js"></script>
|
|
164
|
-
<script src="jspsych/plugins/jspsych-preload.js"></script>
|
|
165
|
-
<script src="jspsych/plugins/jspsych-image-keyboard-response.js"></script>
|
|
166
|
-
<script src="jspsych/plugins/jspsych-html-keyboard-response.js"></script>
|
|
167
|
-
<script src="jspsych/plugins/jspsych-webgazer-init-camera.js"></script>
|
|
168
|
-
<script src="jspsych/plugins/jspsych-webgazer-calibrate.js"></script>
|
|
169
|
-
<script src="jspsych/plugins/jspsych-webgazer-validation.js"></script>
|
|
170
|
-
<script src="js/webgazer/webgazer.js"></script>
|
|
171
|
-
<script src="jspsych/extensions/jspsych-ext-webgazer.js"></script>
|
|
172
|
-
<link rel="stylesheet" href="jspsych/css/jspsych.css">
|
|
173
|
-
</head>
|
|
174
|
-
<body></body>
|
|
175
|
-
<script>
|
|
176
|
-
|
|
177
|
-
var preload = {
|
|
178
|
-
type: 'preload',
|
|
179
|
-
images: ['img/blue.png']
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
var init_camera = {
|
|
183
|
-
type: 'webgazer-init-camera'
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
var calibration = {
|
|
187
|
-
type: 'webgazer-calibrate'
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
var validation = {
|
|
191
|
-
type: 'webgazer-validate'
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
var start = {
|
|
195
|
-
type: 'html-keyboard-response',
|
|
196
|
-
stimulus: 'Press any key to start.'
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
var trial = {
|
|
200
|
-
type: 'image-keyboard-response',
|
|
201
|
-
stimulus: 'img/blue.png',
|
|
202
|
-
choices: jsPsych.NO_KEYS,
|
|
203
|
-
trial_duration: 1000,
|
|
204
|
-
extensions: [
|
|
205
|
-
{
|
|
206
|
-
type: 'webgazer',
|
|
207
|
-
params: {targets: ['#jspsych-image-keyboard-response-stimulus']}
|
|
208
|
-
}
|
|
209
|
-
]
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
jsPsych.init({
|
|
213
|
-
timeline: [init_camera, calibration, validation, start, trial],
|
|
214
|
-
preload_images: ['img/blue.png'],
|
|
215
|
-
extensions: [
|
|
216
|
-
{type: 'webgazer'}
|
|
217
|
-
]
|
|
218
|
-
})
|
|
219
|
-
|
|
220
|
-
</script>
|
|
221
|
-
</html>
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
Below is example data from the image-keyboard-response trial taken from the experiment above. In addition to the standard data that is collected for this plugin, you can see the additional `webgazer_data` and `webgazer_targets` arrays. The `webgazer_data` shows 21 gaze location estimates during the 1-second image presentation. The `webgazer_targets` array shows that there was one target, the image-keyboard-response stimulus, and tells you the x- and y-coordinate boundaries for the target (image) rectangle. By comparing each of the x/y locations from the `webgazer_data` locations array with the target boundaries in `webgazer_targets`, you can determine if/when the estimated gaze location was inside the target area.
|
|
225
|
-
|
|
226
|
-
```js
|
|
227
|
-
{
|
|
228
|
-
"rt": null,
|
|
229
|
-
"stimulus": "img/blue.png",
|
|
230
|
-
"response": null,
|
|
231
|
-
"trial_type": "image-keyboard-response",
|
|
232
|
-
"trial_index": 4,
|
|
233
|
-
"time_elapsed": 30701,
|
|
234
|
-
"internal_node_id": "0.0-4.0",
|
|
235
|
-
"webgazer_data": [
|
|
236
|
-
{ "x": 1065, "y": 437, "t": 39},
|
|
237
|
-
{ "x": 943, "y": 377, "t": 79},
|
|
238
|
-
{ "x": 835, "y": 332, "t": 110},
|
|
239
|
-
{ "x": 731, "y": 299, "t": 146},
|
|
240
|
-
{ "x": 660, "y": 271, "t": 189},
|
|
241
|
-
{ "x": 606, "y": 251, "t": 238},
|
|
242
|
-
{ "x": 582, "y": 213, "t": 288},
|
|
243
|
-
{ "x": 551, "y": 200, "t": 335},
|
|
244
|
-
{ "x": 538, "y": 183, "t": 394},
|
|
245
|
-
{ "x": 514, "y": 177, "t": 436},
|
|
246
|
-
{ "x": 500, "y": 171, "t": 493},
|
|
247
|
-
{ "x": 525, "y": 178, "t": 542},
|
|
248
|
-
{ "x": 537, "y": 182, "t": 592},
|
|
249
|
-
{ "x": 543, "y": 178, "t": 633},
|
|
250
|
-
{ "x": 547, "y": 177, "t": 691},
|
|
251
|
-
{ "x": 558, "y": 174, "t": 739},
|
|
252
|
-
{ "x": 574, "y": 183, "t": 789},
|
|
253
|
-
{ "x": 577, "y": 197, "t": 838},
|
|
254
|
-
{ "x": 584, "y": 214, "t": 889},
|
|
255
|
-
{ "x": 603, "y": 218, "t": 937},
|
|
256
|
-
{ "x": 606, "y": 221, "t": 987}
|
|
257
|
-
],
|
|
258
|
-
"webgazer_targets": [
|
|
259
|
-
"#jspsych-image-keyboard-response-stimulus": {
|
|
260
|
-
"x": 490,
|
|
261
|
-
"y": 135,
|
|
262
|
-
"height": 300,
|
|
263
|
-
"width": 300,
|
|
264
|
-
"top": 135,
|
|
265
|
-
"bottom": 435,
|
|
266
|
-
"left": 490,
|
|
267
|
-
"right": 790
|
|
268
|
-
}
|
|
269
|
-
]
|
|
270
|
-
}
|
|
271
|
-
```
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# Fullscreen Experiments
|
|
2
|
-
|
|
3
|
-
You can run your experiment in fullscreen mode by using the jspsych-fullscreen plugin.
|
|
4
|
-
|
|
5
|
-
```javascript
|
|
6
|
-
var timeline = [];
|
|
7
|
-
|
|
8
|
-
timeline.push({
|
|
9
|
-
type: 'fullscreen',
|
|
10
|
-
fullscreen_mode: true
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
timeline.push({
|
|
14
|
-
type: 'html-keyboard-response',
|
|
15
|
-
stimulus: 'This trial will be in fullscreen mode.'
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
// exit fullscreen mode
|
|
19
|
-
timeline.push({
|
|
20
|
-
type: 'fullscreen',
|
|
21
|
-
fullscreen_mode: false
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
timeline.push({
|
|
25
|
-
type: 'html-keyboard-response',
|
|
26
|
-
stimulus: 'This trial will NOT be in fullscreen mode.'
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
jsPsych.init({
|
|
30
|
-
timeline: timeline
|
|
31
|
-
});
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
For security reasons, web browsers require that users initiate an action to launch fullscreen mode. The fullscreen plugin displays a button that the user must click to change the display to fullscreen.
|
|
35
|
-
|
|
36
|
-
Safari does not support keyboard input when the browser is in fullscreen mode. Therefore, the function will not launch fullscreen mode on Safari. The experiment will ignore any trials using the fullscreen plugin in Safari.
|