0

これが非常に基本的な質問である場合はご容赦ください。ただし、JSの初心者にとって、ここの誰かがそれを非常に明確に説明できることを願っています。

2つの場所で同じコードを使用したため、起動する関数を作成したことに気付きました。ただし、この関数で作成した変数を使用して、完了後に使用したいと思います。コード例は次のとおりです。

function calculate_animation(direction) {
    var theWidth = parseInt(visibleArea.outerWidth() - 70),
        currentMargin = parseInt(listingsSlider.css('margin-left')),
        hoursVisible = Math.floor(theWidth / itemWidth),
        hoursWidth = itemWidth * hoursVisible,
        newMargin = currentMargin - hoursWidth;
}


forwardBtn.click(function () {
    calculate_animation();

    // animate the slider
    listingsSlider.animate({
        'margin-left': newMargin + 'px'
    });
});

newMarginそこで、関数で呼び出される新しい変数を作成し、calculate_animationそれを以下のアニメーション関数で使用しようとしています。

これを実現するには何をする必要がありますか?

4

5 に答える 5

3

return関数にキーワードが必要です...

function calculate_animation(direction) {
        var theWidth        =  parseInt(visibleArea.outerWidth() - 70),
            currentMargin   = parseInt(listingsSlider.css('margin-left')),
            hoursVisible    = Math.floor(theWidth / itemWidth),
            hoursWidth    = itemWidth * hoursVisible,
            newMargin       =  currentMargin - hoursWidth;

        return newMargin;
}


forwardBtn.click(function () {
        var newMargin = calculate_animation();

        // animate the slider
        listingsSlider.animate({'margin-left' : newMargin + 'px'});
});
于 2012-09-10T16:06:04.447 に答える
2

スコープの問題です。newMargin変数は関数内で定義されているため、変数のスコープは、varキーワードで定義された関数の先頭から始まり、関数の最後で終わります。

を使用return newMarginして、計算値を呼び出し元に戻すことができます。

下記参照、

function calculate_animation(direction) {
        var theWidth        =  parseInt(visibleArea.outerWidth() - 70),
            currentMargin   = parseInt(listingsSlider.css('margin-left')),
            hoursVisible    = Math.floor(theWidth / itemWidth),
            hoursWidth    = itemWidth * hoursVisible,
            newMargin       =  currentMargin - hoursWidth;

        return newMargin;
}


forwardBtn.click(function () {
        // animate the slider
        listingsSlider.animate({'margin-left' : calculate_animation() + 'px'});
});
于 2012-09-10T16:06:12.450 に答える
2

呼び出された関数に戻し、呼び出された関数でその変数を使用する必要があります。

function calculate_animation(direction) {
    var theWidth = parseInt(visibleArea.outerWidth() - 70),
        currentMargin = parseInt(listingsSlider.css('margin-left')),
        hoursVisible = Math.floor(theWidth / itemWidth),
        hoursWidth = itemWidth * hoursVisible,
        newMargin = currentMargin - hoursWidth;
    return newMargin;
}


forwardBtn.click(function () {
    var newMargin = calculate_animation();

    // animate the slider
    listingsSlider.animate({
        'margin-left': newMargin + 'px'
    });
});
于 2012-09-10T16:06:14.780 に答える
2

あなたはそれを簡単returnにすることができます:(方向パラメータは何ですか?あなたはそれをどこでも使用していません)

function calculate_animation(direction) {
        var theWidth        =  parseInt(visibleArea.outerWidth() - 70),
            currentMargin   = parseInt(listingsSlider.css('margin-left')),
            hoursVisible    = Math.floor(theWidth / itemWidth),
            hoursWidth    = itemWidth * hoursVisible,
            newMargin       =  currentMargin - hoursWidth;

        return newMargin;
}


forwardBtn.click(function () {
        var newMargin = calculate_animation();

        // animate the slider
        listingsSlider.animate({'margin-left' : newMargin + 'px'});
});
于 2012-09-10T16:08:01.113 に答える
1

その関数から戻ることができます。代わりに、変数をグローバルに宣言し、必要に応じてその値を変更します。

于 2012-09-10T16:05:24.353 に答える