foundation.equalizer.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. ;(function ($, window, document, undefined) {
  2. 'use strict';
  3. Foundation.libs.equalizer = {
  4. name : 'equalizer',
  5. version : '5.3.3',
  6. settings : {
  7. use_tallest: true,
  8. before_height_change: $.noop,
  9. after_height_change: $.noop,
  10. equalize_on_stack: false
  11. },
  12. init : function (scope, method, options) {
  13. Foundation.inherit(this, 'image_loaded');
  14. this.bindings(method, options);
  15. this.reflow();
  16. },
  17. events : function () {
  18. this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function(e){
  19. this.reflow();
  20. }.bind(this));
  21. },
  22. equalize: function(equalizer) {
  23. var isStacked = false,
  24. vals = equalizer.find('[' + this.attr_name() + '-watch]:visible'),
  25. settings = equalizer.data(this.attr_name(true)+'-init');
  26. if (vals.length === 0) return;
  27. var firstTopOffset = vals.first().offset().top;
  28. settings.before_height_change();
  29. equalizer.trigger('before-height-change').trigger('before-height-change.fndth.equalizer');
  30. vals.height('inherit');
  31. vals.each(function(){
  32. var el = $(this);
  33. if (el.offset().top !== firstTopOffset) {
  34. isStacked = true;
  35. }
  36. });
  37. if (settings.equalize_on_stack === false) {
  38. if (isStacked) return;
  39. };
  40. var heights = vals.map(function(){ return $(this).outerHeight(false) }).get();
  41. if (settings.use_tallest) {
  42. var max = Math.max.apply(null, heights);
  43. vals.css('height', max);
  44. } else {
  45. var min = Math.min.apply(null, heights);
  46. vals.css('height', min);
  47. }
  48. settings.after_height_change();
  49. equalizer.trigger('after-height-change').trigger('after-height-change.fndtn.equalizer');
  50. },
  51. reflow : function () {
  52. var self = this;
  53. this.S('[' + this.attr_name() + ']', this.scope).each(function(){
  54. var $eq_target = $(this);
  55. self.image_loaded(self.S('img', this), function(){
  56. self.equalize($eq_target)
  57. });
  58. });
  59. }
  60. };
  61. })(jQuery, window, window.document);