首先,需要一个包含五个空星的HTML元素,可以使用ul和li标签来实现。 使用CSS设置空星和满星的样式,空星可以使用border来实现,满星可以使用background-color。 使用JavaScript监听用户的鼠标移动事件,根据鼠标当前位置计算出当前评分,并将对应的星星填充颜色。 当用户点击某一颗星星时,需要将该星星的颜色固定下来,并将评分提交到后台。 当用户离开星星区域时,需要将评分区域的星星全部恢复成空星。 为了让评分更加动态,可以使用CSS的transition属性和animation属性,使星星在填充颜色时具有渐变效果和闪烁效果。 希望这个思路可以帮助到你。代码写出来
时间: 2023-08-07 20:04:56 浏览: 145
以下是一个基础的星级评分系统的代码示例:
HTML部分:
```
<div class="rating">
<ul>
<li class="star"></li>
<li class="star"></li>
<li class="star"></li>
<li class="star"></li>
<li class="star"></li>
</ul>
</div>
```
CSS部分:
```
.rating ul {
list-style-type: none;
padding: 0;
margin: 0;
}
.rating li {
display: inline-block;
margin-right: 5px;
width: 20px;
height: 20px;
border: 1px solid #000;
transition: all .2s ease-in-out;
}
.rating li.star {
background-color: #ff0;
}
.rating li:hover, .rating li:hover ~ li, .rating li.selected, .rating li.selected ~ li {
background-color: #ff0;
border: none;
}
.rating li.selected {
animation: pulse 1s infinite;
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}
```
JavaScript部分:
```
const stars = document.querySelectorAll('.rating .star');
// 鼠标移动时改变星级评分
function handleMouseMove(event) {
const starWidth = event.currentTarget.offsetWidth / stars.length;
const rating = Math.ceil((event.clientX - event.currentTarget.offsetLeft) / starWidth);
fillStars(rating);
}
// 点击星级评分时固定评分并提交
function handleClick(event) {
const starWidth = event.currentTarget.offsetWidth / stars.length;
const rating = Math.ceil((event.clientX - event.currentTarget.offsetLeft) / starWidth);
fillStars(rating);
for (let i = 0; i < stars.length; i++) {
if (i < rating) {
stars[i].classList.add('selected');
} else {
stars[i].classList.remove('selected');
}
}
// 提交评分到后台
submitRating(rating);
}
// 填充星级评分
function fillStars(rating) {
for (let i = 0; i < stars.length; i++) {
if (i < rating) {
stars[i].classList.add('star');
} else {
stars[i].classList.remove('star');
}
}
}
// 鼠标离开星级评分时恢复评分区域的星星为未选中状态
function handleMouseLeave(event) {
for (let i = 0; i < stars.length; i++) {
stars[i].classList.remove('star');
}
}
// 监听鼠标移动、点击和离开事件
for (let i = 0; i < stars.length; i++) {
stars[i].addEventListener('mousemove', handleMouseMove);
stars[i].addEventListener('click', handleClick);
stars[i].parentNode.addEventListener('mouseleave', handleMouseLeave);
}
```
以上代码实现了一个基础的星级评分系统,并且加入了CSS的transition属性和animation属性,使星星在填充颜色时具有渐变效果和闪烁效果。但是还需要根据具体需求进行修改和完善。
阅读全文