(七)原生js案例之评分功能

业务开发中,评分组件基本都是用element,antd这些框架的已经给我们封装好了现成的。现在手写一个原生的评分组件

效果请添加图片描述

代码实现

  • 必要的css
.rating {
      width: 600px;
      margin: 60px auto;
      text-align: center;
    }

    .rating img {
      width: 30px;
      height: 30px;
      cursor: pointer;
    }
    h2{
      text-align: left;
      font-size: 24px;
    }
  • 静态页面
<div class="rating">
    <h2>评分:</h2>
    <ul id="list" class="order-list list-group">
      <li class="list-group-item d-flex align-items-center">
        <span>商品质量:</span>
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <span>
          <em>0</em></span>
      </li>
      <li class="list-group-item d-flex align-items-center">
        <span>客服服务:</span>
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <span>
          <em>0</em></span>
      </li>
      <li class="list-group-item d-flex align-items-center">
        <span>物流运输:</span>
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <span>
          <em>0</em></span>
      </li>
      <li class="list-group-item d-flex align-items-center">
        <span>售后服务:</span>
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <img src="./images/s.png" alt="" srcset="">
        <span>
          <em>0</em></span>
      </li>
  </div>
  • 核心逻辑
window.onload = function () {
      const oRating = document.getElementsByClassName('rating')[0];
      const oLi = oRating.getElementsByTagName('li');
      for (var p = 0; p < oLi.length; p++) {
        const oImg = oLi[p].getElementsByTagName('img');
        const oEm = oLi[p].getElementsByTagName('em');
        const arr = [1, 2, 3, 4, 5]
        let isClick = false;
        let index = -1, scoreIndex = 0
        for (var i = 0; i < oImg.length; i++) {
          oImg[i].index = i
          oImg[i].onmousemove = function () {
            for (var j = 0; j <= this.index; j++) {
              oImg[j].src = './images/s-active.png'
            }
            index = this.index
            getScore()
          }
          oImg[i].onmouseout = function () {
            for (var j = oImg.length - 1; j > scoreIndex; j--) {
              oImg[j].src = './images/s.png'
            }
          }
          oImg[i].onclick = function () {
            isClick = true;
            index = this.index;
            scoreIndex = this.index;
            for (var j = oImg.length - 1; j > this.index; j--) {
              oImg[j].src = './images/s.png'
            }
            getScore()
          }
        }

        oLi[p].onmouseout = function () {
          if (isClick) {
            for (var j = 0; j <= scoreIndex; j++) {
              oImg[j].src = './images/s-active.png'
            }
          } else {
            for (var j = 0; j < oImg.length; j++) {
              oImg[j].src = './images/s.png'
            }
          }
          index = isClick ? scoreIndex : -1
          getScore()
        }
        getScore()
        function getScore() {
          oEm[0].innerHTML = arr[index] || 0
        }

      }
    }

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 11:02:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 11:02:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 11:02:03       45 阅读
  4. Python语言-面向对象

    2024-07-20 11:02:03       55 阅读

热门阅读

  1. docker 安装MySQL 8.4.1

    2024-07-20 11:02:03       16 阅读
  2. React antd form表单未保存跳转页面提示

    2024-07-20 11:02:03       17 阅读
  3. c++中static_cast的用法

    2024-07-20 11:02:03       18 阅读
  4. 在ubuntu系统上安装qt 3

    2024-07-20 11:02:03       14 阅读
  5. ansible——Ansible ad hoc命令

    2024-07-20 11:02:03       16 阅读
  6. MySQL分库与分表的设计思路

    2024-07-20 11:02:03       15 阅读
  7. AI、AGI、AIGC与AIGC、NLP、LLM,ChatGPT区分

    2024-07-20 11:02:03       18 阅读
  8. 高并发小结

    2024-07-20 11:02:03       17 阅读