243 lines
5.6 KiB
JavaScript
243 lines
5.6 KiB
JavaScript
/*
|
|
Astral by HTML5 UP
|
|
html5up.net | @ajlkn
|
|
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
|
*/
|
|
|
|
(function($) {
|
|
|
|
var settings = {
|
|
|
|
// Speed to resize panel.
|
|
resizeSpeed: 600,
|
|
|
|
// Speed to fade in/out.
|
|
fadeSpeed: 300,
|
|
|
|
// Size factor.
|
|
sizeFactor: 11.5,
|
|
|
|
// Minimum point size.
|
|
sizeMin: 15,
|
|
|
|
// Maximum point size.
|
|
sizeMax: 20
|
|
|
|
};
|
|
|
|
var $window = $(window);
|
|
|
|
$window.on('load', function() {
|
|
|
|
skel
|
|
.breakpoints({
|
|
desktop: '(min-width: 737px)',
|
|
mobile: '(max-width: 736px)'
|
|
})
|
|
.viewport({
|
|
breakpoints: {
|
|
desktop: {
|
|
width: 1080,
|
|
scalable: false
|
|
}
|
|
}
|
|
})
|
|
.on('+desktop', function() {
|
|
|
|
var $body = $('body'),
|
|
$main = $('#main'),
|
|
$panels = $main.find('.panel'),
|
|
$hbw = $('html,body,window'),
|
|
$footer = $('#footer'),
|
|
$wrapper = $('#wrapper'),
|
|
$nav = $('#nav'), $nav_links = $nav.find('a'),
|
|
$jumplinks = $('.jumplink'),
|
|
$form = $('form'),
|
|
panels = [],
|
|
activePanelId = null,
|
|
firstPanelId = null,
|
|
isLocked = false,
|
|
hash = window.location.hash.substring(1);
|
|
|
|
if (skel.vars.touch) {
|
|
|
|
settings.fadeSpeed = 0;
|
|
settings.resizeSpeed = 0;
|
|
$nav_links.find('span').remove();
|
|
|
|
}
|
|
|
|
// Body.
|
|
$body._resize = function() {
|
|
var factor = ($window.width() * $window.height()) / (1440 * 900);
|
|
$body.css('font-size', Math.min(Math.max(Math.floor(factor * settings.sizeFactor), settings.sizeMin), settings.sizeMax) + 'pt');
|
|
$main.height(panels[activePanelId].outerHeight());
|
|
$body._reposition();
|
|
};
|
|
|
|
$body._reposition = function() {
|
|
if (skel.vars.touch && (window.orientation == 0 || window.orientation == 180))
|
|
$wrapper.css('padding-top', Math.max((($window.height() - (panels[activePanelId].outerHeight() + $footer.outerHeight())) / 2) - $nav.height(), 30) + 'px');
|
|
else
|
|
$wrapper.css('padding-top', ((($window.height() - panels[firstPanelId].height()) / 2) - $nav.height()) + 'px');
|
|
};
|
|
|
|
// Panels.
|
|
$panels.each(function(i) {
|
|
var t = $(this), id = t.attr('id');
|
|
|
|
panels[id] = t;
|
|
|
|
if (i == 0) {
|
|
|
|
firstPanelId = id;
|
|
activePanelId = id;
|
|
|
|
}
|
|
else
|
|
t.hide();
|
|
|
|
t._activate = function(instant) {
|
|
|
|
// Check lock state and determine whether we're already at the target.
|
|
if (isLocked
|
|
|| activePanelId == id)
|
|
return false;
|
|
|
|
// Lock.
|
|
isLocked = true;
|
|
|
|
// Change nav link (if it exists).
|
|
$nav_links.removeClass('active');
|
|
$nav_links.filter('[href="#' + id + '"]').addClass('active');
|
|
|
|
// Change hash.
|
|
if (i == 0)
|
|
window.location.hash = '#';
|
|
else
|
|
window.location.hash = '#' + id;
|
|
|
|
// Add bottom padding.
|
|
var x = parseInt($wrapper.css('padding-top')) +
|
|
panels[id].outerHeight() +
|
|
$nav.outerHeight() +
|
|
$footer.outerHeight();
|
|
|
|
if (x > $window.height())
|
|
$wrapper.addClass('tall');
|
|
else
|
|
$wrapper.removeClass('tall');
|
|
|
|
// Fade out active panel.
|
|
$footer.fadeTo(settings.fadeSpeed, 0.0001);
|
|
panels[activePanelId].fadeOut(instant ? 0 : settings.fadeSpeed, function() {
|
|
|
|
// Set new active.
|
|
activePanelId = id;
|
|
|
|
// Force scroll to top.
|
|
$hbw.animate({
|
|
scrollTop: 0
|
|
}, settings.resizeSpeed, 'swing');
|
|
|
|
// Reposition.
|
|
$body._reposition();
|
|
|
|
// Resize main to height of new panel.
|
|
$main.animate({
|
|
height: panels[activePanelId].outerHeight()
|
|
}, instant ? 0 : settings.resizeSpeed, 'swing', function() {
|
|
|
|
// Fade in new active panel.
|
|
$footer.fadeTo(instant ? 0 : settings.fadeSpeed, 1.0);
|
|
panels[activePanelId].fadeIn(instant ? 0 : settings.fadeSpeed, function() {
|
|
|
|
// Unlock.
|
|
isLocked = false;
|
|
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
});
|
|
|
|
// Nav + Jumplinks.
|
|
$nav_links.add($jumplinks).click(function(e) {
|
|
var t = $(this), href = t.attr('href'), id;
|
|
|
|
if (href.substring(0,1) == '#') {
|
|
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
id = href.substring(1);
|
|
|
|
if (id in panels)
|
|
panels[id]._activate();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
// Window.
|
|
$window
|
|
.resize(function() {
|
|
|
|
if (!isLocked)
|
|
$body._resize();
|
|
|
|
});
|
|
|
|
$window
|
|
.on('orientationchange', function() {
|
|
|
|
if (!isLocked)
|
|
$body._reposition();
|
|
|
|
});
|
|
|
|
if (skel.vars.IEVersion < 9)
|
|
$window
|
|
.on('resize', function() {
|
|
$wrapper.css('min-height', $window.height());
|
|
});
|
|
|
|
// Fix: Placeholder polyfill.
|
|
$('form').placeholder();
|
|
|
|
// Prioritize "important" elements on mobile.
|
|
skel.on('+mobile -mobile', function() {
|
|
$.prioritize(
|
|
'.important\\28 mobile\\29',
|
|
skel.breakpoint('mobile').active
|
|
);
|
|
});
|
|
|
|
// CSS polyfills (IE<9).
|
|
if (skel.vars.IEVersion < 9)
|
|
$(':last-child').addClass('last-child');
|
|
|
|
// Init.
|
|
$window
|
|
.trigger('resize');
|
|
|
|
if (hash && hash in panels)
|
|
panels[hash]._activate(true);
|
|
|
|
$wrapper.fadeTo(400, 1.0);
|
|
|
|
})
|
|
.on('-desktop', function() {
|
|
|
|
window.setTimeout(function() {
|
|
location.reload(true);
|
|
}, 50);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
})(jQuery); |