|
// secaftl | section after load |
|
// - Подготовка secaftl |
|
function secaftl(){ |
|
// -- Запускаемся если есть нужные секции |
|
if ( $(document).find('[data-secaftl]').length ) { |
|
// Запрещаем пользователю скролить |
|
$('html, body').addClass('_secaftl_no_scroll_') |
|
|
|
// --- Скрываем футер, пока не докрутим до конца |
|
$(document).find('footer').addClass('_secaftl_no_show_') |
|
|
|
// --- Перебираем элементы, для расстановки стилей и задержек анимации |
|
$(document).find('[data-secaftl]').each(function(index, elem){ |
|
// ---- Добавляем эффекты анимации |
|
$(this).find('._secaftl_animate_duration_').each(function(index, elem){ |
|
$(this).find('._secaftl_animate_duration_item').css({ |
|
'transition-duration': ( index + 1 ) / 2 + 's' |
|
}) |
|
}) |
|
}) |
|
|
|
// --- Если есть якорь, проверяем есть ли под него элемент |
|
if ( location.hash ) { |
|
// ---- Чистим и сохраняем адрес секции |
|
secaftl_hash = location.hash.substr(1) |
|
secaftl_find_hash = false |
|
|
|
// ---- Если есть якорь до элемента секции |
|
if ( secaftl_hash.indexOf('&') > 0 ){ |
|
secaftl_hash = secaftl_hash.substr( 0, secaftl_hash.indexOf('&') ) |
|
secaftl_find_hash = location.hash.substr( location.hash.substr(1).indexOf('&') + 2 ) |
|
} |
|
|
|
// ---- Если секция есть, подгружаем весь контент до секции и показываем её |
|
if ( $(document).find('[data-secaftl="'+ secaftl_hash +'"]').length ) |
|
secaftl_show( secaftl_hash, secaftl_find_hash ) |
|
else |
|
// ---- Скролим в начало, а то если левый якорь, страница может встать по середине |
|
$('html, body').scrollTop(0) |
|
} |
|
|
|
// --- Показ по клику |
|
if ( $(document).find('[data-secaftl_show]').length ) |
|
$(document) |
|
.find('[data-secaftl_show]') |
|
.on('click', function(){ |
|
// ---- Анимация загрузки на кнопке |
|
$(this).addClass('_load_') |
|
|
|
// ---- Если нужен скролл на внутренний элемент секции |
|
if ( $(this).data().secaftl_show_find ) |
|
secaftl_show( $(this).data().secaftl_show, $(this).data().secaftl_show_find ) |
|
else |
|
secaftl_show( $(this).data().secaftl_show ) |
|
|
|
return false |
|
}) |
|
} |
|
} |
|
|
|
// - Показ элементов |
|
function secaftl_show( secaftl_hash, secaftl_find_hash ){ |
|
// -- Собираем необходиую инфу |
|
var |
|
secaftl_length = $(document).find('[data-secaftl]').length - 1 |
|
|
|
// -- Перебираем элементы, для показа нужных |
|
$(document).find('[data-secaftl]').each(function(index, elem){ |
|
var secaftl_section = $(this) |
|
// --- Загружаем содержимое, если нужно |
|
if ( secaftl_section.data().secaftl_load ) { |
|
secaftl_section.load( secaftl_section.data().secaftl_load, function(data) { |
|
// ---- Вставляем куда надо |
|
console.log(data) |
|
}) |
|
} |
|
|
|
// --- Показываем секцию, если загружена |
|
secaftl_section.addClass('_active_').ready(function(){ |
|
// ---- Скрываем стрелку |
|
$(document) |
|
.find('[data-secaftl_show='+secaftl_section.data().secaftl+']') |
|
.removeClass('_load_') |
|
.addClass('_hide_') |
|
|
|
// ---- Если последний элемент, выводим футер |
|
if ( secaftl_length == index ) |
|
$(document).find('footer').removeClass('_secaftl_no_show_') |
|
|
|
// ---- Если нужный элемент, cкролим к ниму, и дальше не показываем |
|
if ( secaftl_section.data().secaftl == secaftl_hash ) { |
|
// ----- Если нужен скролл на внутренний элемент секции |
|
if ( secaftl_find_hash ){ |
|
secaftl_offset = $('#'+secaftl_find_hash+'').offset().top |
|
|
|
// ------ Чтобы продолжить с того же места после перезагрузки |
|
document.location.hash = secaftl_section.data().secaftl + '&' + secaftl_find_hash |
|
} |
|
// ----- Если нет, скролл до секции |
|
else { |
|
secaftl_offset = secaftl_section.offset().top |
|
|
|
// ------ Чтобы продолжить с того же места после перезагрузки |
|
document.location.hash = secaftl_section.data().secaftl |
|
} |
|
|
|
// ----- Скролим |
|
$(document).ready(function(){ |
|
$('html, body') |
|
.removeClass('_secaftl_no_scroll_') |
|
.animate({scrollTop: secaftl_offset}, 500) |
|
}) |
|
} |
|
}) |
|
|
|
// --- Если нужный элемент, дальше не показываем |
|
if ( secaftl_section.data().secaftl == secaftl_hash ) |
|
return false |
|
}) |
|
} |
|
|
|
secaftl() |
|
// secaftl | section after load x |