嵌套函数说明

时间:2015-09-26 22:06:30

标签: javascript svg

我的@Override public void onAttach(Activity activity) { super.onAttach(activity); mostrarButton = (Button) getActivity().findViewById(R.id.boton_mostrar); } 函数如何运行嵌套的无名函数有点困惑。使用snap.svg到动画圈子。

发生了什么

我已将所有代码设置在circleAnimation函数中,然后声明另一个名为setTimeout的函数,其中包含运行我的圈子第一次旋转的代码。

我希望我的圈子能够无限制动画,所以我找到了一种方法来实现这一点,添加一个嵌套在circleAnimation函数下的匿名函数我声明了一个匿名的circleAnimation

在匿名函数中,我重置了动画,使其看起来无限制动画。

这是我有点困惑的地方......

不确定如何我能够将匿名function(){});作为回调传递..

我在函数范围的顶层调用function(){});来调用匿名circleAnimation();,然后在function(){});函数的底层执行第二次调用执行第一个函数circleAnimation

我对匿名功能的运作方式感到有些困惑......我知道我的功能最多,但我觉得这个拼图中有一块我很想念。所以一些澄清会很棒!

circleAnimation

2 个答案:

答案 0 :(得分:1)

因此,如果我们打破它并查看它,我们有

circles.stop().animate({...},10000, function(){...});

应该非常清楚,函数作为参数传递给animate()

恰好你可以从中调用周围的函数,导致整个循环再次循环。

答案 1 :(得分:0)

匿名函数表达式是引用点函数,然后传递给外部函数circleAnimation。这允许动画的连续循环。

外部功能

没有重置内部功能所以只需旋转一次然后停止

 // calling circleAnimation 
 circleAnimation();
  // animate circles
  function circleAnimation() {
    // one rotation
    circles.stop().animate({
        transform: 'r360,20,20'
      }, 10000);
  }

内部功能

现在我们向circleAnimation添加一个内部函数,它将重复动画

 function() {
    // reset 
    circles.attr({
      transform: 'rotate(0 20 20)'
    });
    // passing inner function to outer function `circleAnimation`
    // this allows us to have a continuous loop 
    circleAnimation();
  });

一起

 function circleAnimation() {
 // rotate 360 
    circles.stop().animate({
        transform: 'r360,20,20'
    }, 10000,

 function() {
  // repeat animation start from 0
    circles.attr({
        transform: 'rotate(0 20 20)'
    });
   // pass anomn function to `circleAnimation`
   circleAnimation();
 });
}