我正在尝试使用补间作为计数器,该计数器在持续时间内仅返回0-4。
我只希望它一次返回多个相同的数字。
我正在使用https://popmotion.io/。这是我到目前为止所拥有的。

  import { tween, easing, transform } from 'popmotion';

  onHandleClick() {
   // const { clamp } = transform;
    const twn = tween({ from: 0, to: 4 }).pipe(Math.round);
    twn.start(this.addToList);
  }

  addToList(val) {
    console.log('val = ', val);
 }


上面的输出如下:

val =  1
val =  1
val =  2
val =  2
val =  2
val =  3
val =  3
val =  3
val =  3
val =  3
val =  4
val =  4
val =  4
val =  4
val =  4
val =  4
val =  4


我需要的是,所以它只输出0到4之间的唯一数字
例:

val =  0
val =  1
val =  2
val =  3
val =  4


他们有说的过滤方法。


  filter((v:any)=> boolean):返回一个过滤掉的新动作
  提供的函数返回false时的值。


我不确定如何使用过滤器只返回一次相同的数字?

最佳答案

Popmotion tween API返回filter,while,start和pipe,其中每个实际上是一个迭代器函数。因此,传递给start.update之前的值将一一传递给那些迭代器函数。这意味着最初(在动画开始之前)您无法获取将传递给start.update的所有值。

除了保留诸如存储lastValue的变量之类的全局状态(即popmotion.tween之上的状态)外,别无选择。然后在每个start.update中更新lastValue,如果当前updateValue与lastValue相同,则进行过滤。让我们看一下代码,它将更容易理解

var lastValue;

popmotion.tween({from:0,to:4})
            .pipe(Math.round)
            .filter(function(value){
                return lastValue != value;
             })
            .start(function(updateValue){
                lastValue = updateValue;
                console.log('val = ',updateValue)
             })


在上面的代码中,将Tween值通过管道进行舍入,然后通过与lastValue(对于tween处于全局状态)进行比较进行过滤。并在每次更新时更改此全局状态(lastValue)。重要的是要注意,应在过滤值(管道)之前对其进行四舍五入。

输出:

val =  0
val =  1
val =  2
val =  3
val =  4


好吧,您非常靠近解决方案的地方,可以使用过滤器来解决它。

如果您不知道过滤器的工作原理,则基本上,如果迭代器函数对于传递的值返回true,则该值被接受并存储在单独的数组中;如果返回false,则拒绝并不存储传递的值。因此,在过滤器的末尾,您将得到一个包含所有使过滤器迭代器函数返回true的值的新数组。您可以阅读有关过滤器的更多信息here

希望对您有所帮助。

关于javascript - popmotion补间筛选器,用于唯一计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50192664/

10-14 04:39