153 lines
5.4 KiB
JavaScript
153 lines
5.4 KiB
JavaScript
theme.Footer = (function() {
|
|
|
|
function Footer(container) {
|
|
this.$container = $(container);
|
|
|
|
//var sectionId = this.$container.attr('data-section-id');
|
|
|
|
//this.settings = {};
|
|
|
|
this.namespace = '.footer';
|
|
|
|
this.onLoad();
|
|
};
|
|
|
|
Footer.prototype = $.extend({}, Section.prototype, Footer.prototype, {
|
|
_back_to_top: {
|
|
init: function(namespace) {
|
|
var _ = this,
|
|
$button = $('[data-js-button-back-to-top]'),
|
|
namespace = namespace + '.buttonToTop';
|
|
|
|
if($button.length) {
|
|
var bp = $button.attr('data-js-button-back-to-top') || 1000,
|
|
duration = function () {
|
|
return theme.animations.backtotop.scroll_duration * 1000;
|
|
},
|
|
is_animate = false,
|
|
unbind = true;
|
|
|
|
$(window).on('scroll' + namespace + ' resize' + namespace, function () {
|
|
var scroll_t = pageYOffset || Math.max($('body').scrollTop(), $('html').scrollTop());
|
|
|
|
if(!$button.attr('data-bind')) {
|
|
$button[scroll_t > bp ? 'addClass' : 'removeClass']('show');
|
|
}
|
|
|
|
if(scroll_t > bp && unbind) {
|
|
$button.removeAttr('data-bind');
|
|
}
|
|
});
|
|
|
|
$button.on('click', function(e) {
|
|
if(!is_animate) {
|
|
is_animate = true;
|
|
|
|
var bind = $button.attr('data-bind');
|
|
|
|
if(bind) {
|
|
$('html, body').velocity('stop').velocity( 'scroll' , {
|
|
offset: bind,
|
|
duration: duration(),
|
|
complete: function () {
|
|
$button.removeAttr('data-bind');
|
|
|
|
is_animate = false;
|
|
}
|
|
});
|
|
} else {
|
|
var scroll_t = pageYOffset || Math.max($('body').scrollTop(), $('html').scrollTop());
|
|
|
|
unbind = false;
|
|
|
|
$button.attr('data-bind', scroll_t);
|
|
|
|
$('html, body').velocity('stop').velocity( 'scroll' , {
|
|
offset: 0,
|
|
duration: duration(),
|
|
complete: function () {
|
|
is_animate = false;
|
|
unbind = true;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
return false;
|
|
});
|
|
|
|
this.destroy = function() {
|
|
$(window).unbind('scroll' + namespace + ' resize' + namespace);
|
|
$button.off();
|
|
delete _.destroy;
|
|
};
|
|
}
|
|
},
|
|
destroy: function() {
|
|
if(this.destroy) {
|
|
this.destroy();
|
|
}
|
|
}
|
|
},
|
|
_fixed: {
|
|
init: function ($footer, namespace) {
|
|
if($footer.length && $footer[0].hasAttribute('data-js-footer-fixed')) {
|
|
var $parent = $footer.parent(),
|
|
$main = $('#MainContent');
|
|
|
|
function calculate() {
|
|
var footer_height = $footer.innerHeight(),
|
|
can_fix = $main.innerHeight() > footer_height + window.innerHeight;
|
|
|
|
$footer[can_fix && theme.current.is_desktop ? 'addClass' : 'removeClass']('footer--fixed');
|
|
|
|
$footer.css({
|
|
width: theme.current.is_desktop && $parent.hasClass('container') ? $parent.width() + 'px' : ''
|
|
});
|
|
|
|
$main.css({
|
|
marginBottom: can_fix && theme.current.is_desktop ? footer_height + parseInt($footer.css('margin-top')) : ''
|
|
});
|
|
};
|
|
|
|
$window.on('theme.resize' + namespace, calculate);
|
|
|
|
calculate();
|
|
}
|
|
},
|
|
destroy: function (namespace) {
|
|
$window.unbind('theme.resize' + namespace);
|
|
}
|
|
},
|
|
onLoad: function() {
|
|
var $footer = $('.js-footer');
|
|
|
|
this._fixed.init($footer, this.namespace);
|
|
this._back_to_top.init(this.namespace);
|
|
|
|
if(theme.is_loaded) {
|
|
if(theme.Tooltip) {
|
|
theme.Tooltip.init();
|
|
}
|
|
}
|
|
},
|
|
onUnload: function() {
|
|
this.$container.off(this.namespace);
|
|
|
|
this._fixed.destroy(this.namespace);
|
|
this._back_to_top.destroy(this.namespace);
|
|
|
|
if(theme.Tooltip) {
|
|
theme.Tooltip.destroy();
|
|
}
|
|
}
|
|
});
|
|
|
|
return Footer;
|
|
})();
|
|
|
|
$(function() {
|
|
theme.sections.register('footer', theme.Footer);
|
|
}); |