2016-07-06 45 views
1

我试图得到一个不错的向上和向下的动画使用JavaScript会在我的网站,但我需要一个像这样的顺序:如何获得像模模式的窦

0 1 2 3 4 3 2 1 0 1 2 3 4 ...

但模块,我倾向于使用重复的动作只给我:

0 1 2 3 4 0 1 2 3 4 0 1 2 ...

我怎样才能得到一个圆形图案,例如从i++变量。

我尝试应用一个正弦波例如。

+1

你可能不希望所有的数字都是整数......你呢? – Zac

回答

2

你似乎需要的是一个三角波。尝试了这一点:

var period = 8, 
 
    amplitude = 4; 
 

 
for (var i = 0; i < 50; i++) { 
 
    console.log(
 
    amplitude * Math.abs(
 
     2*(i/period - Math.floor(i/period + 1/2)) 
 
    ) 
 
) 
 
}

下面是它采用模运算符的一个版本:

var period = 8, 
 
    amplitude = 4; 
 

 
for (var i = 0; i < 50; i++) { 
 
    console.log(
 
    (2 * amplitude/period) * (
 
     Math.abs(((i + period/2) % period) - period/2) 
 
    ) 
 
) 
 
}

两者的基本原则是,你可以创建这些工作取锯齿波的绝对值作为三角波。在第一个我们使用Math.floor来创建一个锯齿波,在第二个我们使用%

+0

我应该避免只在评论中表示感谢,但我只想为此感谢你:)。令人敬畏的锯齿波! –

1

你可以做这样的事情:

"use strict" 
 
for (let i=0;i<20;i+=0.25) { // step size 
 
    console.log(
 
    Math.round(//integers only 
 
     Math.abs(//positives 
 
     Math.sin(i)*4 //sin goes from 0 to 1, so if your peak is 4... 
 
    ) 
 
    ) 
 
); 
 
}