如何获得半星评价
how to have a half star review
我正在创建一个星级评审机制。现在我的问题是如何捕获半颗星?这就是我所做的,添加一颗星,并改变栏显示多少颗星在每个类别。这工作得很好。感谢Barmar昨晚修复了bug。但那颗半星真的让我很困扰。jquery看起来像这样
$('.star').click(function () {
var num = parseInt($('.likes').eq($(this).index('.star')).text());
$('.likes').eq($(this).index('.star')).text(num + 1);
$(this).addClass('active').off('click');
$(this).prevAll().addClass('active').off('click');
checkNumber(num+1);
});
这是小提琴http://jsfiddle.net/sghoush1/VU3LP/54/
当我做这个
$('.likes').eq($(this).index('.star')).text(num + .5);
我正在丢失索引
我在这里做了一些改变,但基本上我用10个半星来制作5个等级的星星。当用户点击半颗星时,相应的星星等级增加0.5或1.0(取决于点击的是哪半颗星)。
我删除了类似的点击事件,但一个更好的方法是允许用户第二次点击,然后撤销第一次点击的数学运算。您还将注意一些一般的代码清理,等等。
这是缩短的,相关的HTML
<div id="stars">
<div class="star leftHalf"></div>
<div class="star rightHalf"></div>
[ ... ]
<div class="barHolder">
<table>
<tr>
<td>1 star</td>
<td class="bar"></td>
<td class="likes">20</td>
</tr>
[ ... ]
CSS .star {
height:20px;
width:10px;
float:left;
margin-right:5px;
cursor:pointer;
}
.star.leftHalf{
margin-right:0px;
}
完整JavaScript/jQuery
var baractive = $('<div class="barActive"></div');
baractive.appendTo('.bar');
function checkNumber() {
$(".likes").each(function () {
var valueCurrent = parseFloat($(this).text()),
barActive = $(this).prev(".bar").children(".barActive");
if (isNaN(valueCurrent) || valueCurrent <= 20) {
barActive.css('width', 30);
} else if (valueCurrent <= 60) {
barActive.css('width', 80);
}else if (valueCurrent <= 70) {
barActive.css('width',120);
}
});
}
checkNumber();
$('.star').click(function () {
var starIndex = $("#stars div").index( $(this) ), // current half clicked; 0-9
starLevel = Math.ceil( ( starIndex+1 )/2 )-1, // current star clicked; 0-4
valCur = parseFloat( $('.likes').eq(starLevel).text() ), // current likes value
isHalfStar = starIndex % 2 ? false : true, // is this a half click (left side)?
valNew = valCur + (isHalfStar ? 0.5 : 1.0); // new likes value
$('.likes').eq(starLevel).text(valNew);
$(".star").removeClass("active").off("click");
$(this).addClass('active');
$(this).prevAll().addClass('active');
checkNumber();
});
和工作的jsFiddle http://jsfiddle.net/daCrosby/VU3LP/64/
相关文章:
- 如何在下面的ES6循环中获得前面的文本
- 我可以获得相对于被点击元素的确切点击位置吗
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 当我点击jsf中的primefaces命令按钮时,如何获得点击事件
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- 如何在javascript中获得与特定数字相等的随机数
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 我怎样才能获得承诺的价值
- 检查元素是如何获得焦点的
- javascript处理一个对象数组以获得一个新的对象数组
- 如何更改<选择>使用angularJS从控制器获得的值
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 有没有一种方法可以获得three.js的最小/lite版本
- 如何获得随机灯光颜色
- JavaScript,JQuery.需要帮助才能获得'name'从我的JSON中删除
- 如何通过单击html按钮获得h1的文本值
- 如何获得半星评价