2013-03-27 59 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

相關問題