vendor/assets/javascripts/foundation/jquery.foundation.magellan.js in zurb-foundation-3.2.3 vs vendor/assets/javascripts/foundation/jquery.foundation.magellan.js in zurb-foundation-3.2.4.rc1

- old
+ new

@@ -10,28 +10,30 @@ ;(function ($, window, undefined) { 'use strict'; $.fn.foundationMagellan = function(options) { - var $fixedMagellan = $('[data-magellan-expedition=fixed]'), + var $window = $(window), + $document = $(document), + $fixedMagellan = $('[data-magellan-expedition=fixed]'), defaults = { - threshold: ($fixedMagellan.length) ? $fixedMagellan.outerHeight(true) : 25, - activeClass: 'active' - }, - - options = $.extend({}, defaults, options); - + threshold: ($fixedMagellan.length) ? $fixedMagellan.outerHeight(true) : 0, + activeClass: 'active' + }, + options = $.extend({}, defaults, options); + // Indicate we have arrived at a destination - $(document).on('magellan.arrival', '[data-magellan-arrival]', function(e) { - var $expedition = $(this).closest('[data-magellan-expedition]'), - activeClass = $expedition.attr('data-magellan-active-class') || options.activeClass; - $(this) + $document.on('magellan.arrival', '[data-magellan-arrival]', function(e) { + var $destination = $(this), + $expedition = $destination.closest('[data-magellan-expedition]'), + activeClass = $expedition.attr('data-magellan-active-class') || options.activeClass; + $destination .closest('[data-magellan-expedition]') .find('[data-magellan-arrival]') .not(this) .removeClass(activeClass); - $(this).addClass(activeClass); + $destination.addClass(activeClass); }); // Set starting point as the current destination var $expedition = $('[data-magellan-expedition]'); $expedition.find('[data-magellan-arrival]:first') @@ -40,20 +42,19 @@ // Update fixed position $fixedMagellan.on('magellan.update-position', function(){ var $el = $(this); $el.data("magellan-fixed-position",""); $el.data("magellan-top-offset", ""); - }); + }) + .trigger('magellan.update-position'); - $fixedMagellan.trigger('magellan.update-position'); - - $(window).on('resize.magellan', function() { + $window.on('resize.magellan', function() { $fixedMagellan.trigger('magellan.update-position'); }); - $(window).on('scroll.magellan', function() { - var windowScrollTop = $(window).scrollTop(); + $window.on('scroll.magellan', function() { + var windowScrollTop = $window.scrollTop(); $fixedMagellan.each(function() { var $expedition = $(this); if ($expedition.data("magellan-top-offset") === "") { $expedition.data("magellan-top-offset", $expedition.offset().top); } @@ -68,18 +69,24 @@ } }); }); // Determine when a destination has been reached, ah0y! - $(window).on('scroll.magellan', function(e){ - var windowScrollTop = $(window).scrollTop(); + var $lastDestination = $('[data-magellan-destination]:last'); + $window.on('scroll.magellan', function(e){ + var windowScrollTop = $window.scrollTop(), + scrolltopPlusHeight = windowScrollTop+$window.outerHeight(true), + lastDestinationTop = Math.ceil($lastDestination.offset().top); $('[data-magellan-destination]').each(function(){ var $destination = $(this), destination_name = $destination.attr('data-magellan-destination'), topOffset = $destination.offset().top - windowScrollTop; if (topOffset <= options.threshold) { - $('[data-magellan-arrival=' + destination_name + ']') - .trigger('magellan.arrival'); + $('[data-magellan-arrival=' + destination_name + ']').trigger('magellan.arrival'); + } + // In large screens we may hit the bottom of the page and dont reach the top of the last magellan-destination, so lets force it + if (scrolltopPlusHeight >= $document.outerHeight(true) && lastDestinationTop > windowScrollTop && lastDestinationTop < scrolltopPlusHeight) { + $('[data-magellan-arrival]:last').trigger('magellan.arrival'); } }); }); }; }(jQuery, this)); \ No newline at end of file