0

如果这是一个非常基本的问题,请原谅我,但我希望这里有人可以为 JS 初学者非常清楚地解释它。

我注意到我在两个地方使用了相同的代码,因此创建了一个函数来触发。但是我想使用我在这个函数中创建的一个变量,以便在它完成后使用。这是一个代码示例:

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'
    });
});

所以我创建了一个newMargincalculate_animation函数中调用的新变量,并尝试在下面的 animate 函数中使用它。

我需要做什么才能做到这一点?

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 回答