【发布时间】:2016-06-30 20:33:27
【问题描述】:
我正在处理一个有画廊的项目。画廊的工作方式是让用户看到一个图像列表,每个图像都是一个“相册”,链接到给定画廊的更多图像。我目前正在工作,但是当用户在转到所选画廊后单击后退按钮时,他们不会被带回专辑列表。比如你是首页,点击相册页面,打开一个图库。单击返回按钮后,您将返回主页。
所以我想解决这个问题,我可以使用历史 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 数据中专辑的索引或 ID 中(您应该维护对它的引用,而不是仅仅使用 to init,以便您以后可以使用它)。点击相册,然后pushState一个新的 URL 可能是'?id='+id,然后showAlbum(id)加载视图。然后在window.onpopstate中,您将从查询字符串中提取id和showAlbum(id)。 -
那么当然,如果查询字符串中没有
id,您只需隐藏gallery并显示albums(用户在图库中单击“返回”的情况看法)。在 UI 方面,您可能希望从各个画廊中添加一个页面内“返回相册”按钮。一旦你开始弄乱历史,这类事情就特别重要,就好像用户在画廊视图上打开浏览器一样,他们没有办法“返回”到相册。 -
感谢您的帮助,我会尝试您的建议。一旦我弄清楚了 pushstate,我计划做的下一件事就是添加一个返回相册按钮。
标签: javascript jquery html html5-history