在Framer中延迟迭代

时间:2017-08-28 17:00:33

标签: framerjs

我有一个文本字段,我想一次推出一个单词。单词是在一个数组中。要显示的单词之间的延迟设置为1秒。第一个单词显示2秒。因此奇怪的双重陈述。

msgArray = [
    ["Hello", "World"], 
    ["89:23", "Tom Eriksen","Scooores!!"],
    ["Overtime", "about to", "start"]]

printMessageLoop =  (msgArray, target) ->
target.text = msgArray[0]
timeToRead = 1
Utils.delay timeToRead, () ->
    for i in [1..msgArray.length-1]
        Utils.delay timeToRead*i,() ->
            target.text = msgArray[i]
            print "i="+i #debugging purpose

当我致电printMessageLoop(msgArray[2])时,target正确显示第一个字,但最后两个是“未定义”。打印输出说:

printMessageLoop(msgArray[2])

»i=3
»i=3

似乎在执行第target.text = msgArray[i]行时i设置为最后i。那就是i ++ = 3

为什么呢?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在延迟之前致电do (i) ->以确保将i的当前值转发到将来的指令

printMessageLoop =  (msgArray, target) ->
target.text = msgArray[0]
timeToRead = target.text.length/20 * readingSpeed
Utils.delay timeToRead, () ->
    for i in [1..msgArray.length-1]
        do (i) ->
            Utils.delay timeToRead*i,() ->
                target.text = msgArray[i    ]
                print "i="+i
                timeToRead = target.text.length/20 * readingSpeed