У меня есть проект, над которым я работаю, в котором есть галерея. Галерея работает так, что пользователю предлагается список изображений, и каждое изображение представляет собой «альбом», который ссылается на другие изображения для данной галереи. В настоящее время у меня это работает, однако, когда пользователь нажимает кнопку «Назад» после перехода в выбранную галерею, он не возвращается в список альбомов. Например, если вы являетесь главной страницей, нажмите на страницу альбомов и откройте галерею. Нажав кнопку «Назад», вы вернетесь на главную страницу.
Итак, я думаю, чтобы исправить это, я могу использовать API истории и использовать pushState и popstate. Моя проблема в том, что я не смог заставить его работать, и я не уверен, где разместить функции в моем заданном скрипте.
Если вы хотите, чтобы у меня была живая версия сайта, над которым я работаю, здесь: Живая демонстрация< /а>
Вот мой текущий скрипт:
(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 data (на которые вы должны поддерживать ссылку, а не просто использовать для инициализации, чтобы вы могли использовать их позже). При щелчке по альбому вы затемpushState
получаете новый URL-адрес, вероятно,'?id='+id
, а затемshowAlbum(id)
загружаете представление. Затем вwindow.onpopstate
вы вытащили быid
из строки запроса иshowAlbum(id)
. - person numbers1311407   schedule 01.07.2016id
, вы просто скроетеgallery
и отобразитеalbums
(случай, когда пользователь нажимает назад в представлении галереи). С точки зрения пользовательского интерфейса вы, вероятно, захотите добавить кнопку «Назад в альбомы» из отдельных галерей. Такие вещи особенно важны, когда вы начинаете возиться с историей, например, если пользователь откроет браузер в представлении галереи, у него не будет возможности вернуться к альбомам. - person numbers1311407   schedule 01.07.2016