【发布时间】:2020-09-11 12:32:30
【问题描述】:
我使用 CSS HTML 和 Javascript 创建了一个星级评分应用程序。 当我点击一颗星时,它没有按预期突出显示。 假设我点击第三颗星,然后只点击两颗星,它就会突出显示。
我不明白我应该如何处理 css 属性,这将使当前点击的星星突出显示。
let stars = document.querySelectorAll('.star');
document.querySelector('.star-container').addEventListener('click', starRating);
let rating = document.querySelector('.rating');
function starRating(e) {
if (e.target.classList[0] == 'star') {
stars.forEach((star) => star.classList.remove('star__checked'));
for (i = stars.length - 1, j = 0; i >= 0; i--, j++) {
if (stars[i] !== e.target) {
stars[i].classList.add('star__checked');
} else {
stars[i].classList.add('star__checked');
rating.textContent = `${j + 1}/5`;
break;
}
}
} else {
stars.forEach((star) => star.classList.remove('star__checked'));
rating.textContent = `${0}/5`;
}
}
.star-container {
display: flex;
width: 350px;
flex-direction: row-reverse;
}
.star {
}
.star:before {
content: '\f005';
font-family: fontAwesome;
font-size: 60px;
position: relative;
display: block;
color: pink;
}
.star:after {
content: '\f005';
font-family: fontAwesome;
position: absolute;
top: 7px;
font-size: 60px;
color: gold;
opacity: 0;
}
.star:hover:after,
.star:hover ~ .star:after {
opacity: 1;
}
.star__checked ~ .star:after {
opacity: 1;
}
<html lang="en">
<head>
<link rel="stylesheet" href="./styles.css" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
/>
<title>Document</title>
</head>
<body>
<div class="star-container">
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
</div>
<h1 class="rating">0/5</h1>
<script src="app.js"></script>
</body>
</html>
【问题讨论】:
标签: javascript html css dom ecmascript-6