我决定尝试在 jquery 中编写星级评分并有点困惑,下面是其中有一个很好的错误的代码,如果最初 3 颗星处于活动状态,那么当您将鼠标悬停在第 4 颗星上时,它和之前的变为活动状态,这应该只在您单击而不是悬停时发生。+ 我的代码对于这样的任务来说可能太大了,一切都可以简化,但是唉,我不明白怎么做。
PS纯js中的答案也可以工作:)
var cStars = function(NowPos) {
if(NowPos.index() == 0) {
// У всех убираем active
$('.stars .star').removeClass('active');
for(var i = 0; 1 > i; i++) {
$('.stars .star').eq(i).toggleClass('active');
}
}
if(NowPos.index() == 1) {
// У всех убираем active
$('.stars .star').removeClass('active');
for(var i = 0; 2 > i; i++) {
$('.stars .star').eq(i).toggleClass('active');
}
}
if(NowPos.index() == 2) {
// У всех убираем active
$('.stars .star').removeClass('active');
for(var i = 0; 3 > i; i++) {
$('.stars .star').eq(i).toggleClass('active');
}
}
if(NowPos.index() == 3) {
// У всех убираем active
$('.stars .star').removeClass('active');
for(var i = 0; 4 > i; i++) {
$('.stars .star').eq(i).toggleClass('active');
}
}
if(NowPos.index() == 4) {
// У всех убираем active
$('.stars .star').removeClass('active');
for(var i = 0; 5 > i; i++) {
$('.stars .star').eq(i).toggleClass('active');
}
}
}
// При наведении
$('.stars .star').hover(function() {
var NowPos = $(this);
cStars(NowPos);
});
// При клике
$('.stars .star').click(function() {
var NowPos = $(this);
cStars(NowPos);
});
.stars {
font-size: 0px;
}
.star {
display: inline-block;
background: green;
transition: all .5s ease;
width: 25px;
height: 25px;
border-radius: 50%;
}
.star.active {
background: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="stars">
<span class="star active"></span>
<span class="star active"></span>
<span class="star active"></span>
<span class="star"></span>
<span class="star"></span>
</div>
好吧,如果您缩短代码,它将如下所示:
将变量添加到存储活动元素数量的代码中。它在点击时更新,当焦点丢失时,调用一个函数,将所有元素重新绘制为所需的值。
附言
NowPos最好将变量重命名为nowPos- JS 语言的变量名普遍接受的拼写nowPos不要将对象传递给变量,而是传递索引,因为只使用它,并且变量的名称暗示位置编号。您甚至不需要这里的 javascript - 这是一个示例
资源