【发布时间】:2021-02-20 04:04:14
【问题描述】:
我正在制作一个宝石拼图。我有一个保存按钮。当你点击它时,游戏的当前状态被保存,这样当页面重新加载时,用户可以从他保存的地方继续玩。据我了解,我必须将表保存在 localStorage 中。并且在重新加载页面时,检查 localeStorage 是否为空。但是如何在页面重新加载时重新渲染游戏?当使用 json.stringify 和 json.parse 时,我有一个错误 Uncaught SyntaxError: Unexpected token o in JSON at position 1. 当我删除 json.stringify 和 json.parse 这是一个错误 Uncaught TypeError: Failed to execute 'appendChild' on '节点”:参数 1 不是“节点”类型。在 LocalStorage 是 [object HTMLTableSectionElement]
let saveSession = false;
document.querySelector('.save-btn').addEventListener('click', () => {
saveSession = true;
})
function start() {
let button = document.getElementById('newGame');
button.addEventListener('click', startNewGame, false );
textMoves = document.getElementById('moves');
table = document.getElementById('table');
rows = 4;
columns = 4;
startNewGame();
}
function startNewGame() {
let arrayOfNumbers = new Array();
let arrayHasNumberBeenUsed;
let randomNumber = 0;
let count = 0;
moves = 0;
rows = document.getElementById('rows').value;
columns = document.getElementById('columns').value;
textMoves.innerHTML = moves;
arrayForBoard = new Array(rows);
for (let i = 0; i < rows; i++){
arrayForBoard[i] = new Array(columns);
}
arrayHasNumberBeenUsed = new Array( rows * columns );
for (let i = 0; i < rows * columns; i++){
arrayHasNumberBeenUsed[i] = 0;
}
for (let i = 0; i < rows * columns; i++){
randomNumber = Math.floor(Math.random()*rows * columns);
if (arrayHasNumberBeenUsed[randomNumber] == 0) {
arrayHasNumberBeenUsed[randomNumber] = 1;
arrayOfNumbers.push(randomNumber);
}else {
i--;
}
}
count = 0;
for (let i = 0; i < rows; i++){
for (let j = 0; j < columns; j++){
arrayForBoard[i][j] = arrayOfNumbers[count];
count++;
}
}
showTable();
}
function showTable() {
for (let tr of document.querySelectorAll("#table tr")) {
tr.remove();
}
let tbody = document.createElement('tbody');
document.querySelector('#table').appendChild(tbody);
for (let i = 0; i < rows; i++) {
let tr = document.createElement('tr');
for (let j = 0; j < columns; j++) {
let cell = document.createElement('td');
if (arrayForBoard[i][j] == 0) {
cell.className = 'blank';
} else {
cell.className = 'tile';
cell.draggable = true;
cell.addEventListener('click', () => {
moveThisTile(i, j);
})
cell.innerHTML =arrayForBoard[i][j];
}
tr.appendChild(cell);
}
tbody.appendChild(tr);
}
if(saveSession) {
localStorage.setItem('currentGame', JSON.stringify(tbody));
}
};
window.addEventListener('load', () => {
if(localStorage.getItem('currentGame') !== null) {
const tbody = JSON.parse(localStorage.getItem('currentGame'));
document.querySelector('#table').appendChild(tbody);
} else {
start();
}
}, false );
【问题讨论】:
-
问题在于
localStorage.setItem('currentGame', JSON.stringify(tbody));JSON 库并不是一个神奇的解决方案,可以修复整个销售商店的完整文档元素,然后轻松检索它们..
标签: javascript arrays dom