wip
This commit is contained in:
153
public/web/shella/scripts/section.footer.js
Normal file
153
public/web/shella/scripts/section.footer.js
Normal file
@@ -0,0 +1,153 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user