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