草庐IT

JavaScript:自动对 Angular 排列变量多维数组

coder 2024-07-24 原文

这更像是一个与数学相关的问题。

我正在尝试使用 jQuery 创建一个可爱的淡入淡出效果,方法是将一个元素分成一定数量的 block ,然后使每个 block 淡出,但基于另一个数组延迟淡入淡出效果。

所以为了创建 block 表,我有两个变量:

var rows = 4,
    cols = 10;

这会将元素分成如下 block :

              0   1   2   3   4   5   6   7   8   9
             10  11  12  13  14  15  16  17  18  19
             20  21  22  23  24  25  26  27  28  29
             30  31  32  33  34  35  36  37  38  39

然后我创建了另一个数组来决定 block 如何动画。例如,对于从左到右的对 Angular 线动画,此数组如下所示:

order = [0, 10, 1, 20, 11, 2, 30, 21, 12, 3, 31, 22, 13, 4, 32, 23, 14, 5, 33, 24, 15, 6, 34, 25, 16, 7, 35, 26, 17, 8, 36, 27, 18, 9, 37, 28, 19, 38, 29, 39];

对于这个特定的案例,它是有效的 :D

我的问题是如何根据可以更改的 block 数(行 x 列)自动而不是手动创建 order 数组?

谢谢

最佳答案

这样做就可以了:

var arr = [];

var rows = 4;
var cols = 10;

for(var i = 0; i < rows + cols - 1; i++){

    for(var j = Math.min(rows, i + 1) - 1; j >= Math.max(0, i - cols + 1); j--){
        arr.push((j * cols) + i - j);
    }  

}

fiddle :http://jsfiddle.net/BmXpy/

编辑:这是我试图解释我是如何想到这个的。重要提示,使用上面的数字表进行可视化,如果需要,打印它并画出对 Angular 线。

首先,想想我们想要什么,它基本上是对 Angular 线。在上面的示例中,第一个对 Angular 线是 0,然后是 10、1,然后是 20、11、2,然后是 30、21、12、3 等等。现在如果您考虑一下这些对 Angular 线有多少条,它是 行 + 列 - 1。这就是我们得到第一个循环的地方:

for(var i = 0; i < rows + cols - 1; i++){

现在,暂时忽略边界。在一般情况下(整个中心),这些对 Angular 线中的每一个都是“行”长。因为我们想要自下而上,所以我们想要一个反向循环。内循环看起来像这样:

for(var j = rows - 1; j >= 0; j--){

现在,我们必须处理两个边界(左边界和右边界)。

对于左边界,如果我们查看长度小于“行”的对 Angular 线数量,我们将看到它是rows - 1。对于这些对 Angular 线,我们将看到每条对 Angular 线的长度为 i + 1。以下内部循环将处理一般情况和左边界:

for(var j = Math.min(rows, i + 1) - 1; j >= 0; j--){

你会看到对于对 Angular 线 0,这将运行一次,对于 1 它将运行两次,等等。对于一般情况 (i >= rows) 它将运行“行”次.

现在,正确的边界。如果我们查看右侧的哪些对 Angular 线比“行”短,我们会看到所有对 Angular 线都大于“cols”(在 cols 为 10、0 索引的示例中,即第 10 行及以后)。将 j >= 0 替换为 j >= Math.max(0, i - cols + 1) 对于一般情况和左边界将运行到 0 但缩短正确的边界。我们得到这个:

for(var j = Math.min(rows, i + 1) - 1; j >= Math.max(0, i - cols + 1); j--){

最后,实际计算每个位置的数量。 i 表示对 Angular 线,j 表示对 Angular 线上数字的索引 j = 0 是顶部数字,如果您正在查看张贴的数字表。对于 j = 0(数字的第一行),数字只是 i,对于顶部以下的每一行,我们需要将数字乘以“cols”以便得到第一行数字正下方的数字,那么数字需要向左调整。这是通过减去行号 j 来完成的。因此,对于 j = 1(第 2 行),我们需要将数字向左移动一位(减去 1)。所以我们有 i 作为第一行的水平位置, + (j * cols) 将它向下移动到适当的行,然后 -j 将它调整为对 Angular 线(如果您已经绘制了对 Angular 线,请追踪其中一条以获得良好的视觉效果)。我们得到这个:

(j * cols) + i - j

把它们放在一起,你就得到了我上面的最终代码。希望这是有道理的。

关于JavaScript:自动对 Angular 排列变量多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5833529/

有关JavaScript:自动对 Angular 排列变量多维数组的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  3. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  4. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  5. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  6. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  7. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  8. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  9. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  10. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

随机推荐