Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象上的javascript递归永不结束_Javascript_Jquery_Recursion - Fatal编程技术网

对象上的javascript递归永不结束

对象上的javascript递归永不结束,javascript,jquery,recursion,Javascript,Jquery,Recursion,我的递归函数无法正确循环,在底部是我的代码,我遇到了问题,之前的内容只是为了表明我在这方面做了很多工作:)还有一个链接到一个工作示例。我以前使用过大量嵌套for循环,如下所示: function assembleTimeline(targetItem, sequence) { var TIMELINE = ""; var greenAniArray = {options:{}}; for (S = 0; S < sequence.length; S++) {

我的递归函数无法正确循环,在底部是我的代码,我遇到了问题,之前的内容只是为了表明我在这方面做了很多工作:)还有一个链接到一个工作示例。我以前使用过大量嵌套for循环,如下所示:

function assembleTimeline(targetItem, sequence) {
    var TIMELINE = "";
    var greenAniArray = {options:{}};
    for (S = 0; S < sequence.length; S++) {
        greenAniArray = [];
        for (L = 0; L < sequence.length; L++) {
            alength = greenAniArray.length;
            for (var setting in sequence[S][L]) {
                greenAniArray.push({});

                if (setting == "duration") {
                    greenAniArray[alength]["duration"] = sequence[S][L][setting];
                    delete sequence[S][L]["duration"];
                }else{
                    greenAniArray[alength].push({});
                    for (var option in sequence[S][L][setting]) {
                        greenAniArray[alength]["options"][option] = sequence[S][L][setting][option];
                    }
                }
                if (greenAniArray[alength]["options"]) {
                    delete greenAniArray[alength]["options"]["duration"];
                }
                $(".jsonresults").html(prettyPrint(greenAniArray));
            }
        }
        animationSequence = greenAniArray[alength]["options"];
        animationDuration = greenAniArray[alength]["duration"];

        // Make commands look like this:
        // to($box, 1, {x:50,y:0})

        assembledTimeline += '.to("' + targetItem + '", ' + animationDuration + ', ' + JSON.stringify(animationSequence) + ')';
    }

    TIMELINE= "tl" + assembledTimeline; 
};

在示例中,序列不需要递归。如果有包含序列的序列,则需要递归

$(function() {
  var target = "target"
  var aniMation = "tl";
  var sequence = [{
    "duration": ".2",
    "transform": "translate3d(0,0,0)"
  }, {
    "duration": ".2",
    "transform": "translate3d(0, -30px, 0)"
  }, {
    "transform": "translate3d(0, -15px, 0)",
    "duration": ".2"
  }, {
    "transform": "translate3d(0,-4px,0)",
    "duration": ".2"
  }];

  function parseAnimation(target, sequence)
  {
    for (var property in sequence)
    {
      var s = sequence[property];
      var aniSequence = { "transform": s["transform"], "duration": s["duration"] };

      aniMation += '.to("' + target + '", ' + s.duration + ', ' + JSON.stringify(aniSequence) + ')<br>';
      $("#output").html(aniMation);
    }
  }

  parseAnimation(target, sequence);
});
$(函数(){
var target=“target”
var aniMation=“tl”;
变量序列=[{
“持续时间”:“.2”,
“转换”:“translate3d(0,0,0)”
}, {
“持续时间”:“.2”,
“转换”:“translate3d(0,-30px,0)”
}, {
“转换”:“translate3d(0,-15px,0)”,
“持续时间”:“.2”
}, {
“转换”:“translate3d(0,-4px,0)”,
“持续时间”:“.2”
}];
函数解析动画(目标、序列)
{
for(顺序中的var属性)
{
var s=序列[属性];
var aniSequence={“transform”:s[“transform”],“duration”:s[“duration”]};
动画+='.to(“+target+”、“+s.duration+”、“+JSON.stringify(aniSequence)+”)
”; $(“#输出”).html(动画); } } 解析动画(目标、序列); });
如果无法捕获错误并分析反馈给函数的参数,递归函数通常会中断或导致堆栈溢出。是否需要将设置数组传递给
parseAnimation
,在原始
序列
数组中没有保留任何设置对象之前,将按顺序调用哪个作为
parseAnimation
的参数?尝试利用?@dave虽然持续时间重复并且在每个示例中都是相同的,但随着动画的加速/减速,它可能很容易有一个唯一的值。@dave我很抱歉,这是复制周围事物时的一个输入错误,它不应该有第二个,我已编辑它以删除它。谢谢Phill,序列可以具有Greensock中的任何css属性或转换属性,例如:
{left:random(300160),top:random(300100),y:random(100,0),scale:Math.random(),backgroundColor:“#ffcc00”,opacity:Math.random()}
,否则就很好了。
$(function() {
  var target = "target"
  var aniMation = "tl";
  var sequence = [{
    "duration": ".2",
    "transform": "translate3d(0,0,0)"
  }, {
    "duration": ".2",
    "transform": "translate3d(0, -30px, 0)"
  }, {
    "transform": "translate3d(0, -15px, 0)",
    "duration": ".2"
  }, {
    "transform": "translate3d(0,-4px,0)",
    "duration": ".2"
  }];

  function parseAnimation(target, sequence)
  {
    for (var property in sequence)
    {
      var s = sequence[property];
      var aniSequence = { "transform": s["transform"], "duration": s["duration"] };

      aniMation += '.to("' + target + '", ' + s.duration + ', ' + JSON.stringify(aniSequence) + ')<br>';
      $("#output").html(aniMation);
    }
  }

  parseAnimation(target, sequence);
});