0

使用 JsPsych,我需要为每个问题提示设置一个 10 秒的计时器,以便当时间到时,试用会立即结束并转到下一个问题。这是我的代码:

var time_limit = 10000;
var start_time2;
var end_test_timer;
var trial_count = 0;
var n_trials = questions.length;
var counter2 = 1;

var ListB_test_trial = {
    timeline_variables: [ 
        {data: questions[0], q: questions[0]}, 
        {data: questions[1], q: questions[1]},
    ],
    timeline: [ {
        timeline: [
            {type: 'survey-text',
            questions: function (){
                return [{prompt: '(Q' + counter2 + '/15) ' + jsPsych.timelineVariable('q', true), columns: 25, required: true}]
            },
            button_label: ['submit'],
            data: jsPsych.timelineVariable('data'), 
            preamble:  '<p style="font-size: 15px; line-height: 12px;">[Please answer using your own knowledge and best guess. Type your answer and press submit.]</p>',
            on_load: function() {
                trial_count++;
                // we need to set up the timer to end the current timeline after a certain duration, but only on the first trial
                if (trial_count > 0) {
                    start_time2 = performance.now();
                    var end_test_timer = setTimeout(function() {
                        // this stuff is just for testing
                        var end_time = performance.now();
                        var elapsed_time = end_time - start_time2;
                        console.log("elapsed time: ", elapsed_time);
                        // this function is all you need to end the current timeline
                        jsPsych.endCurrentTimeline();
                        // this function ends the current trial 
                        jsPsych.finishTrial({status: "ended early"});
                    }, time_limit);
                }
            }, 
            on_finish: function() {
                counter2++;
                // we also need to cancel the setTimeout timer if the person gets all the way through the timeline before 
                // time_limit is reached, otherwise endCurrentTimeline will fire during the next timeline - not good!!
                if (trial_count == n_trials) {
                    clearTimeout(end_test_timer);
                }
                    }
            }
        ], 
        randomize_order: true,
    }, get_ready ]
};
timeline.push(ListB_test_trial);

我从这里得到了代码:https ://github.com/jspsych/jsPsych/discussions/1146但不知道如何适应它。到目前为止,回答所有问题的总时间限制为 10 秒,而不是每个问题的 10 秒。

谢谢!

4

0 回答 0