我正在尝试找到一些方法将数字1 - 5转换为星级,这也可以容纳小数,如4.3或3.34,并且非常精确(如在Amazon.com上)。评级不必是可用的,它只需要是静态图像。有什么帮助吗?
我可以使用PHP或jQuery,无论它需要什么。
答案 0 :(得分:5)
您可以使用透明星形切口创建一个白色的图像。然后将它放在给定长度的黄色div的顶部。让我们说你的图像是100px宽。如果你有一个3星评级你会使黄色div 100 *(3/5)和3个星星将被填写。
编辑: 一个类似的想法。你可以拥有一张包含全部5颗星的图像。将此图像放在具有overflow:hidden的div中。然后以与上面相同的方式设置div的宽度。 div越小,你看到的星星越少。
EDIT2: 小提琴只是为了好玩。您可以要求的所有粒度。 http://jsfiddle.net/qFMyC/
答案 1 :(得分:3)
答案 2 :(得分:2)
我之前写过这个年龄。我很痴迷于不使用JS。它需要一些工作,但我认为这正是你正在寻找的。 p>
答案 3 :(得分:0)
我希望你的意思是将1 -5值转换为实际的星形表示。
这取决于你想要的粒度,我认为亚马逊的精确到十分之一(0.1),这可能是服务器端节省客户端负载并利用缓存图像;但它可以在客户端完成。
@kingjiv发布了一个很好的客户端解决方案,但对于服务器端:
如果您不太担心粒度,可以创建11个图像0,0.5,1,1.5等,并将值传递给图像src属性。这将提供正确的图像,并且它们可以很好地缓存,以便在您的页面上反复使用。
如果你想在代码服务器端创建它们,那么你想要真正细化它们,每次准备好在创建之后将它们缓存,以便以后快速服务。使用这种方法,您可以达到您想象的任何精度。
对于PHP我建议看看Imagik
答案 4 :(得分:0)
我过去所做的就是创建2个div并将它们放在一起。
在底部div上,您将宽度设置为等于5星的宽度。因此,如果您的星形宽度为50px,则底部div为250px宽。
在顶部div上,您使用具有不同颜色的相同星形。然后你将php或javascript中div的宽度设置为50 * $ decimalStarRating。