JS实现五星评价功能
在前端开发中,实现五星评价功能是一项常见的需求。本文将介绍如何使用JS完成这一任务,并提供详细的示例代码以及一些指导意义。
基本思路
实现五星评价功能的基本思路是利用HTML、CSS和JS相结合,通过点击事件改变星星的状态并将最终评分传递给后端。我们可以使用<span>
标签来表示星星,CSS样式来设置星星的外观,然后利用JS添加点击事件监听器来实现星星的交互效果。
HTML结构
首先,我们需要在HTML中创建一个包含五个星星的容器。以下是示例代码:
---- --------------- ----- ------------ --------------------- ----- ------------ --------------------- ----- ------------ --------------------- ----- ------------ --------------------- ----- ------------ --------------------- ------
我们使用了<div>
标签来作为星星的容器,并为每个星星创建了一个<span>
标签。我们还使用了data-star
属性来存储每个星星的值,这将在JS代码中用到。
CSS样式
接下来,我们需要用CSS样式来设置星星的外观。以下是示例代码:
----- - -------- ------------- ------ ----- ------- ----- ----------------- -------------- ------------------ ---------- ---------------- -------- ------- -------- - ------------- ----------- - ----------------- --------------------- -
我们使用了background-image
属性来指定星星的图片,使用background-repeat
属性来设置不重复平铺,使用background-size
属性来让星星适应其容器的大小。我们还为所有星星定义了一个指针,使它们在鼠标悬停时能够显示为手形光标。此外,我们创建了一个名为“active”的CSS类,该类用于表示已选择的星星,将星星图片更改为填充的。
JS代码
现在,我们需要编写JS代码来实现五星评价功能。以下是示例代码:
----- ----- - ----------------------------------- ----- ------ - ---------------------------------- --- ------------ - -- ----------------------------------- -- -- - ----------------------------- --- -------------------- -- - ---------------------------------- -- -- - ---------------------------------- --- ------------------------------ -- -- - ------------ - ------------------ --- --- -------- ---------------------- - -------------------- -- - -- ------------------ -- ------- - ----------------------------- - ---- - -------------------------------- - --- -
首先,我们使用document.querySelectorAll()
方法获取所有星星元素,并将它们存储在变量stars
中。我们还获取包含星星的容器元素,并将其存储在变量rating
中。
然后,我们定义了一个名为selectedStar
的变量,该变量用于存储用户选择的星星数量。在鼠标移出星星容器时,我们使用highlightStars()
函数来突出显示用户选择的星星。在鼠标悬停在星星上时,我们也使用highlightStars()
函数来动态高亮星星。
最后,在单击星星时,我们更新selectedStar
变量以反映用户的选择。
指导意义
通过实现五星评价功能的示例代码,我们可以看到如何使用HTML、CSS和JS相结合来实现这一任务。此外,以下是一些指导意义:
- 星级评价是用户界面设计的常见组件之一,掌握其实现原理对于
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/1267