我试图从jsPsych库修改脚本以进行语言和心理学实验,这里有一个代码,用于显示行中的图像,而不是用户可以回答的。
您可以设置图像可见的时间,但仅限于组(=每个图像的同一时间),但我需要显示最后一个图像和最后图像不同时间之前的图像。有人帮助我如何实现这个目标吗?
var animate_interval = setInterval(function() {
display_element.html(""); // clear everything
animate_frame++;
//zobrazeny vsechny obrazky
if (animate_frame == trial.stims.length) {
animate_frame = 0;
reps++;
// check if reps complete //
if (trial.sequence_reps != -1 && reps >= trial.sequence_reps) {
// done with animation
showAnimation = false;
}
}
// ... parts of plugin, showing answers and so on.
},
3000); // <---------------- how to change this value for the last and one before lastelement?
我不知道这是否有助于我,但如果没有,请问我会尽力做到最好。非常感谢提前!
答案 0 :(得分:1)
您可以链接setTimeout回调而不是setInterval。这将允许您操纵每个函数调用之间的延迟。这是我如何构建你的函数,然后实现逻辑来确定最后两个测试的延迟。
var showImage = function(currTest, lastTest) {
display_element.html(""); // clear everything
animate_frame++;
//zobrazeny vsechny obrazky
if (animate_frame == trial.stims.length) {
animate_frame = 0;
reps++;
// check if reps complete //
if (trial.sequence_reps != -1 && reps >= trial.sequence_reps) {
// done with animation
showAnimation = false;
}
}
// ... parts of plugin, showing answers and so on.
// create a wrapper function so we can pass params to showImage
var wrapper = function() {
showImage(currTest + 1, lastTest);
}
if (currTest === lastTest) {
setTimeout(wrapper, your_other_desired_delay);
} else if (currTest - 1 === lastTest) {
setTimeout(wrapper, your_desired_delay);
} else if (currTest < lastTest) {
setTimeout(wrapper, standard_delay);
}
}
showImage(0, trials.length);
答案 1 :(得分:1)
可以使用setInterval以不同的时间间隔显示图像。请考虑以下事项:
控制系统使用相同的时间间隔显示图像1,2,... n-2,并使用另一个时间间隔(“setInterval”,2015)显示图像n-1,n。图1是根据Petri网的控制系统的过程模型。 For the PDF version of this reply, it is an interactive Petri Net.
P_1(m_1)的标记等同于变量animate_frame。如果m_1 = 0,则不显示图像。如果m_1 = 1,则显示第一张图像。如果m_1 = 2,则显示第二个图像。等等。如果总共显示十个图像,则初始值为〖m〗_0 = 8,〖m〗_1 = 0,〖m〗_2 = 2.m_0用于控制第一个时间间隔的使用。 m_2用于控制第二时间间隔的使用。 m_1用于显示图像。
有两个执行或运行逻辑:
第一个执行或运行逻辑(rn1)使用第一个时间间隔(例如一秒)。它显示图像1到n-1。在显示图像n-1之后,它删除了间隔对象,并为第二个执行逻辑安排了一个新的间隔对象。
第二个执行或运行逻辑(rn2)使用第二个时间间隔(例如4秒)。它显示最后一张图像,然后从显示中删除最后一张图像。
有三种显示图像的方法。第一种方法(T_0)将下一图像的显示与递增m_1乘以1并将m_(0)递减1.第二种方法(T_1)组合下一图像的显示,将m_1递增1并将m_2递减1 。第三种方法(T_2)显示一个空格,删除最后一张图像。在任何给定时刻,可以不出现计算逻辑T_0,T_1和T_2中的一个或仅出现一个。当没有任何计算逻辑发生时,执行逻辑结束;换句话说,清除了间隔对象(例如clearInterval())。
使用图1中的Petri网作为指南,控制系统的计算机程序可以按如下方式组织:
<强> RN1 强>
if (m_0≥1) {
// T_0
m_0=m_0-1
m_1=m_1+1
// update image using plugin API
} else if ((m_0==0) && (m_2≥1)) {
// T_1
m_2=m_2-1
m_1=m_1+1
// update image using plugin API
clearInterval(ai);
ai=setInterval(rn2,4000);
} else
clearInterval(ai);
<强> RN2 强>
if (m_2≥1) {
// T_1
m_2=m_2-1
m_1=m_1+1
// update image using plugin API
} else if (m_2==10) {
// T_2
m_1=m_1-1
// hide image using plugin API
} else
clearInterval(ai);
启动控制系统:
ai=startInterval(rn1,1000);
然后rn1最终将调用st2,rn2最终将结束该进程。如果需要额外的计算(例如display_element.html(&#34;&#34;)),请将它们添加到rn1和rn2。
<强> 参考 强>
“setInterval,最后一个元素的不同间隔(jsPsych)”(2015)。堆栈溢出。 2015年11月5日从setInterval, different intervals for last and one before last element (jsPsych)检索。