Estive olhando o plugin jquery e me perguntando como adaptá-lo para transformar um número (como 4,8618164) em 4,8618164 estrelas preenchidas com 5. Basicamente interpretando um número <5 em estrelas preenchidas em um sistema de classificação de 5 estrelas usando jQuery / JS / CSS.
Observe que isso só exibiria / mostraria a avaliação com estrelas de um número já disponível e não aceitaria novos envios de avaliações.
javascript
jquery
css
rating
Steve
fonte
fonte
Respostas:
Aqui está uma solução para você, usando apenas uma imagem muito pequena e simples e um elemento span gerado automaticamente:
CSS
Imagem
Nota: NÃO faça um hotlink para a imagem acima! Copie o arquivo para seu próprio servidor e use-o a partir daí.
jQuery
Se você quiser restringir as estrelas a apenas metade ou um quarto do tamanho da estrela, adicione uma destas linhas antes da
var size
linha:HTML
Uso
Resultado
Demo
Isso provavelmente atenderá às suas necessidades. Com este método, você não precisa calcular três quartos ou qualquer outra largura de estrela, apenas dê um ponto flutuante e ele lhe dará suas estrelas.
Uma pequena explicação sobre como as estrelas são apresentadas pode ser adequada.
O script cria dois elementos de amplitude de nível de bloco. Ambos os spans inicialmente têm um tamanho de 80px * 16px e uma imagem de fundo stars.png. Os vãos são aninhados, de modo que a estrutura dos vãos tenha a seguinte aparência:
O vão externo recebe um valor
background-position
de0 -16px
. Isso faz com que as estrelas cinzentas no vão externo sejam visíveis. Como o vão externo tem altura de 16 px erepeat-x
, ele mostrará apenas 5 estrelas cinza.O vão interno, por outro lado, tem um
background-position
de0 0
que torna visíveis apenas as estrelas amarelas.É claro que isso funcionaria com dois arquivos de imagem separados, star_yellow.png e star_gray.png. Mas como as estrelas têm uma altura fixa, podemos facilmente combiná-las em uma imagem. Isso utiliza a técnica de sprite CSS .
Agora, conforme os vãos são aninhados, eles são sobrepostos automaticamente. No caso padrão, quando a largura de ambos os vãos é de 80 px, as estrelas amarelas obscurecem completamente as estrelas cinzas.
Mas quando ajustamos a largura do vão interno, a largura das estrelas amarelas diminui, revelando as estrelas cinzas.
Em termos de acessibilidade, teria sido mais sensato deixar o número flutuante dentro do vão interno e ocultá-lo com
text-indent: -9999px
, para que as pessoas com CSS desativado pudessem pelo menos ver o número de ponto flutuante em vez das estrelas.Esperançosamente, isso fez algum sentido.
Atualizado em 22/10/2010
Agora ainda mais compacto e difícil de entender! Também pode ser espremido em um forro:
fonte
max-width
).Se você só precisa suportar navegadores modernos, pode se safar com:
Você só precisa converter o número para um
class
, por exemploclass='stars-score-50'
.Primeiro, uma demonstração da marcação "renderizada":
Em seguida, uma demonstração que usa um pequeno código:
As maiores desvantagens desta solução são:
width
em um pseudo-elemento).Para corrigir isso, a solução acima pode ser facilmente ajustada. O
:before
e:after
bits precisam se tornar elementos reais no DOM (portanto, precisamos de algum JS para isso).Este último é deixado como um exercício para o leitor.
fonte
Experimente esta função / arquivo auxiliar jquery
jquery.Rating.js
index.html
fonte
Por que não ter apenas cinco imagens separadas de uma estrela (vazio, um quarto cheio, meio cheio, três quartos cheio e cheio) e, em seguida, apenas injetar as imagens em seu DOM dependendo do valor truncado ou roteado de classificação multiplicado por 4 ( para obter um número inteiro para os quartos)?
Por exemplo, 4,8618164 multiplicado por 4 e arredondado é 19, que seriam quatro e três quartos de estrelas.
Alternativamente (se você for preguiçoso como eu), selecione apenas uma imagem de 21 (0 estrelas a 5 estrelas em incrementos de um quarto) e selecione a única imagem com base no valor mencionado. Então, é apenas um cálculo seguido por uma mudança de imagem no DOM (em vez de tentar mudar cinco imagens diferentes).
fonte
Acabei ficando totalmente livre de JS para evitar o lag de renderização do lado do cliente. Para fazer isso, eu gero HTML assim:
Para ajudar na acessibilidade, adiciono até o valor bruto da classificação no atributo title.
fonte
usando jquery sem protótipo, atualize o código js para
Eu também adicionei um atributo de dados com o nome de classificação de dados no intervalo.
fonte
DEMO
Você pode fazer isso com apenas 2 imagens. 1 estrela em branco, 1 estrela cheia.
Sobrepor a imagem preenchida na parte superior da outra. e converter o número de classificação em porcentagem e usá-lo como largura da imagem de preenchimento.
fonte
Aqui está minha opinião sobre o uso de JSX e fontes incríveis, limitada apenas na precisão de 0,5, embora:
A primeira linha é para estrela inteira e a segunda linha é para meia estrela (se houver)
fonte