Initial commit
This commit is contained in:
43
js/_events.js
Normal file
43
js/_events.js
Normal file
@ -0,0 +1,43 @@
|
||||
var cj = cj ? cj : {};
|
||||
(function($) {
|
||||
/**
|
||||
* Publish events using Pub/Sub
|
||||
* @namespace events
|
||||
* @see {@link https://github.com/cowboy/jquery-tiny-pubsub}
|
||||
*/
|
||||
$.extend(cj, {
|
||||
/**
|
||||
* Publish event when the page is ready.
|
||||
* @function pageReady
|
||||
*/
|
||||
pageReady: function() {
|
||||
var self = this;
|
||||
|
||||
$.publish('pageReady_prioritise', self);
|
||||
$.publish('pageReady', self);
|
||||
|
||||
self.pageLoaded();
|
||||
},
|
||||
/**
|
||||
* Publish event when the page has loaded.
|
||||
* @function pageLoaded
|
||||
*/
|
||||
pageLoaded: function() {
|
||||
var self = this;
|
||||
|
||||
self.settings.$window.on('load', function() {
|
||||
|
||||
$.publish('pageLoaded', self);
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Publish event when an AJAX request has finished.
|
||||
* @function ajaxLoaded
|
||||
*/
|
||||
ajaxLoaded: function() {
|
||||
var self = this;
|
||||
|
||||
$.publish('ajaxLoaded', self);
|
||||
}
|
||||
});
|
||||
}(jQuery));
|
3
js/_init.js
Normal file
3
js/_init.js
Normal file
@ -0,0 +1,3 @@
|
||||
$(function(){
|
||||
var init = (cj !== undefined) ? cj.pageReady() : null;
|
||||
});
|
12
js/_settings.js
Normal file
12
js/_settings.js
Normal file
@ -0,0 +1,12 @@
|
||||
var cj = cj ? cj : {};
|
||||
(function($) {
|
||||
$.extend(cj, {
|
||||
settings: {
|
||||
// cache some common variables
|
||||
$window: $(window),
|
||||
$html: $('html'),
|
||||
$body: $('body'),
|
||||
$htmlbody: $('html,body')
|
||||
}
|
||||
});
|
||||
}(jQuery));
|
58
js/fixHeader.js
Normal file
58
js/fixHeader.js
Normal file
@ -0,0 +1,58 @@
|
||||
var cj = cj ? cj : {};
|
||||
(function($) {
|
||||
$.extend(cj, {
|
||||
fixHeader: {
|
||||
// jQuery DOM caching
|
||||
$nav: null,
|
||||
$header: null,
|
||||
// CSS selectors
|
||||
navSelector: '.navigation',
|
||||
headerSelector: '.header',
|
||||
// Classes
|
||||
fixedClass: 'navigation--fixed',
|
||||
// Misc
|
||||
navHeight: 0,
|
||||
headerHeight: 0,
|
||||
|
||||
init: function() {
|
||||
var self = this;
|
||||
|
||||
self.$nav = $(self.navSelector);
|
||||
self.$header = $(self.headerSelector);
|
||||
|
||||
if (!self.$nav || !self.$nav.length) {
|
||||
return;
|
||||
}
|
||||
if (!self.$header || !self.$header.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
self.navHeight = self.$nav.outerHeight();
|
||||
self.headerHeight = self.$header.outerHeight() - self.navHeight;
|
||||
|
||||
self.$navigationClone = self.$nav.clone();
|
||||
self.$navigationClone.addClass('navigation--clone');
|
||||
self.$navigationClone.appendTo(self.$header);
|
||||
self.$navigationClone.hide();
|
||||
|
||||
self.bindEvents();
|
||||
},
|
||||
bindEvents: function() {
|
||||
var self = this;
|
||||
|
||||
$(window).scroll(function () {
|
||||
if ($(this).scrollTop() > self.headerHeight) {
|
||||
self.$nav.addClass(self.fixedClass);
|
||||
self.$navigationClone.show();
|
||||
} else {
|
||||
self.$nav.removeClass(self.fixedClass);
|
||||
self.$navigationClone.hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
$.subscribe('pageReady', function() {
|
||||
cj.fixHeader.init();
|
||||
});
|
||||
}(jQuery));
|
21
js/pageClasses.js
Normal file
21
js/pageClasses.js
Normal file
@ -0,0 +1,21 @@
|
||||
var cj = cj ? cj : {};
|
||||
(function($) {
|
||||
$.extend(cj, {
|
||||
pageReadyClass: function() {
|
||||
var self = this;
|
||||
|
||||
self.settings.$html.addClass('page-ready');
|
||||
},
|
||||
pageLoadedClass: function() {
|
||||
var self = this;
|
||||
|
||||
self.settings.$html.addClass('page-loaded');
|
||||
}
|
||||
});
|
||||
$.subscribe('pageReady', function() {
|
||||
cj.pageReadyClass();
|
||||
});
|
||||
$.subscribe('pageLoaded', function() {
|
||||
cj.pageLoadedClass();
|
||||
});
|
||||
}(jQuery));
|
52
js/scrollTo.js
Normal file
52
js/scrollTo.js
Normal file
@ -0,0 +1,52 @@
|
||||
var cj = cj ? cj : {};
|
||||
(function($) {
|
||||
$.extend(cj, {
|
||||
scrollTo: {
|
||||
// jQuery DOM caching
|
||||
$scrollTo: null,
|
||||
// CSS selectors
|
||||
scrollToSelector: '[data-scroll-to-id]',
|
||||
// Classes
|
||||
// Misc
|
||||
speed: 500,
|
||||
|
||||
init: function() {
|
||||
var self = this;
|
||||
|
||||
self.$scrollTo = $(self.scrollToSelector);
|
||||
|
||||
if (!self.$scrollTo || !self.$scrollTo.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
self.bindEvents();
|
||||
},
|
||||
bindEvents: function() {
|
||||
var self = this;
|
||||
|
||||
self.$scrollTo.on('click', function(e){
|
||||
e.preventDefault();
|
||||
|
||||
self.scrollToId($(this));
|
||||
});
|
||||
},
|
||||
scrollToId: function($trigger) {
|
||||
var self = this,
|
||||
id = $trigger.attr('href'),
|
||||
offset = $trigger.attr('data-scroll-offset') || 0,
|
||||
speed = $trigger.attr('data-scroll-speed') || self.speed;
|
||||
|
||||
// if (history.pushState && window.location.hash !== id) {
|
||||
// history.pushState(null, null, id);
|
||||
// }
|
||||
|
||||
cj.settings.$htmlbody.animate({
|
||||
scrollTop: ($(id).offset().top - offset)
|
||||
}, speed);
|
||||
}
|
||||
}
|
||||
});
|
||||
$.subscribe('pageReady', function() {
|
||||
cj.scrollTo.init();
|
||||
});
|
||||
}(jQuery));
|
Reference in New Issue
Block a user