#javascript #html
#javascript #HTML
Вопрос:
У меня есть меню с несколькими кнопками со стрелками. Если вы нажмете на эти кнопки со стрелками, появится еще один div.
Он работает нормально, но я заметил кое-что странное. Если я нажму на стрелку вправо 9 раз (пока не будут показаны все 10 разделов), на стрелку влево 9 раз (пока не будет показан только первый раздел), а затем попытаюсь нажать на стрелку вправо 9 раз (так что все 10 разделов будут показаны снова), меню застрянет на8-й div, и я не понимаю, почему.
Что-то не так с моим кодом?
let classCounter = 1;
let pasiExecutie = document.querySelectorAll(".pas-executie");
document.querySelector(".fa-arrow-right").addEventListener("click", function() {
if(classCounter < 10)
{
classCounter ;
document.querySelector(".pas" classCounter.toString()).classList.toggle("hide");
}
});
document.querySelector(".fa-arrow-left").addEventListener("click", function() {
if(classCounter > 1)
{
classCounter--;
document.querySelector(".pas" classCounter.toString()).classList.toggle("hide");
}
});
.hide {
display: none !important;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Divide et Impera</title>
<script src="https://kit.fontawesome.com/6612084f00.js" crossorigin="anonymous"></script>
</head>
<body>
<div class="executie-problema executie problema">
<div class="row d-flex justify-content-center align-items-center vh-100">
<span style="color: #77dff1;">Pasi executie:</span><br>
<ol class="pasi-executie" id="pasi-exec">
<li class="pas-executie pas1">isBstUtil(4, INT_MIN, INT_MAX) – Nodul nu este null si se afla in [INT_MIN, INT_MAX] =></li>
<li class="pas-executie pas2 hide">isBstUtil(2,INT_MIN,3) – Nodul nu este null si se afla in [INT_MIN, 3] =></li>
<li class="pas-executie pas3 hide">isBstUtil(1,INT_MIN,1) – Nodul nu este null si se afla in [INT_MIN,1] => </li>
<li class="pas-executie pas4 hide">isBstUtil(NULL,INT_MIN,0) – Nodul este NULL, se returneaza 1 => </li>
<li class="pas-executie pas5 hide">se apeleaza ramura 2 a returnului anterior, si anume isBstUtil(NULL,2,1) – Nodul este NULL, se returneaza 1 =></li>
<li class="pas-executie pas6 hide">s-a terminat ramura din stanga a lui 2, acum algoritmul verifica ramura dreapta si anume isBstUtil(3,3,3) – Nodul nu este NULL si se afla in [3,3] =></li>
<li class="pas-executie pas7 hide">isBstUtil(NULL,3,2) – Nodul este NULL, se returneaza 1 =></li>
<li class="pas-executie pas8 hide">se apeleaza ramura 2 a returnului anterior, si anume isBstUtil(NULL,4,3) – Nodul este NULL, se returneaza 1 si acum a fost verificat tot subarborele cu 2 drept radacina, agloritmul va trece acum in partea dreapta a adevaratei radacini =></li>
<li class="pas-executie pas9 hide">isBstUtil(5,5,INT_MAX) – Nodul nu este NULL si este in [5,INT_MAX] => </li>
<li class="pas-executie pas10 hide">isBstUtil (NULL,5,4) – Nodul este NULL, se returneaza 1 si se apeleaza ramura 2 a returnului anterior si anume isBstUtil(NULL,6,INT_MAX) – Nodul este NULL, se returneaza 1, ceea ce inseamna ca si subarborele ce are drept radacina 5 este BST, functia se intoarce in 4, si deoarece ambele ramuri ale sale sunt BST, si acesta este BST, functia afisand pe ecran: „Este BST”.</li>
</ol>
<div class="navigatie-sageti" style="position: absolute; top: 70%; left: 4%;">
<i class="fas fa-arrow-left fa-arrow-custom"></i>
<i class="fas fa-arrow-right fa-arrow-custom"></i>
</div>
</div>
</div>
</body>
<script src="main.js"></script>
</html>
Почему это происходит?
Ответ №1:
- Когда вы уменьшаете classCounter с 10, ваша функция начинается с classCounter — поэтому она скрывает 9-й элемент, а не 10-й.
- Когда вы добираетесь до classCounter = 1, ваша функция снова начинается с приращения, поэтому она добавляет второй элемент, а не 1-й.
- Увеличьте значение до 10 снова, и у вас не будет 1-го (2.) элемента и 10-го (1.), Потому что вы настраиваете класс для элемента, который уже виден.
Короче говоря, вам следует переосмыслить, где должны быть classCounter и classCounter— .
Комментарии:
1. Я исправил это, переместив «classCounter—» ниже строки, которая переключается. Это решение?
2. Если вам не нужно скрывать 1-й элемент, этого должно быть достаточно.