#javascript #html #css
#javascript #HTML #css
Вопрос:
Редактировать: я отредактировал свой исходный пост, потому что он был слишком длинным, и я упростил код, добавив только то, что было необходимо для понимания проблемы.
Здравствуйте,
В настоящее время я разрабатываю дизайн временной шкалы для своего веб-сайта. Для этого я использую внешний скрипт scrollspy: https://github.com/cferdinandi/gumshoe
Я хочу, чтобы круги оставались активными во время выполнения, поэтому я использовал для этого некоторый css-селектор
#my-awesome-nav :first-child ~ li:not(.active, .active ~ li) .color-change {
background-color: rgb(255, 251, 0);
}
Однако с помощью этого селектора все круги активны до достижения первого круга, а затем первый круг не будет сохранять активное состояние, пожалуйста, смотрите Пример ниже (в полноэкранном режиме):
var spy = new Gumshoe('#my-awesome-nav a');
.container {
display: flex;
}
.stem-nav {
display: flex;
flex: 1;
justify-content: center;
}
#my-awesome-nav {
position: fixed;
list-style: none;
margin-left: 0;
padding-left: 0;
}
#my-awesome-nav li {
padding-bottom: 25px;
}
#my-awesome-nav li a {
border: solid 3px black;
border-radius: 50%;
display: inline-block;
background-color: #1F2933;
}
#my-awesome-nav li a .color-change {
height: 40px;
width: 40px;
background-color: #1F2933;
border-radius: 50%;
}
#my-awesome-nav li.active a .color-change {
background-color: rgb(255, 251, 0);
}
#my-awesome-nav :first-child ~ li:not(.active, .active ~ li) .color-change {
background-color: rgb(255, 251, 0);
}
.nav-item {
padding-top: 200px;
display: flex;
flex-direction: column;
}
.nav-item > div {
height: 500px;
width: 800px;
}
#step-one {
background-color: yellow;
}
#step-two {
background-color: red;
}
#step-three {
background-color: green;
}
#step-four {
background-color: blue;
}
#step-five {
background-color: purple;
}
<script src="https://cdn.jsdelivr.net/gh/cferdinandi/gumshoe@4/dist/gumshoe.polyfills.min.js"></script>
<div class="container">
<div class="stem-nav">
<ul id="my-awesome-nav">
<li><a href="#step-one">
<div class="color-change"></div>
</a></li>
<li><a href="#step-two">
<div class="color-change"></div>
</a></li>
<li><a href="#step-three">
<div class="color-change"></div>
</a></li>
<li><a href="#step-four">
<div class="color-change"></div>
</a></li>
<li><a href="#step-five">
<div class="color-change"></div>
</a></li>
</ul>
</div>
<div class="nav-item">
<div id="step-one"></div>
<div id="step-two"></div>
<div id="step-three"></div>
<div id="step-four"></div>
<div id="step-five"></div>
</div>
</div>
Ответ №1:
Я исправил свою проблему, я переключился с css на javascript, чтобы решить ее, я не мог найти способ решить ее с помощью css. Я удалил эту строку:
#my-awesome-nav :first-child ~ li:not(.active, .active ~ li) .color-change {
background-color: rgb(255, 251, 0);
}
Затем я добавил этот javascript:
var spy = new Gumshoe('#my-awesome-nav a');
let navUl = document.getElementById("my-awesome-nav");
document.addEventListener('gumshoeActivate', function (event) {
var li = event.target;
let children = navUl.children;
for(let i = 0; i < li.dataset.index; i ) {
children[i].className = "active";
}
}, false);
Конечный результат:
var spy = new Gumshoe('#my-awesome-nav a');
let navUl = document.getElementById("my-awesome-nav");
document.addEventListener('gumshoeActivate', function (event) {
var li = event.target;
let children = navUl.children;
for(let i = 0; i < li.dataset.index; i ) {
children[i].className = "active";
}
}, false);
.container {
display: flex;
}
.stem-nav {
display: flex;
flex: 1;
justify-content: center;
}
#my-awesome-nav {
position: fixed;
list-style: none;
margin-left: 0;
padding-left: 0;
}
#my-awesome-nav li {
padding-bottom: 25px;
}
#my-awesome-nav li a {
border: solid 3px black;
border-radius: 50%;
display: inline-block;
background-color: #1F2933;
}
#my-awesome-nav li a .color-change {
height: 40px;
width: 40px;
background-color: #1F2933;
border-radius: 50%;
}
#my-awesome-nav li.active a .color-change {
background-color: rgb(255, 251, 0);
}
.nav-item {
padding-top: 200px;
display: flex;
flex-direction: column;
}
.nav-item > div {
height: 500px;
width: 800px;
padding-bottom: 500px;
}
#step-one {
background-color: yellow;
}
#step-two {
background-color: red;
}
#step-three {
background-color: green;
}
#step-four {
background-color: blue;
}
#step-five {
background-color: purple;
}
<script src="https://cdn.jsdelivr.net/gh/cferdinandi/gumshoe@4/dist/gumshoe.polyfills.min.js"></script>
<div class="container">
<div class="stem-nav">
<ul id="my-awesome-nav">
<li data-index="0"><a href="#step-one">
<div class="color-change"></div>
</a></li>
<li data-index="1"><a href="#step-two">
<div class="color-change"></div>
</a></li>
<li data-index="2"><a href="#step-three">
<div class="color-change"></div>
</a></li>
<li data-index="3"><a href="#step-four">
<div class="color-change"></div>
</a></li>
<li data-index="4"><a href="#step-five">
<div class="color-change"></div>
</a></li>
</ul>
</div>
<div class="nav-item">
<div id="step-one"></div>
<div id="step-two"></div>
<div id="step-three"></div>
<div id="step-four"></div>
<div id="step-five"></div>
</div>
</div>