我正在尝试修改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?我不知道这是否对我有帮助,但如果没有,问我我会尽力做到最好。提前谢谢!
发布于 2015-11-08 02:11:52
使用setInterval可以使用不同的时间间隔来显示图像。请考虑以下几点:
控制系统显示图像1,2,…n-2使用相同的时间间隔,并显示图像n-1,n使用另一个时间间隔(“setInterval”,2015年)。图1是基于Petri网的控制系统的过程模型。对于这个答复的PDF版本,它是一个交互式的Petri网。

图1
P_1 (m_1)的标记等价于变量animate_frame。如果是m_1=0,则不显示图像。如果是m_1=1,则显示第一个图像。如果是m_1=2,则显示第二个图像。诸若此类。如果总共显示10幅图像,则初始值为[m]_0=8、[m]_1=0和[m]_2=2.m_0,用于控制第一个时间间隔的使用。m_2用于控制第二时间间隔的使用。m_1用于显示图像。
有两个执行逻辑或运行逻辑:
有三种方式来显示图像。第一种方法(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("")),将它们添加到rn1和rn2中。
参考资料
“setInterval,最后一个元素之前的不同间隔(JsPsych)”(2015年)。堆栈溢出。于2015年11月5日从setInterval,最后一个和最后一个元素的不同间隔(jsPsych)检索。
发布于 2015-11-05 23:09:52
而不是setInterval,您可以链接setTimeout回调。这将允许您操作每个函数调用之间的延迟。下面是如何构造您的函数,然后实现逻辑来确定最后两个测试的延迟。
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);https://stackoverflow.com/questions/33556060
复制相似问题