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面向对象

    新手初学Java面向对象攻略 Java是一门面向对象的编程语言,学习Java面向对象编程是Java学习的核心,也是初学者们必须掌握的必要技能。 以下是新手初学Java面向对象的完整攻略,内容包括理论知识和实践经验,希望对初学者们有所帮助。 一、理论知识 面向对象的概念 面向对象(Object-Oriented,简称 OO)是一种基本的程序设计思想,核心是“对…

    Java 2023年5月23日
    00
  • oracle如何使用java source调用外部程序

    使用 Java Source 调用外部程序可以让我们在 Oracle 数据库中调用其他程序的功能,这在实际应用中非常实用。以下是详细讲解 “oracle如何使用java source调用外部程序” 的完整攻略: 1. 安装JDK 安装JDK,安装目录路径如下,如以不同版本安装需按对应路径进行修改。 Linux:/usr/java/jdk1.8.0_281Wi…

    Java 2023年5月26日
    00
  • mybatis 模糊查询的实现方法

    MyBatis是一种流行的Java ORM框架,它可以帮助开发人员轻松地访问数据库。模糊查询是一种常见的查询方式,用于在所有符合特定标准的结果中查找符合特定模式的结果。在MyBatis中实现模糊查询非常简单,本文将详细介绍如何实现。 1. LIKE关键字 实现模糊查询的最常见方法是使用SQL的LIKE关键字。这个关键字指示数据库在检索数据时应该搜索包含指定模…

    Java 2023年5月20日
    00
  • Javaweb resin4如何配置端口虚拟目录

    下面是关于Javaweb Resin4如何配置端口虚拟目录的攻略。 1. 端口配置 1.1 修改 Resin 配置文件 首先需要打开Resin的配置文件resin.xml。可以在该文件中找到以下代码段: <cluster id="app"> <host id="app0"> <web-ap…

    Java 2023年6月15日
    00
  • springboot接收别人上传的本地视频实例代码

    下面就是关于“spring boot接收别人上传的本地视频实例代码”的完整攻略。 步骤一:前端页面设计 首先需要在前端页面添加文件上传功能的按钮和控件,并添加所需要的表单元素。这些表单元素一般包括文件上传按钮、提交按钮以及其他表单输入项(例如标题、说明等)。 下面是一个简单的示例代码: <form method="post" enc…

    Java 2023年5月26日
    00
  • Java实现的质因数分解操作示例【基于递归算法】

    下面是“Java实现的质因数分解操作示例【基于递归算法】”的完整攻略: 1. 质因数分解的概念 质因数分解,也叫素因子分解,是将一个正整数分解成一系列质数的积。比如,24可以分解成2x2x2x3,而30可以分解成2x3x5。 2. 基于递归算法的质因数分解示例 下面的示例是使用Java实现基于递归算法的质因数分解: public class PrimeFac…

    Java 2023年5月19日
    00
  • IDEA下创建SpringBoot+MyBatis+MySql项目实现动态登录与注册功能

    下面我将为您详细讲解“IDEA下创建SpringBoot+MyBatis+MySql项目实现动态登录与注册功能”的完整攻略。 环境准备 首先,我们需要在本地环境中安装好如下软件: JDK、IDEA、Maven、MySQL等开发环境 SpringBoot、MyBatis、MySql等相关依赖包 创建SpringBoot项目 步骤如下: 打开IDEA,选择 Cr…

    Java 2023年5月20日
    00
  • springboot+spring data jpa实现新增及批量新增方式

    关于“springboot+spring data jpa实现新增及批量新增方式”的完整攻略,具体步骤如下: 步骤一:添加依赖 在pom.xml文件中添加Spring Data JPA的依赖: <dependency> <groupId>org.springframework.data</groupId> <arti…

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