0

ある関数を別の関数内で呼び出す最も簡単な方法は何ですか?

私は持っています:

function carousel_animation(){

            $(carousel).transition({y: m + '=10', queue: false});

            $('article div').promise().done(function(){
                $(this).transition({x:2000}, 500, 'easeInCirc');
            });

            $('article div').promise().done(function(){
                $(this).css({x:'-500'}).transition({x:'0'}, 1500, 'easeInOutQuart');
                $(carousel_reset).css({opacity:0});

                $(carousel_content)
                .css({opacity:100, duration:1500});
            });

};

クリックによってトリガーされるこの関数内で呼び出す必要があります。

function carousel_4way (n, el, m) {
        // remove outline from clicked element
        el.blur();

        // animate
        var carousel = '#carousel-4way-nav-' + n
        var carousel_content = '#carousel-4way-' + n
            transitionState  = (transitionState == '-') ? '+' : '-';

        **// I want the function to be placed inside, here**


        transitionState2 = '-';
        transitionState3 = '-';
        transitionState4 = '-';

    };

つまり、コードで何度も使用する必要がある非常に反復的な関数のようなものです。それ、どうやったら出来るの?


Robert Koritnikのアドバイスを使用してコードを書き直しましたが、機能しています。

function karuzela(n,el,m){  
    var carousel = '#carousel-4way-nav-' + n
    var carousel_content = '#carousel-4way-' + n

    function carousel_4way(){
        el.blur();
            transitionState  = (transitionState == '-') ? '+' : '-';
            $(carousel).transition({y: m + '=10', queue: false});
            };

    function carousel_animation(){

            $('article div').promise().done(function(){
                $(this).transition({x:2000}, 500, 'easeInCirc');
            });
            $('article div').promise().done(function(){
            $(this).css({x:'-500'}).transition({x:'0'}, 1500, 'easeInOutQuart');
            $(carousel_reset).css({opacity:0});
            $(carousel_content)
            .css({opacity:100, duration:1500});
            });

            transitionState2 = '-';
            transitionState3 = '-';
            transitionState4 = '-';

    };
    carousel_4way()
    carousel_animation()
};

ただし、今のところ、これら2つの入れ子関数を外部に配置して、次のように単独で使用する方法はわかりません。

function karuzela(n,el,m){
  var carousel = '#carousel-4way-nav-' + n
  var carousel_content = '#carousel-4way-' + n
    carousel_4way()
    carousel_animation()
};
4

2 に答える 2

1

あなたが抱えている問題は変数のスコープです

...そして個々の関数内での可視性。関数を呼び出そうとするcarouselと、他の変数が定義されていないというエラーが発生する可能性があります。

この署名を持つように関数を変更してみてください。

function carousel_animation(carousel, carousel_content, carousel_reset, m)
{
    ...
}

または、他の変数からこれらのセレクターを生成しているので、それらを渡すだけです:

function carousel_animation(n, el, m)
{
    var carousel = '#carousel-4way-nav-' + n;
    var carousel_content = '#carousel-4way-' + n;
    ...
}

これは、私たちが認識していない同じ関数の他の用途には実行できない可能性があります。ただし、変数のスコープに注意する必要があります。carouselたとえば、変数はcarousel_4way関数に対してローカルであるため、他の関数 (同じ関数内で定義されていない場合) はそれを認識しません。したがって、次のいずれかを行う必要があります。

  • 両方の関数をプライベート関数スコープ内に配置し、スコープ内でそれらの変数を定義して、両方の関数が次のように見えるようにします。
  • 変数値に予期しないことが起こり始める可能性あるため、共有変数をグローバルにすることはお勧めしません。
于 2013-02-13T13:07:32.450 に答える
0

それを呼び出すだけ

// I want the function to be placed inside, here
carousel_animation()
于 2013-02-13T13:06:52.157 に答える