千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:合肥千锋IT培训  >  技术干货  >  如何用js写五星好评?

如何用js写五星好评?

来源:千锋教育
发布人:qyf
时间: 2023-02-14 17:16:27

  在各大电商网站中我们购买过商品之后一般都会有一个评价界面,如下图:

图片 1

  用户没有评价的时候界面如下:

图片 2

  用户评价之后:如果点了1个星,后面会对应显示:差

   如果点了2个星,后面会对应显示:一般

   如果点了3个星,后面会对应显示:良好

   如果点了4个星,后面会对应显示:好

   如果点了5个星,后面会对应显示:非常好

  那么这种评价效果应该怎么写呢?今天我就带着大家用js来写一写这个效果。

  先明确目标:

  默认情况下:先显示5个灰色的星星:

图片 3

  用户点几个星就让几个星亮起来,也就是用户点1个星,就让第一个星星变黄,用户点第二个星,就让前面2个星星都变黄,依次类推,用户点第5个星星,就让前面5个星星全部变黄。

  写布局:

  我们本案例用到的素材图如下:

图片 4

  从素材图上我们可以推出要实现评价的效果,默认应该是显示灰色图片,用户点击之后要显示黄色图片。

  先写默认效果,在页面上写5个灰色的星星,最终要写出的效果如下:

图片 5

  标签结构如下:用1个li表示1个星星,因为总共需要5个星星,所以创建5个li标签。

    <!-- ul是放星星的盒子 -->
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <!-- 用来显示文字的,是差还是一般还是好等 -->
    <div class="text">一般</div>

  写样式,css代码如下:

  *{

  padding: 0;

  margin: 0;

  }

  ul{

  overflow: hidden;

  float: left;

  }

  li{

  list-style: none;

  /* 一个星星的宽高是28*28 */

  width: 28px;

  height: 28px;

  /* 把素材图当作背景使用,设置不平铺 */

  background: url(./img/star.gif) no-repeat;

  /* 添加浮动,让5个星星横向排列 */

  float: left;

  }

  .text{

  float: left;

  color: red;

  font-weight: 700;

  }

  写js代码

  标签结构写好之后,我们就需要用js来写逻辑代码了。

  我们要完成的效果是:用户点击到第几个星星,就让第几个星星包括他之前的星全部变黄。

  所以我们第一步需要给每个星星都添加一个点击事件,也就是给li添加点击事件。

  // 获取到所有的li标签,lis是一个伪数组,里面就得到了所有的li

  var lis = document.querySelectorAll('ul>li')

  for(let i = 0;i<lis.length;i++){< p="">

  lis[i].onclick = function(){

  // 在这里可以用i表示当前点击的是第几个li标签

  // 0表示点击的是第一个

  // 1表示点击的是第二个

  // 2表示点击的是第三个

  console.log(i);

  }

  }

  接下来就是:让i包括i之间的标签样式全部变黄。所以重新遍历lis这个数组。只要 j<=i筛选出来的就是i和i之前的标签

  // 获取到所有的li标签,lis是一个伪数组,里面就得到了所有的li

  var lis = document.querySelectorAll('ul>li')

  for (let i = 0; i < lis.length; i++) {

  lis[i].onclick = function () {

  // 在这里可以用i表示当前点击的是第几个li标签

  // 0表示点击的是第一个

  // 1表示点击的是第二个

  // 2表示点击的是第三个

  // 让i包括i之间的标签样式全部变黄。

  for (let j = 0; j < lis.length; j++) {

  if (j <= i) {

  // 满足条件就是i和i之前的

  // 变黄只需调整背景图的位置即可

  lis[j].style.backgroundPositionY = "-28px"

  }

  else {

  // 不满足条件的一律变灰

  lis[j].style.backgroundPositionY = "0px"

  }

  }

  }

  }

  代码写到这里就已经实现评价的效果了,但是如果我们能在星星后面显示差、一般这样的字样就更好了。

  一开始我们在写布局的时候创造了一个类名叫做tex的标签,我们就用这个标签来显示文字吧。

  所以在js中获取到这个标签。

  // 获取用来显示文字的标签。

  var textEle = document.querySelector('.text')

  // 准备用来显示的文字

  var arr = ["差", "一般", "良好", "好", "非常好"]

  在让星星变成黄色的if语句中添加一句如下代码:

  // i就是第几个星星,是0就对应数组索引0的文字,i是1就对应数组索引1的文字。

  textEle.innerText = arr[i]

  到此我们的评价功能就写出来啦,各位小伙伴自己尝试一下吧。

  奉上最终完整的js代码,复制就可以使用哦。

  var lis = document.querySelectorAll('ul>li')

  var textEle = document.querySelector('.text')

  var arr = ["差", "一般", "良好", "好", "非常好"]

  for (let i = 0; i < lis.length; i++) {

  lis[i].onclick = function () {

  for (let j = 0; j < lis.length; j++) {

  if (j <= i) {

  lis[j].style.backgroundPositionY = "-28px"

  textEle.innerText = arr[i]

  }

  else {

  lis[j].style.backgroundPositionY = "0px"

  }

  }

  }

  }

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

unity快捷键大全

2023-08-28

unity射线检测多个物体

2023-08-28

unity富文本字体大小

2023-08-28

最新文章NEW

unity性能优化指标

2023-08-28

unity开发常用框架

2023-08-28

unity玻璃材质球

2023-08-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>