js实现简单的星级选择器提交效果适用于评论等

yizhihongxing

下面是详细的攻略:

JS实现简单的星级选择器提交效果

1. HTML部分

首先,需要在HTML中添加星级选择器的结构,一般是通过多个图标或文字来表示不同的星级:

<div class="star-rating">
  <span class="star" data-star="1">&#9733;</span>
  <span class="star" data-star="2">&#9733;</span>
  <span class="star" data-star="3">&#9733;</span>
  <span class="star" data-star="4">&#9733;</span>
  <span class="star" data-star="5">&#9733;</span>
</div>

这里使用了一个div元素作为星级选择器的容器,内部包含了5个span元素作为星级图标或文字,每个span元素都有一个data-star属性表示对应的星级。

同时,在HTML中还需要添加一个用于显示当前选择的星级的元素,一般是一个隐藏的input元素:

<input type="hidden" name="rating" id="rating" value="">

2. CSS部分

为了让星级选择器看起来更加美观,需要对其进行一定的样式设置。例如,可以使用CSS将星级图标变成黄色、灰色交替的效果,以及设置鼠标移动到某个星级图标上时,显示高亮效果:

.star {
  font-size: 30px;
  color: #bbb;
  cursor: pointer;
}
.star.yellow {
  color: #ffc107;
}
.star:hover,
.star:hover ~ .star {
  color: #ffc107;
}

3. JS部分

最后,使用JS实现星级选择器的交互效果和提交数据的功能。

首先,需要用JS获取到所有的星级图标元素,监听它们的鼠标事件,以及获取用于显示当前选择的星级的元素:

var stars = document.querySelectorAll('.star');
var ratingInput = document.getElementById('rating');

然后,添加鼠标事件监听函数,实现当鼠标点击某个星级图标时,将该图标以及之前的所有图标变成黄色,同时更新当前选择的星级的值:

stars.forEach(function(star) {
  star.addEventListener('click', function() {
    var rating = this.getAttribute('data-star');
    for (var i = 0; i < stars.length; i++) {
      if (i < rating) {
        stars[i].classList.add('yellow');
      } else {
        stars[i].classList.remove('yellow');
      }
    }
    ratingInput.value = rating;
  });
});

这样,就完成了星级选择器的交互效果和提交数据的功能。

4. 示例说明

以下是两个示例说明:

示例1:基本使用

在评论区中添加星级选择器,在提交评论时将星级一并提交。

实现步骤:

  1. 首先在HTML中添加星级选择器和用于显示当前选择的星级的元素。

  2. 在CSS中添加星级选择器的样式。

  3. 在JS中添加星级选择器的交互效果和提交数据的功能。

最终代码如下:

HTML:

<div class="star-rating">
  <span class="star" data-star="1">&#9733;</span>
  <span class="star" data-star="2">&#9733;</span>
  <span class="star" data-star="3">&#9733;</span>
  <span class="star" data-star="4">&#9733;</span>
  <span class="star" data-star="5">&#9733;</span>
</div>
<input type="hidden" name="rating" id="rating" value="">

CSS:

.star {
  font-size: 30px;
  color: #bbb;
  cursor: pointer;
}
.star.yellow {
  color: #ffc107;
}
.star:hover,
.star:hover ~ .star {
  color: #ffc107;
}

JS:

var stars = document.querySelectorAll('.star');
var ratingInput = document.getElementById('rating');
stars.forEach(function(star) {
  star.addEventListener('click', function() {
    var rating = this.getAttribute('data-star');
    for (var i = 0; i < stars.length; i++) {
      if (i < rating) {
        stars[i].classList.add('yellow');
      } else {
        stars[i].classList.remove('yellow');
      }
    }
    ratingInput.value = rating;
  });
});

示例2:动态生成

根据后端返回的数据动态生成星级选择器,在提交时将星级一并提交。

实现步骤:

  1. 发送ajax请求,从后端获取需要生成的星级数量。

  2. 根据返回的数量动态生成星级选择器和用于显示当前选择的星级的元素。

  3. 在CSS中添加星级选择器的样式。

  4. 在JS中添加星级选择器的交互效果和提交数据的功能。

最终代码如下:

HTML:

<div id="star-container"></div>
<input type="hidden" name="rating" id="rating" value="">

CSS:

.star {
  font-size: 30px;
  color: #bbb;
  cursor: pointer;
}
.star.yellow {
  color: #ffc107;
}
.star:hover,
.star:hover ~ .star {
  color: #ffc107;
}

JS:

var starContainer = document.getElementById('star-container');
var ratingInput = document.getElementById('rating');
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var starsCount = parseInt(this.responseText);
    for (var i = 1; i <= starsCount; i++) {
      var star = document.createElement('span');
      star.classList.add('star');
      star.setAttribute('data-star', i);
      star.innerHTML = '&#9733;';
      starContainer.appendChild(star);
    }
    var stars = document.querySelectorAll('.star');
    stars.forEach(function(star) {
      star.addEventListener('click', function() {
        var rating = this.getAttribute('data-star');
        for (var i = 0; i < stars.length; i++) {
          if (i < rating) {
            stars[i].classList.add('yellow');
          } else {
            stars[i].classList.remove('yellow');
          }
        }
        ratingInput.value = rating;
      });
    });
  }
};
xmlhttp.open('GET', 'stars.php', true);
xmlhttp.send();

这样,就可以根据后端返回的数据动态生成星级选择器,以及实现交互效果和提交数据的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现简单的星级选择器提交效果适用于评论等 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • SpringBoot个性化配置的方法步骤

    Spring Boot 个性化配置的方法步骤 在 Spring Boot 中,我们可以使用个性化配置来覆盖默认的配置。个性化配置可以帮助我们在不修改默认配置的情况下,对应用程序进行自定义配置。在本文中,我们将详细介绍 Spring Boot 个性化配置的方法步骤,并提供两个示例。 方法步骤 以下是 Spring Boot 个性化配置的方法步骤: 创建一个名为…

    Java 2023年5月15日
    00
  • Java之Pattern.compile函数用法详解

    Java之Pattern.compile函数用法详解 什么是Pattern.compile函数 Pattern.compile是Java正则表达式中的一个方法,可以用来编译正则表达式并生成一个Pattern对象。该对象可以被用于创建Matcher对象,以执行匹配操作。 Pattern.compile函数的语法 下面是Pattern.compile函数的语法:…

    Java 2023年5月26日
    00
  • springboot构造树形结构数据并查询的方法

    我会为你讲解“springboot构造树形结构数据并查询的方法”的完整攻略,以下是步骤: 1.引入依赖 首先,在pom.xml文件中引入mybatis-plus和fastjson依赖,用于操作数据库和处理Json数据。具体依赖如下: <dependencies> <dependency> <groupId>com.baom…

    Java 2023年5月20日
    00
  • java之assert关键字用法案例详解

    Java之assert关键字用法案例详解 概述 本文将详细讲解Java中的assert关键字用法,并给出案例说明。 assert是Java语言的一个关键字,用于进行程序断言。assert关键字的作用是在开发和调试期间,为程序员提供了一个简单有效的集成测试方法,可以确保代码的正确性和程序的可靠性。 assert的语法格式 assert语法格式如下: asser…

    Java 2023年5月26日
    00
  • Java Apache Commons报错“ValidatorException”的原因与解决方法

    “ValidatorException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 验证错误:如果验证失败,则可能会出现此异常。例如,可能会尝试验证无效的输入。 配置错误:如果配置文件中存在错误,则可能会出现此异常。例如,可能会使用错误的文件路径或文件名。 以下是两个实例: 例1 如果验证失败,则可以尝试使用有效的输入…

    Java 2023年5月5日
    00
  • Java代码中4种字符串拼接方式分析

    Java代码中4种字符串拼接方式分析 在Java开发中,我们经常需要进行字符串的拼接操作。本文将详细介绍Java代码中的4种字符串拼接方式,包括StringBuilder、StringBuffer、String.format()和”+”拼接方式,并分析它们之间的优缺点。 1. StringBuilder StringBuilder是一个可变的字符串类,它提供…

    Java 2023年5月26日
    00
  • SpringBoot中 Jackson 日期的时区和日期格式问题解决

    下面是关于“SpringBoot中 Jackson 日期的时区和日期格式问题解决”的完整攻略。 问题描述 在SpringBoot的开发中,我们经常需要将Java对象转换为JSON格式的数据,而这种转换一般都是使用Jackson框架完成的。但是在转换日期类型的时候,会出现时区和日期格式的问题,比如: 默认情况下,Jackson框架将日期转换为UTC时区的ISO…

    Java 2023年5月20日
    00
  • JAVA多线程知识汇总

    JAVA多线程知识汇总 为什么需要多线程 在单线程模式下,当代码执行到IO操作时,CPU资源就会空闲等待IO操作完成,这样会导致CPU效率低下。而多线程模式下,线程的数量可以与CPU的核心数相匹配,能够更好地充分利用CPU资源,在IO操作等待的同时处理其他代码而不会浪费CPU。 如何使用多线程 创建线程 Java中使用继承Thread类或者实现Runnabl…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部