2013-03-27 60 views
0

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

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

'$('#节-title')。each ...'如果有多个'id =“section-title”'元素,则需要将这些元素切换到'.section-title'类。只允许一个'id'。这也许可以解释为什么只有一个元素正在发生变化。 – 2013-03-27 08:26:20

回答

1

变化.section-title上课,因为ID是唯一的,使用$.map的阵列,每个迭代并执行,如果条件:

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]); 
    }); 
}); 
+0

'$ tooltip'从哪里来?并且在变量列表的末尾有一个“',''。 – 2013-03-27 08:34:17

+0

@JaredFarrish - 我应该怎么知道'$ tooltip'的来源?修正了逗号,谢谢! – adeneo 2013-03-27 08:37:25

+0

我想这是一种滚动设置,所以我认为'$ tooltip'是一个标头:http://jsfiddle.net/userdude/pejK5/1/另外,在'$ titlePosition'' $ .map() ',这个'应该是'el'。 – 2013-03-27 08:50:19

相关问题