star-rating-svg.js
Native JavaScript, no dependencies. Data attributes init, rating scale (e.g. 0..10).
Github / v.2.3.1
examples
Basic implementation
<div class="my-rating"></div>
StarRating(".my-rating", {
initialRating: 4,
strokeColor: '#894A00',
strokeWidth: 10,
starSize: 25
});
Rounded star shape
<div class="my-rating-4" data-rating="2.5"></div>
StarRating(".my-rating-4", {
totalStars: 5,
starShape: 'rounded',
starSize: 40,
emptyColor: 'lightgray',
hoverColor: 'salmon',
activeColor: 'crimson',
useGradient: false
});
Use gradients
<div class="my-rating-5"></div>
// specify the gradient start and end for the selected stars
StarRating(".my-rating-5", {
starSize: 80,
strokeWidth: 9,
strokeColor: 'black',
initialRating: 2,
starGradient: {
start: '#93BFE2',
end: '#105694'
}
});
Execute callback when rating
<div class="my-rating-6"></div>
StarRating(".my-rating-6", {
totalStars: 5,
emptyColor: 'lightgray',
hoverColor: 'salmon',
activeColor: 'cornflowerblue',
initialRating: 4,
strokeWidth: 0,
useGradient: false,
minRating: 2,
callback: function(currentRating, el){
alert('rated ' + currentRating);
console.log('DOM element ', el);
}
});
read only mode
<div class="my-rating-7"></div>
StarRating(".my-rating-7", {
readOnly: true
});
Use fullstars
// use full stars only <div class="my-rating-8"></div>
StarRating(".my-rating-8", {
useFullStars: true
});
On hover event
<span class="my-rating-9"></span> <span class="live-rating"></span>
StarRating(".my-rating-9", {
initialRating: 3.5,
disableAfterRate: false,
onHover: function(currentIndex, currentRating, el){
document.querySelector('.live-rating').textContent = currentIndex;
},
onLeave: function(currentIndex, currentRating, el){
document.querySelector('.live-rating').textContent = currentRating;
}
});
rating level colors
<div class="my-rating-10"></div>
// specify the color per rating level
StarRating(".my-rating-10", {
starSize: 80,
strokeWidth: 9,
strokeColor: 'black',
ratedColors: ['#e2c181', '#ffa700', '#c4573e', '#9a321a', '#5e1e0f'],
initialRating: 2
});
5 stars, rating 0..10 (valueMultiplier)
5 stars displayed, but rating range 0..10 — half-star = step 1.
<span class="my-rating-11"></span> <span class="live-rating-scale"></span>
StarRating(".my-rating-11", {
totalStars: 5,
valueMultiplier: 2,
initialRating: 7,
disableAfterRate: false,
onHover: function(currentIndex, currentRating, el){
document.querySelector('.live-rating-scale').textContent = currentIndex;
},
onLeave: function(currentIndex, currentRating, el){
document.querySelector('.live-rating-scale').textContent = currentRating;
}
});
Rating labels (tooltips on hover)
Native title tooltips for each half-star. Hover to see labels for 1..10.
StarRating(".my-rating-labels", {
totalStars: 5,
valueMultiplier: 2,
initialRating: 7,
disableAfterRate: false,
ratingLabels: [
'Very bad', 'Bad', 'Not so bad', 'Normal', 'Average',
'Almost good', 'Good', 'Very good', 'Excellent', 'Perfect'
]
});
Data attributes: only markup
All options from data attributes, no JS options.
<span class="demo-data-only" data-total-stars="5" data-value-multiplier="2" data-initial-rating="7" data-disable-after-rate="false" data-star-size="35"></span>
StarRating(".demo-data-only");
Data attributes: mixed (data + JS callbacks)
Config from data, callbacks from JS.
<span class="demo-mixed" data-total-stars="5" data-initial-rating="3"></span>
StarRating(".demo-mixed", {
disableAfterRate: false,
onHover: function(i, r, el){ document.querySelector('.live-rating-mixed').textContent = i; },
onLeave: function(i, r, el){ document.querySelector('.live-rating-mixed').textContent = r; }
});
Data attributes: JS overrides data
Element has data-initial-rating="5", JS passes initialRating: 2.
StarRating(".demo-override", { initialRating: 2 });
Multiple ratings: different data each
Three ratings: 0..10, 0..5, readOnly.
StarRating(".demo-multi");
Multiple ratings: same data
Two elements with identical data attributes.
StarRating(".demo-same");
Mixed init: data vs JS on same page
First via data, second via JS only.
StarRating(".demo-data-vs-js");
StarRating(".demo-js-only", { totalStars: 5, initialRating: 4, starSize: 28 });