A Vue.js component for creating a star rating system, allowing users to rate items or content.
Features
- Customizable star rating with a specified number of stars.
- Supports both clicking and hover interactions for setting the rating.
- Emits the selected rating for parent component communication.
- Easily integrate into your Vue.js application.
Usage
Installation
- Ensure you have Vue.js installed in your project.
- Copy the
StarRating.vue
component into your project.
Example
<template> <div> <star-rating v-model="userRating" :max-stars="5" @ratingData="updateRating" /> <p>Selected rating: {{ userRating }}</p> </div> </template> <script> import StarRating from "./StarRating.vue"; export default { data() { return { userRating: 0, }; }, components: { StarRating, }, methods: { updateRating(newRating) { // Handle the new rating as needed. this.userRating = newRating; }, }, }; </script>
Component Code
<template> <div class="star-rating"> <div v-for="i in maxStars" :key="i" @click="setRating(i)" @mouseover="hoverRating(i)" @mouseleave="resetHover" :class="['star', i <= (isHovered ? hoverValue : rating) ? 'filled' : '']" > ★ </div> </div> </template> <script> import { ref } from 'vue'; export default { props: { value: { type: Number, default: 0, }, maxStars: { type: Number, default: 5, }, }, setup(props, { emit }) { const rating = ref(props.value); const isHovered = ref(false); const hoverValue = ref(0); const setRating = (newRating) => { rating.value = newRating; emit('ratingData', newRating); }; const hoverRating = (value) => { if (isHovered.value) { hoverValue.value = value; } }; const resetHover = () => { hoverValue.value = 0; }; return { rating, isHovered, hoverRating, resetHover, setRating, }; }, }; </script> <style scoped> .star-rating { display: inline-block; } .star { display: inline-block; font-size: 24px; cursor: pointer; margin: 2px; color: rgb(222, 222, 222); } .filled { color: gold; } </style>
Component Explanation
- The component consists of a group of stars, each of which can be clicked to set a rating.
- Stars change color on hover and remain filled or unfilled based on the selected rating.
- Emits the
ratingData
event to send the selected rating to the parent component. - Supports a
maxStars
prop for specifying the maximum number of stars. - Utilizes Vue 3 Composition API for state management with
ref
.
Styling
- Stars are styled with a base color of gray and turn gold when filled.
- Adjustable font size and cursor styles for user interaction.
Props
-
value
(Number): Represents the current rating. -
maxStars
(Number): Specifies the maximum number of stars (default: 5).
Events
-
ratingData
: Emits the selected rating to the parent component.
Methods
-
setRating(newRating)
: Sets the current rating and emits theratingData
event. -
hoverRating(value)
: Tracks the hovered rating during a hover interaction. -
resetHover()
: Resets the hover value after the mouse leaves the star.
Author
Created by Tahsin Abrar
Top comments (0)