У меня есть проект, над которым я работаю, у которого есть галерея. Как работает галерея, пользователь получает список изображений, и каждое изображение является «альбомом», который ссылается на большее количество изображений для данной галереи. В настоящее время я работаю, но когда пользователь нажимает кнопку «Назад» после перехода в выбранную галерею, они не возвращаются к списку альбомов. Например, если вы являетесь главной страницей, нажмите на страницу альбомов и откройте галерею. После нажатия кнопки «Назад» вы вернетесь на домашнюю страницу.Добавление pushState() и popstate в мой проект
Итак, я решил исправить это, я могу использовать историю api и использовать pushState и popstate. Моя проблема в том, что я не смог заставить ее работать, и я не уверен, где разместить функции в моем сценарии.
Если вы хотите у меня есть живая версия сайта я работаю здесь: Live Demo
Вот мой текущий сценарий:
(function(code) {
code(window.jQuery, window, document);
}(function($, window, document) {
$(function() {
initialize();
});
function initialize() {
$.getJSON('/assets/js/images.json', function(json) {
$.each(json.albums, function(i, item) {
var photos = item.photos,
name = item.name,
id = item.id;
showAlbums(photos, name, id);
});
});
}
function showAlbums(p, n, i) {
var albums = $('.albums'),
gallery = $('.gallery'),
album = $('#templates #album .thumb').clone(true),
thumbnail = album.find('.thumbnail'),
image = album.find('.image'),
caption = album.find('.caption h4');
thumbnail.attr('href', '#').attr('title', n).attr('data-url', i);
image.attr('src', p[0].href).attr('alt', n);
caption.html(n);
albums.append(album);
album.on('click', 'a', function(e) {
e.preventDefault();
albums.hide();
gallery.empty().show();
document.title = "Schultz | " + n;
$.each(p, function(i, item) {
var photo = item.href;
showGallery(photo, n);
});
});
}
function showGallery(p, n) {
var gallery = $('.gallery'),
images = $('#templates #gallery .thumb').clone(),
link = images.find('.thumbnail'),
image = images.find('.thumbnail img');
link.attr('href', p).attr('title', n).attr('data-gallery', '');
image.attr('src', p).attr('alt', n);
gallery.append(images);
}
}));
Любая помощь приветствуется, спасибо
Нет времени, чтобы вступить в полный ответ здесь, но то, что вы хотите сделать, - это реорганизовать обработчик кликов вашего альбома в функцию showAlbum, которая, вместо того, чтобы зависать от локальных переменных в области, принимает в индексе или идентификатор альбома данные JSON (которые вы должны поддерживать ссылку вместо того, чтобы просто использовать init, чтобы вы могли использовать ее позже). При щелчке альбома вы затем «pushState» добавили новый URL-адрес «id =« + id », а затем« showAlbum (id) »для загрузки представления. Затем в 'window.onpopstate' вы вытащите' id' из строки запроса и 'showAlbum (id)'. – numbers1311407
Тогда, конечно, если в строке запроса нет 'id', вы просто спрячете' gallery' и покажете «альбомы» (случай, когда пользователь нажимает «назад» в представлении галереи). В пользовательском интерфейсе вы, вероятно, захотите добавить кнопку «назад к альбомам» в отдельных галереях. Такая вещь особенно важна, когда вы начинаете возиться с историей, как если бы пользователь, например, открыл браузер в режиме просмотра галереи, им не удавалось вернуться к альбомам. – numbers1311407
Спасибо за помощь, я попробую, что вы предложили. Как только я выясню pushstate, следующая вещь, которую я планировал сделать, это добавить кнопку назад к альбому. – Su7ech