#javascript #html
Вопрос:
Я делаю интерактивную книгу, и я хочу, чтобы номер страницы был показан, но номер страницы остается 0.
Я изменяю содержимое с помощью функции. Я попытался изменить переменную, вызвав функцию при нажатии кнопки, но номер страницы (переменная «страница») не отображает изменение.
Что происходит не так?
var page = 0;
document.getElementById('page').innerHTML = "Current page: " page " | Enter page number: ";
function f1() {
document.getElementById('contents').innerHTML = "<p>You are a pet hamster. You are waiting for your owner to come home. What do you want to do in the meantime?</p></br><button type='button' onclick='f2()'>Run in the wheel</button> <button type='button' onclick='f3()'>Eat</button>";
page = 1;
}
<div id="contents">
<h1>Hamster Adventure</h1>
<button type='button' onclick='f1()'>Start</button>
</div>
</br>
<div id="page"></div>
Комментарии:
1. Между html и некоторой переменной нет привязки, поэтому каждый раз, когда переменная изменяется, вам также необходимо обновлять html. Он не будет автоматически обновляться
Ответ №1:
После изменения page
переменной вам нужно будет обновить содержимое #page
элемента, чтобы отразить новое значение. Вы можете устанавливать его innerHTML
при каждом изменении страницы.
var page;
var pagination = document.getElementById('page');
function setPageNum(page) {
pagination.innerHTML = "Current page: " page " | Enter page number: ";
}
function f1() {
document.getElementById('contents').innerHTML = "<p>You are a pet hamster. You are waiting for your owner to come home. What do you want to do in the meantime?</p></br><button type='button'>Run in the wheel</button> <button type='button' onclick='f3()'>Eat</button>";
setPageNum(2);
}
setPageNum(1);
<div id="contents">
<h1>Hamster Adventure</h1>
<button type='button' onclick='f1()'>Start</button>
</div>
<br>
<div id="page"></div>
Кстати, вы могли бы рассмотреть более СУХОЙ метод перехода по страницам.
var pagination = document.getElementById('page');
var contents = document.getElementById('contents');
var pages = {
1: "<p>You are a pet hamster. You are waiting for your owner to come home. What do you want to do in the meantime?</p></br><button type='button' onclick='setPage(2)'>Run in the wheel</button> <button type='button'onclick='setPage(2)'>Eat</button>",
2: "<p>This is step 2.</p></br><button type='button'onclick='setPage(3)'>Something</button> <button type='button' onclick='setPage(3)'>Something Else</button>",
3: "<p>This is step 3.</p></br><button type='button'onclick='setPage(1)'>This One</button> <button type='button' onclick='setPage(1)'>Another One</button>"
};
function setPage(page) {
contents.innerHTML = pages[page];
pagination.innerHTML = "Current page: " page;
}
setPage(1);
<div id="contents">
<h1>Hamster Adventure</h1>
<button type='button' onclick='f1()'>Start</button>
</div>
<br>
<div id="page"></div>
Комментарии:
1. И, возможно, подумайте о делегировании и просто измените текстовое содержимое кнопок и исправьте отображение или скрытие кнопок. Это в сочетании с обработкой внешних событий
2. @mplungjan Согласился!
Ответ №2:
var page = 0;
document.getElementById('page').innerHTML = "Current page: " page " | Enter page number: ";
function f1(val) {
val = 1;
document.getElementById('contents').innerHTML = "<p>You are a pet hamster. You are waiting for your owner to come home. What do you want to do in the meantime?</p></br><button type='button' onclick='f2()'>Run in the wheel</button> <button type='button' onclick='f3()'>Eat</button>";
document.getElementById('page').innerHTML = "Current page: " val " | Enter page number: ";
}
<div id="contents">
<h1>Hamster Adventure</h1>
<button type='button' onclick='f1(0)'>Start</button>
</div>
</br>
<div id="page"></div>
Ответ №3:
Другие ответы рассказали вам, что не так с вашим кодом.
Изучите это.
В нем должно быть достаточно фрагментов сценария, чтобы помочь вам с вашей книгой
const pages = [{
"text":"", "choices": [{"page":1,"text":"Start"}]},
{
"text": "You are a pet hamster. You are waiting for your owner to come home. What do you want to do in the meantime?",
"choices" : [{
"page": 2,
"text": "Run in the wheel"
}, {
"page": 3,
"text": "Eat"
}]
},
{
"text": "You are running in the wheel; what now?",
"choices" : [{
"page": 4,
"text": "Stop and rest"
}, {
"page": 5,
"text": "Run faster"
}]
}];
let pageNumber = 0;
const pageSpan = document.getElementById("pageSpan");
const textDiv = document.getElementById("textDiv");
const choiceButtons = document.querySelectorAll(".choice")
const changePage = () => {
const page = pages[pageNumber]; console.log(page)
textDiv.innerHTML = page ? page.text : "You are eaten by a Grue";
const choices = page ? page.choices : [];
pageSpan.textContent = pageNumber;
choiceButtons.forEach((but,i) => {
but.classList.toggle("hide",!choices[i])
but.innerText = choices[i] ? choices[i].text : "";
});
};
document.getElementById("gotoPage").max = pages.length;
document.getElementById("contents").addEventListener("click", function(e) {
const tgt = e.target;
const page = pages[pageNumber];
if (page) {
pageNumber = page.choices[tgt.id==="choice1" ? 0 : 1].page
changePage();
}
})
changePage()
document.getElementById("gotoPage").addEventListener("change", function(e) {
pageNumber = this.value;
changePage()
});
.hide {
display: none;
}
#gotoPage {
width: 10px;
}
<div id="contents">
<h1>Hamster Adventure</h1>
<div id="textDiv"></div>
<button type='button' class="choice hide" id="choice1"></button>
<button type='button' class="choice" id="choice2">Start</button>
</div>
<div id="page">Current page: <span id="pageSpan"></span> | Enter page number:<input type="number" min="0" id="gotoPage" /></div>