vue框架实现表情打分效果

2023-09-21 14:32:44

本来今天要实现这个功能 但是在网上查了一下 就csdn上有一个符合要求的 但是他竟然收费,痛心疾首啊 太伤白嫖党的心的 所以我手写了一个这个类似功能的代码 希望能帮到有这个需求的同学们

技术栈是VUE3 用其他技术栈的也可以看 因为逻辑很简单都一样的
// 问卷的虚拟数据
const dataInfoList = ref(
    [
        {id:'0' ,label:'您对小区管理人员的服务态度是否满意?',count:''},
        {id:'1' ,label:'您对小区环境、绿化是否满意?',count:''},
        {id:'2' ,label:'您对小区内的清洁卫生及垃圾收集堆放是否满意?',count:''},
        {id:'3' ,label:'您对小区公共设施(健身器材、活动场所、电瓶车充电设施等)是否满意?',count:''},
        {id:'4' ,label:'您对小区开展社区文化娱乐活动是否满意?',count:''},
        {id:'5' ,label:'您对小区车辆管理及外来人员管理是否满意?',count:''},
        {id:'6' ,label:'您对小区物业维修及时、质量、回访是否满意?',count:''},
    ]
)

要是实现上面代码的话 数据格式应该都跟上面格式类似 不一样的大家酌情更改

               <!-- 问题列表 -->
                <div class="questionnaires">
                    <div class="questionnaires_box" v-for="(item,index) in dataInfoList" :key="index">
                        <!-- 序号 以及 每一项标题 -->
                        <p class="title"><span>{{ index+1 }},</span><span>{{ item.label }}</span></p>
                        <div class="grade">
                           //图片
                            <div class="grade_top">
                                <div @click="updateCount(item.id, 1)" :class="{ selected: item.count == 1 }">
                                    <img src="../../assets/icons/garid1.png" alt="">
                                     <span>很差1分</span>
                                </div>
                                <div @click="updateCount(item.id, 2)" :class="{ selected: item.count == 2 }">
                                    <img src="../../assets/icons/garid2.png" alt="">
                                       <span>不满意2分</span>
                                </div>
                                <div @click="updateCount(item.id, 3)" :class="{ selected: item.count == 3 }">
                                    <img src="../../assets/icons/garid3.png" alt="">
                                       <span>基本满意3分</span>
                                </div>
                                <div @click="updateCount(item.id, 4)" :class="{ selected: item.count == 4 }">
                                    <img src="../../assets/icons/garid4.png" alt="">
                                     <span>满意4分</span>
                                </div>
                                <div @click="updateCount(item.id, 5)" :class="{ selected: item.count == 5 }">
                                    <img src="../../assets/icons/garid5.png" alt="">
                                         <span>非常满意5分</span>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

updateCount(item.id, 2) 传入id 以及每一项对应的分值 用来修改每一项选中后的数据的分值进行对应的修改   

:class="{ selected: item.count == 1 }" 动态类名 如果本项数据的分值等于 XX 的话设置动态样式 (就是设置选中样式)

// 修改选中值的数据
const updateCount = (id,num) => { 
    let idx = dataInfoList.value.findIndex((value, index, array) => {
        return value.id === id;
    });
    if (idx !== -1) {
        dataInfoList.value[idx].count = num;
    }
}

样式(可以添加一个动画效果)

                          // 动画效果
                            @keyframes zoom {
                                    from {transform: scale(1)}
                                    to {transform: scale(1.1)}
                            }

                           .selected{
                                animation-name: zoom;
                                animation-duration: 0.6s;
                               //设置选中的图片样式
                                  img{
                                    width: 45px;
                                    height: 45px;
                                    transform: scale(1.1);
                                    max-width: 45px;
                                    max-height: 45px;
                                }
                               //设置选中文字样式
                                span{
                                     color: black;
                                 font-size: 13px;
                                 font-weight: 600;
                                }            
                            }

到这一步效果就可以实现了  表情包图片我放在文章上面的附带资源上了 可以再进阶一下 用俩种不同图片来显示选中的样式 看大家需求吧

更多推荐

图论第三天|130. 被围绕的区域、417. 太平洋大西洋水流问题、827. 最大人工岛

130.被围绕的区域文档讲解:代码随想录-130.被围绕的区域状态:开始学习。思路:步骤一:深搜或者广搜将地图周边的‘O’全部改成’A’,如图所示:步骤二:再遍历地图,将‘O’全部改成‘X’(地图中间的‘O’改成了‘X’),将‘A’改回‘O’(保留的地图周边的‘O’),如图所示:本题代码(dfs):classSolut

Android 实战项目分享(一)用Android Studio绘制贝塞尔曲线的艺术之旅

一、项目概述欢迎来到创意之源!我们精心打造的绘图应用程序将带你进入一个充满艺术和技术的奇妙世界。通过使用AndroidStudio,我们实现了绘制贝塞尔曲线的功能,让你能够轻松创作出令人惊叹的艺术作品。不论你是热爱绘画的大学生还是渴望学习的艺术爱好者,这个应用程序将为你点燃创作的激情,让你沉浸在绘画的乐趣中。二、主要技

vue+axios+el-progress(elementUI组件)实现下载进度条实时监听(小白简洁版)

一、实现效果二、实现方式方案:使用axios方法onDownloadProgress方法监听下载进度使用此方式的前提!!!请让后端在响应头中加上content-length,存放下载文件的总大小,如下图:三、代码1、进度条页面代码如下:<Spinfixv-if="spinVisible"><Icontype="ios-

天翎知识管理系统:强大的权限管理功能,保障知识安全

编者按:知识管理系统的权限管理功能,可以帮助企业实现对知识库的精细化管理,保证知识库的安全性和稳定性。本文将介绍天翎知识管理系统的权限管理体系,通过权限管理,控制用户的编辑和审核权限,从而保证知识内容的准确性和质量。知识管理系统权限管理的重要性保护知识安全:通过权限管理,可以控制哪些用户可以访问、修改甚至删除特定的知识

汽车电子AEC Q101车规认证FDD9507L-F085 P沟道MOS管

深力科带你了解关于汽车电子AECQ101车规认证?是一种针对分立半导体的可靠性测试认证程序,由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性、温度循环和湿度变化等方面的测试要求。AECQ101是汽车电子领域的一个产品认证标准,它

第一次课(反馈,未讲评)

目标服务和目标进程是两个概念,在计算机领域中有着不同的含义和用法。目标服务(TargetService)指的是在分布式系统或网络中提供特定功能或服务的软件组件或模块。它通常以独立的方式运行,通过接收请求并提供相应的功能来满足服务需求。例如,Web服务器、数据库服务器、文件服务器等都可以被视为目标服务。目标进程(Targ

代码随想录训练营 DP

代码随想录训练营DP583.两个字符串的删除操作🌸代码72.编辑距离🌸代码今天整理的东西都放在注释里了583.两个字符串的删除操作🌸给定两个单词word1和word2,返回使得word1和word2相同所需的最小步数。每步可以删除任意一个字符串中的一个字符。代码funcminDistance(w1string,w

【Linux】【网络】协议:(序列化和反序列化)json 的安装和简单使用

文章目录1.下载json2.基本使用value类型:万能类型Writer类型:序列化Reader类型:反序列化3.使用举例1.下载jsonyummakecachefastyum-yinstalljsoncpp-devel2.基本使用头文件:#include<jsoncpp/json/json.h>编译时需要加上-ljs

Qt中音频的使用

对于音频我们在使用的过程中一般是录制音频、播放音频。针对这两个需求介绍Qt中音频的使用。Qt中音频的录制步骤:1、获取系统中的音频设备。2、创建QAudioRecorder对象,指定使用的音频设备,通过QAudioRecorder的setAudioInput函数设置。3、设置音频的保存位置,通过QAudioRecord

【李沐深度学习笔记】按特定轴求和

课程地址和说明线性代数实现p4本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。这节就算之前内容的复习,后面以截图形式呈现这节课就简单说明以下,axis为0是行,1是列,为0是每一列按行往下加和,为1就是每一行按列往下加和(SUM)按某个维度求和就把某个维度去掉后求和如果保留维

Android tinker升级之路分析

前言目前app线上的tinker版本为1.9.14.19,在最近的几个版本技术需求中,我们希望对tinker尝试进行升级,并对内部封装的tinker的包装sdk进行升级。升级过程中的一些热修流程和记录如下。热修耗时时长分析测试中,所有测试热修基本均可生效,但是对补丁合成生效时间有要求。耗时具体体现在:tinker初始化

热文推荐