首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setInterval,最后一个和最后一个元素的不同间隔(jsPsych)

setInterval,最后一个和最后一个元素的不同间隔(jsPsych)
EN

Stack Overflow用户
提问于 2015-11-05 22:32:53
回答 2查看 207关注 0票数 0

我正在尝试修改jsPsych库中的脚本,以便进行语言和心理学实验,这是一个代码,它显示了图像的行和用户无法回答的内容。

您可以设置图像可见的时间,但只在组中(=每个图像的时间相同),但我需要显示最后一个和最后一个图像之前的不同时间。有人帮我实现这个目标吗?

代码语言:javascript
复制
  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?

我不知道这是否对我有帮助,但如果没有,问我我会尽力做到最好。提前谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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用于显示图像。

有两个执行逻辑或运行逻辑:

  1. 第一执行或运行逻辑(rn1)使用第一时间间隔(例如,一秒)。它显示了图像1到n-1。在显示图像n-1之后,它移除interval对象,并为第二个执行逻辑调度一个新的interval对象。
  2. 第二执行或运行逻辑(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

代码语言:javascript
复制
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

代码语言:javascript
复制
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);

启动控制系统:

代码语言:javascript
复制
ai=startInterval(rn1,1000);

然后rn1最终会调用st2,rn2最终会结束这个过程。如果需要额外的计算(如display_element.html("")),将它们添加到rn1和rn2中。

参考资料

“setInterval,最后一个元素之前的不同间隔(JsPsych)”(2015年)。堆栈溢出。于2015年11月5日从setInterval,最后一个和最后一个元素的不同间隔(jsPsych)检索。

票数 1
EN

Stack Overflow用户

发布于 2015-11-05 23:09:52

而不是setInterval,您可以链接setTimeout回调。这将允许您操作每个函数调用之间的延迟。下面是如何构造您的函数,然后实现逻辑来确定最后两个测试的延迟。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33556060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档