78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
|
;(function ($, window, document, undefined) {
|
||
|
'use strict';
|
||
|
|
||
|
Foundation.libs.equalizer = {
|
||
|
name : 'equalizer',
|
||
|
|
||
|
version : '5.5.1',
|
||
|
|
||
|
settings : {
|
||
|
use_tallest : true,
|
||
|
before_height_change : $.noop,
|
||
|
after_height_change : $.noop,
|
||
|
equalize_on_stack : false
|
||
|
},
|
||
|
|
||
|
init : function (scope, method, options) {
|
||
|
Foundation.inherit(this, 'image_loaded');
|
||
|
this.bindings(method, options);
|
||
|
this.reflow();
|
||
|
},
|
||
|
|
||
|
events : function () {
|
||
|
this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function (e) {
|
||
|
this.reflow();
|
||
|
}.bind(this));
|
||
|
},
|
||
|
|
||
|
equalize : function (equalizer) {
|
||
|
var isStacked = false,
|
||
|
vals = equalizer.find('[' + this.attr_name() + '-watch]:visible'),
|
||
|
settings = equalizer.data(this.attr_name(true) + '-init');
|
||
|
|
||
|
if (vals.length === 0) {
|
||
|
return;
|
||
|
}
|
||
|
var firstTopOffset = vals.first().offset().top;
|
||
|
settings.before_height_change();
|
||
|
equalizer.trigger('before-height-change').trigger('before-height-change.fndth.equalizer');
|
||
|
vals.height('inherit');
|
||
|
vals.each(function () {
|
||
|
var el = $(this);
|
||
|
if (el.offset().top !== firstTopOffset) {
|
||
|
isStacked = true;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (settings.equalize_on_stack === false) {
|
||
|
if (isStacked) {
|
||
|
return;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var heights = vals.map(function () { return $(this).outerHeight(false) }).get();
|
||
|
|
||
|
if (settings.use_tallest) {
|
||
|
var max = Math.max.apply(null, heights);
|
||
|
vals.css('height', max);
|
||
|
} else {
|
||
|
var min = Math.min.apply(null, heights);
|
||
|
vals.css('height', min);
|
||
|
}
|
||
|
settings.after_height_change();
|
||
|
equalizer.trigger('after-height-change').trigger('after-height-change.fndtn.equalizer');
|
||
|
},
|
||
|
|
||
|
reflow : function () {
|
||
|
var self = this;
|
||
|
|
||
|
this.S('[' + this.attr_name() + ']', this.scope).each(function () {
|
||
|
var $eq_target = $(this);
|
||
|
self.image_loaded(self.S('img', this), function () {
|
||
|
self.equalize($eq_target)
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
})(jQuery, window, window.document);
|