Я сейчас создаю галерею с JavaScript.Я хочу создать собственную запись истории, чтобы конечный пользователь мог щелкнуть историю назад, чтобы закрыть оверлей большого изображения.
Мой window.onpopstate выглядит следующим образом:
function stateChange(event){
let state = event.state;
console.log(state);
if(state !== null){
if(state.show){
showOverlay(state.obj);
}else{
hideOverlay();
}
}else{
hideOverlay();
}
}
ИМой eventListener для картинок:
let state = {show: true, obj: itemLinks[i].dataset.file};
history.pushState(state, '');
Проблема в том, что моя консоль запускает один ноль, следующий после один клик по картинке.Но когда я возвращаюсь в историю, это показывает государственный объект.Если я вернусь в другой раз, я получу ноль, с которого я начал.
- РЕДАКТИРОВАТЬ -
Больше моего кода:
for (let i = 0, len = itemLinks.length; i < len; i++) {
itemLinks[i].addEventListener('click', function(){
let state = {show: true, obj: itemLinks[i].dataset.file};
history.pushState(state, '');
});
}
overlay.addEventListener('click', clickOverlay)
window.onpopstate = stateChange;
И:
let itemLinks = document.getElementsByClassName('item-link');
let overlay = document.getElementById('gallery-overlay');
let overlayImg = document.getElementById('gallery-overlay-img');
function showOverlay(src){
overlayImg.src = src;
overlay.classList.add('gallery-overlay__show');
}
function hideOverlay(){
overlay.classList.remove('gallery-overlay__show');
}
function clickOverlay(){
history.back();
}