动态获取值,即scrollTop()并存储在数组中

时间:2013-03-27 08:21:38

标签: jquery arrays scrolltop

我正在尝试获取动态值,即scrollTop()和text() - 将它们存储在一个数组中,然后在滚动事件中使用它们。到目前为止我有这个,这似乎只是推动第一个价值。我确定还有一些其他超级有效的方法,使用更少的代码,但我很新,我只是想了解它为什么不工作。任何帮助将非常感激!萨米。

var $titleName = [];
var $titlePosition = [];

$('#section-title').each(function () {
    $titleName.push($(this).text());
});

$('#section-title').each(function () {
    $titlePosition.push($(this).offset());
});

$(window).scroll(function () {
    windowScroll = $(this).scrollTop();

    if (windowScroll >= $titlePosition[0].top) {
        $tooltip.text($titleName[0]);
    }

    if (windowScroll >= $titlePosition[1].top - 100) {
        $tooltip.text($titleName[1]);
    }

    if (windowScroll >= $titlePosition[2].top - 100) {
        $tooltip.text($titleName[2]);
    }

    if (windowScroll >= $titlePosition[3].top - 100) {
        $tooltip.text($titleName[3]);
    }
});

http://jsfiddle.net/userdude/sTNJM/

1 个答案:

答案 0 :(得分:1)

.section-title更改为类,因为ID是唯一的,对数组使用$.map,并且每个都要迭代并执行if条件:

var elem           = $('.section-title'),
    $titleName     = $.map(elem, function(el,i) { return $(el).text(); }),
    $titlePosition = $.map(elem, function(el,i) { return $(el).offset().top; });

$(window).on('scroll',function() {
    var windowScroll = $(this).scrollTop();

    $.each($titlePosition, function(i, pos) {
        var pad = i>0 ? 100 : 0;
        if ( windowScroll >= (pos - pad) ) $tooltip.text($titleName[i]);   
    });
});