setInterval,最后一个元素和最后一个元素之前的不同间隔(jsPsych)
setInterval, different intervals for last and one before last element (jsPsych)
我正在尝试修改 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?
我不知道这是否足以帮助我,但如果不够,请问我,我会尽力做到最好。非常感谢!
您可以链接 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);
可以使用 setInterval 以不同的时间间隔显示图像。考虑以下因素:
控制系统使用相同的时间间隔显示图像 1,2,…n-2,并使用另一个时间间隔显示图像 n-1,n(“setInterval”,2015)。图 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)使用第二个时间间隔(例如四秒)。它显示最后一张图像,然后从显示中删除最后一张图像。
图像的显示方式有以下三种。第一种方法(T_0)将下一张图像的显示与将 m_1 递增 1 并将 m_(0 ) 递减 1 结合起来。第二种方法(T_1)将下一张图像的显示结合起来m_1 递增 1 和 m_2 递减 1 的下一张图像。第三种方法 (T_2) 显示空白 space,删除最后一张图像。在任何给定时刻,none 或计算逻辑 T_0、T_1 和 T_2 中的一个都可能发生。当none个计算逻辑可以发生时,执行逻辑结束;换句话说,间隔对象被清除(例如 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 日从 检索。
我正在尝试修改 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?
我不知道这是否足以帮助我,但如果不够,请问我,我会尽力做到最好。非常感谢!
您可以链接 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);
可以使用 setInterval 以不同的时间间隔显示图像。考虑以下因素:
控制系统使用相同的时间间隔显示图像 1,2,…n-2,并使用另一个时间间隔显示图像 n-1,n(“setInterval”,2015)。图 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)使用第二个时间间隔(例如四秒)。它显示最后一张图像,然后从显示中删除最后一张图像。
图像的显示方式有以下三种。第一种方法(T_0)将下一张图像的显示与将 m_1 递增 1 并将 m_(0 ) 递减 1 结合起来。第二种方法(T_1)将下一张图像的显示结合起来m_1 递增 1 和 m_2 递减 1 的下一张图像。第三种方法 (T_2) 显示空白 space,删除最后一张图像。在任何给定时刻,none 或计算逻辑 T_0、T_1 和 T_2 中的一个都可能发生。当none个计算逻辑可以发生时,执行逻辑结束;换句话说,间隔对象被清除(例如 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 日从