【问题标题】:Iterating with delay in Framer在 Framer 中延迟迭代
【发布时间】:2017-08-28 17:00:33
【问题描述】:

我有一个文本字段,我想一次推出一个单词。单词在一个数组中。显示单词之间的延迟设置为 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

为什么?我该如何解决?

【问题讨论】:

    标签: framerjs


    【解决方案1】:

    在延迟之前调用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
    

    【讨论】:

      猜你喜欢
      • 2011-07-16
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      • 2021-06-16
      • 2017-04-18
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多