Advertisement
Guest User

progressive.js

a guest
Jul 16th, 2015
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function($){
  2.  
  3. $(document).ready(function(){
  4. var $window = $(window),
  5.         $body = $(document.body),
  6.         $doc = $('.doc-container'),
  7.         $nav = $doc.find ('.doc-nav');
  8.  
  9.    
  10.        
  11.     // change navigation active according to scroll
  12.     $doc.scrollspy({
  13.       target: '.doc-sidebar'
  14.     });  
  15.  
  16.     // add progress bar for navigation
  17.     $nav.find ('a').before ($('<span class="docs-progress-bar" />'));
  18.  
  19.     $nav.on ('activate activate.bs.scrollspy', function () {
  20.       $doc.scrollspy("refresh");
  21.       var $active = $nav.find('li.active');
  22.       $active.prevAll().find('.docs-progress-bar').css ('width', '100%');
  23.       $active.nextAll().find('.docs-progress-bar').css ('width', '0%');
  24.     });
  25.  
  26.     $window.on ('scroll', function (event) {
  27.       if (this.timeout) {
  28.         clearTimeout(this.timeout);
  29.       }
  30.       this.timeout = setTimeout (function () {
  31.         var $active = $nav.find('li.active'),
  32.             $progress = $active.find('.docs-progress-bar'),
  33.             $scrollspy = $doc.data('bs.scrollspy'),
  34.             scrollTop    = $scrollspy.$scrollElement.scrollTop() + $scrollspy.options.offset,
  35.             scrollHeight = $scrollspy.$scrollElement[0].scrollHeight || $scrollspy.$body[0].scrollHeight,
  36.             maxScroll    = scrollHeight - $scrollspy.$scrollElement.height(),
  37.             offsets      = $scrollspy.offsets,
  38.             targets      = $scrollspy.targets,
  39.             activeTarget = $scrollspy.activeTarget,
  40.             i;
  41.  
  42.         if (scrollTop >= maxScroll) {
  43.           $progress.css ('width', '100%');
  44.           return ;
  45.         }
  46.  
  47.         if (activeTarget && scrollTop <= offsets[0]) {
  48.           $progress.css ('width', '0%');
  49.           return ;
  50.         }
  51.         for (i = offsets.length; i--;) {
  52.           if (scrollTop >= offsets[i]
  53.             && (!offsets[i + 1] || scrollTop <= offsets[i + 1])) {
  54.             var p1 = offsets[i],
  55.                 p2 = scrollTop,
  56.                 p3 = !offsets[i + 1] ? maxScroll : offsets[i + 1],
  57.                 p = (p2-p1)/(p3-p1)*100;
  58.             $progress.css ('width', (p < 2 ? 2 : p) + '%');
  59.             return ;
  60.           }
  61.         }
  62.       }, 100);
  63.     });  
  64.  
  65. });
  66.  
  67. })(jQuery);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement