application-scrollspy.js 898 Bytes
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// scroll spy logic
// ================
$(function () {

  var activeTarget,
     position = {},
     $window = $(window),
     nav = $('body > .topbar li a'),
     targets = nav.map(function () {
       return $(this).attr('href');
     }),
     offsets = $.map(targets, function (id) {
       return $(id).offset().top;
     });

  function setButton(id) {
   nav.parent("li").removeClass('active');
   $(nav[$.inArray(id, targets)]).parent("li").addClass('active');
  }

  function processScroll(e) {
   var scrollTop = $window.scrollTop() + 10, i;
   for (i = offsets.length; i--;) {
     if (activeTarget != targets[i] && scrollTop >= offsets[i] && (!offsets[i + 1] || scrollTop <= offsets[i + 1])) {
       activeTarget = targets[i];
       setButton(activeTarget);
     }
   }
  }

  nav.click(function () {
   processScroll();
  });

  processScroll();

  $window.scroll(processScroll);

})