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

下面是详细的攻略:

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日

相关文章

  • Java中JDBC连接数据库详解

    Java中JDBC连接数据库详解 JDBC是Java Database Connectivity的缩写,可以用于连接不同类型的数据库(如MySQL、Oracle等),并进行数据库操作。本篇文章将详细讲解如何在Java中使用JDBC连接数据库。 步骤1:加载JDBC驱动 在使用JDBC连接数据库之前,需要加载相应的数据库驱动。例如,如果要连接MySQL数据库,…

    Java 2023年5月19日
    00
  • Java中SimpleDateFormat日期格式转换详解及代码示例

    下面就详细讲解一下“Java中SimpleDateFormat日期格式转换详解及代码示例”的攻略。 1. 什么是SimpleDateFormat SimpleDateFormat是Java中一个非常实用的日期格式化类,它能够将日期按照指定的格式进行转换,并且还支持将字符串转换成日期。SimpleDateFormat类的格式化符号遵循类似于Unix系统下的日期…

    Java 2023年5月20日
    00
  • 如何实现线程安全的单例模式?

    以下是关于如何实现线程安全的单例模式的完整使用攻略: 什么是线程安全的单例模式? 线程安全单例模式是指在多线程环境下,保证有一个实例对象被创建,并且多个线程可以同时访问该实例对象,而不会出现数据不一致或程序崩溃等问题。在多线程编程中,线程安全的单例模式是非常重要的,因为多个线程同时访问单例对象,会出现线程间争用的问题,导致数据不一致或程序崩溃。 如何实现线程…

    Java 2023年5月12日
    00
  • 教你如何写springboot接口 

    教你如何写Spring Boot接口的完整攻略 Spring Boot是一个基于Spring框架的快速开发应用程序的工具。它提供了一种快速、便捷的方式来创建基于Spring的应用程序,同时也提供了一些默认的和约定,使得开发人员可以更加专注于业务逻辑的实现。本文将详细讲解如何使用Spring Boot编写接口,并提供两个示例。 1. 创建Spring Boot…

    Java 2023年5月15日
    00
  • Java正则表达式入门基础篇(新手必看)

    让我来为你详细讲解一下“Java正则表达式入门基础篇(新手必看)”这篇文章的完整攻略。 标题 首先,我们来看一下文章的标题:“Java正则表达式入门基础篇(新手必看)”。这个标题十分的清晰明了,表明了本文的主题和受众人群。接下来我们来一步一步的解析这篇文章的内容: 介绍 首先,文章介绍了正则表达式的定义,即一种用来匹配字符串的文本模式。同时也解释了正则表达式…

    Java 2023年5月27日
    00
  • Spring MVC处理方法返回值过程解析

    下面我来详细讲解一下“Spring MVC处理方法返回值过程解析”的完整攻略。 什么是Spring MVC处理方法返回值过程? Spring MVC是基于MVC结构的开发框架,其中的控制器(Controller)负责处理用户请求并返回响应结果。在Spring MVC的控制器中,方法的返回值封装成一个ModelAndView对象,其中包含了视图名、数据模型和状…

    Java 2023年5月16日
    00
  • 全面理解Java类和对象

    全面理解Java类和对象 Java是一种基于类和对象的编程语言。在Java中,类和对象是构建代码的基本模块。为了更好地理解Java类和对象,必须全面掌握它们的概念、属性和方法。 Java类 Java类是一组属性和方法的集合。这些属性和方法都有一个共同的名称,称为类成员。Java类可以包含以下类型的成员: 实例变量 类变量(静态变量) 构造函数 方法 Java…

    Java 2023年5月26日
    00
  • Spring Boot四大神器之CLI的具体使用

    Spring Boot CLI是Spring Boot的一个命令行工具,它可以帮助我们快速创建、运行和调试Spring Boot应用程序。在本文中,我们将详细讲解Spring Boot CLI的具体使用,包括如何安装、如何创建和运行Spring Boot应用程序等。 安装 在使用Spring Boot CLI之前,我们需要先安装它。以下是安装Spring B…

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