Вход Регистрация
Файл: wapxl.ru/bower_components/bootstrap/js/scrollspy.js
Строк: 108
<?php
/* ========================================================================
 * Bootstrap: scrollspy.js v3.3.4
 * http://getbootstrap.com/javascript/#scrollspy
 * ========================================================================
 * Copyright 2011-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */


+function ($) {
  
'use strict';

  
// SCROLLSPY CLASS DEFINITION
  // ==========================

  
function ScrollSpy(element, options) {
    
this.$body          = $(document.body)
    
this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
    
this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
    
this.selector       = (this.options.target || '') + ' .nav li > a'
    
this.offsets        = []
    
this.targets        = []
    
this.activeTarget   = null
    this
.scrollHeight   = 0

    this
.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
    
this.refresh()
    
this.process()
  }

  
ScrollSpy.VERSION  = '3.3.4'

  
ScrollSpy.DEFAULTS = {
    
offset: 10
  
}

  
ScrollSpy.prototype.getScrollHeight = function () {
    return 
this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
  }

  
ScrollSpy.prototype.refresh = function () {
    var 
that          = this
    
var offsetMethod  = 'offset'
    
var offsetBase    = 0

    this
.offsets      = []
    
this.targets      = []
    
this.scrollHeight = this.getScrollHeight()

    if (!$.
isWindow(this.$scrollElement[0])) {
      
offsetMethod = 'position'
      
offsetBase   = this.$scrollElement.scrollTop()
    }

    
this.$body
      
.find(this.selector)
      .
map(function () {
        var 
$el   = $(this)
        var 
href  = $el.data('target') || $el.attr('href')
        var 
$href = /^#./.test(href) && $(href)

        
return ($href
          
&& $href.length
          
&& $href.is(':visible')
          && [[
$href[offsetMethod]().top + offsetBase, href]]) || null
      
})
      .
sort(function (a, b) { return a[0] - b[0] })
      .
each(function () {
        
that.offsets.push(this[0])
        
that.targets.push(this[1])
      })
  }

  
ScrollSpy.prototype.process = function () {
    var 
scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
    
var scrollHeight = this.getScrollHeight()
    var 
maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()
    var 
offsets      = this.offsets
    
var targets      = this.targets
    
var activeTarget = this.activeTarget
    
var i

    
if (this.scrollHeight != scrollHeight) {
      
this.refresh()
    }

    if (
scrollTop >= maxScroll) {
      return 
activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
    }

    if (
activeTarget && scrollTop < offsets[0]) {
      
this.activeTarget = null
      
return this.clear()
    }

    for (
i = offsets.length; i--;) {
      
activeTarget != targets[i]
        && 
scrollTop >= offsets[i]
        && (
offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
        && 
this.activate(targets[i])
    }
  }

  
ScrollSpy.prototype.activate = function (target) {
    
this.activeTarget = target

    this
.clear()

    var 
selector = this.selector +
      
'[data-target="' + target + '"],' +
      
this.selector + '[href="' + target + '"]'

    
var active = $(selector)
      .
parents('li')
      .
addClass('active')

    if (
active.parent('.dropdown-menu').length) {
      
active = active
        
.closest('li.dropdown')
        .
addClass('active')
    }

    
active.trigger('activate.bs.scrollspy')
  }

  
ScrollSpy.prototype.clear = function () {
    $(
this.selector)
      .
parentsUntil(this.options.target, '.active')
      .
removeClass('active')
  }


  
// SCROLLSPY PLUGIN DEFINITION
  // ===========================

  
function Plugin(option) {
    return 
this.each(function () {
      var 
$this   = $(this)
      var 
data    = $this.data('bs.scrollspy')
      var 
options = typeof option == 'object' && option

      
if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
      if (
typeof option == 'string') data[option]()
    })
  }

  var 
old = $.fn.scrollspy

  
$.fn.scrollspy             = Plugin
  
$.fn.scrollspy.Constructor = ScrollSpy


  
// SCROLLSPY NO CONFLICT
  // =====================

  
$.fn.scrollspy.noConflict = function () {
    $.
fn.scrollspy = old
    
return this
  
}


  
// SCROLLSPY DATA-API
  // ==================

  
$(window).on('load.bs.scrollspy.data-api', function () {
    $(
'[data-spy="scroll"]').each(function () {
      var 
$spy = $(this)
      
Plugin.call($spy, $spy.data())
    })
  })

}(
jQuery);
?>
Онлайн: 3
Реклама