微信小程序之评分页面 微信小程序在哪评分

   2023-02-09 学习力0
核心提示:首先给大家看看做好的效果图: 一、接下来我们说一下评分这个功能:实际上就是一个简单的js,首先我们遍历出小星星,此时默认给的五星好评,在给他们一个点击事件,当点击时,我们获取到当前点击的是第几颗;代码如下:var index = e.currentTarget.dataset.

首先给大家看看做好的效果图:

微信小程序之评分页面

 

一、接下来我们说一下评分这个功能:

实际上就是一个简单的js,首先我们遍历出小星星,此时默认给的五星好评,在给他们一个点击事件,当点击时,我们获取到当前点击的是第几颗;代码如下:

var index = e.currentTarget.dataset.index; // 获取当前点击的是第几颗星星

接下来我们暂存星星的数组,获取星星数组的长度,代码如下:

var tempUserStars = this.data.userStars; // 暂存星星数组
var len = tempUserStars.length; // 获取星星数组的长度

下面就是最核心的地方了,判断显示的红心和分数:

1、循环星星数组的长度;

2、如果当前选中星星的index大于等于星星数组的长度,那么就是满分,让其星星数组的图片为红心,分数加1;

3、如果当前选中星星的index小于星星数组的长度,那么星星数组的图片为空心,给其重新赋值就可以了;

 

二、接下来是标签的功能:

每一个标签都是一个lable,在lable里做一个三目运算就可以,首先给一个false,当点击每一个lable时,让其变为true,类名变为所设置的颜色就OK了。

 

三、下面我们说说上传图片的功能:

图片上传的功能与我们的input里的上传功能相似,但是小程序给我们提供了一个便捷的方法------wx.chooseImage

给加号的图片一个点击事件,在事件里我们就可以用到这个方法了,那么它有哪些参数呢?小编给大家罗列出来:

count: 5 - pics.length, // 最多可以选择的图片张数,默认9
sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有

下面有一个成功的回调函数,成功后把成功的图片定义一个变量放到data定义好的变量中,在this.setData中更新添加的图片就可以了,代码如下:
success: function (res) {
  var imgsrc = res.tempFilePaths;
  pics = pics.concat(imgsrc);
  console.log(pics);
  // console.log(imgsrc);
  that.setData({
    pics: pics,
    // console.log(pics),
  });
}
 
四、最后我们说说评论功能:
我们一般会限制评论文字的长度,首先我们获取输入框的内容,用parseInt获取文字长度,如果内容长度超出我们设定的长度,直接return,在this.setData中更新只显示的固定长度的文字,代码如下:
inputs: function (e) {
  // 获取输入框的内容
  var value = e.detail.value;
  // 获取输入框内容的长度
  var len = parseInt(value.length);
  //最多字数限制
  if (len > this.data.max)
    return;
  // 当输入框内容的长度大于最大长度限制(max)时,终止setData()的执行
  this.setData({
    currentWordNumber: len //当前字数
  });
}
 
最后给大家把完整代码写出:
HTML:
 1 <!--服务评价-->
 2 <view class="service">
 3   <!--评分-->
 4   <view class='score'>
 5     <view class='left'>
 6       评分
 7     </view>
 8     <view class='right'>
 9        <view bindtap="starTap" data-index="{{index}}"  class="star" wx:for="{{userStars}}" wx:key="index">
10         <image src="{{item}}"></image>
11       </view>
12       <text class='rtxt'>{{wjxScore}}.0分</text>
13     </view>
14   </view>
15   <!--内容-->
16   <view class='content'>
17     <view class='left'>
18       内容
19     </view>
20     <view class='right'>
21       <text bindtap='label' class="{{attitude===true ? 'labelColor':''}}" data-index="{{attitude}}">小清新</text>
22       <text bindtap='label1' class="{{time===false? 'labelColor':''}}" data-index="{{time}}">文采好</text>
23       <text bindtap='label2' class="{{efficiency===false?'labelColor':''}}" data-index="{{efficiency}}">甜甜的</text>
24       <text bindtap='label3' class="{{environment===false?'labelColor':''}}" data-index="{{environment}}">值得收藏</text>
25       <text bindtap='label4' class="{{professional===false?'labelColor':''}}" data-index="{{professional}}">很文艺</text> 
26     </view>
27   </view>
28   <!--图片-->
29   <view class='picture'>
30     <view class='left'>
31       图片
32     </view>
33     <view class='right'>
34        <view class="parcel" wx:for="{{pics}}" wx:key="{{index}}">
35        <image src="{{pics[index]}}" class="According" data-index="{{index}}" mode="aspectFill" bindtap="previewImg"></image>
36        </view>
37       <image src='../img/add.png' class='add' bindtap='choose'></image>
38     </view>
39   </view>
40 </view>
41 <!--textarea-->
42 <view class="conts">
43     <textarea class="areas" placeholder='更多评价请写在这里(最多300字)' minlength="{{min}}" maxlength="{{max}}" bindinput="inputs"> 
44         <!-- <text class="currentWordNumber">{{currentWordNumber|0}}/{{max}}</text> -->
45     </textarea>
46 </view>
47 <!--提交评价-->
48 <button class='btn' bindtap='handleBtn'>提交评价</button>

 

css:

  1 page {
  2   width: 100%;
  3   height: 100%;
  4   background: #f0f0f0;
  5 }
  6 .service {
  7   width: 100%;
  8   overflow: hidden;
  9   box-sizing: border-box;
 10   padding: 0 20rpx;
 11   background: #fff;
 12 }
 13 .score {
 14   width: 100%;
 15   height: 100rpx;
 16   border-bottom: 1px solid #ccc;
 17 }
 18 .star {
 19   float: left;
 20   width: 54rpx;
 21   height: 100rpx;
 22   text-align: center;
 23   line-height: 100rpx;
 24 }
 25 .star image{
 26   width: 40rpx;
 27   height: 40rpx;
 28   margin-top: 30rpx;
 29 }
 30 .score .left {
 31   width: 100rpx;
 32   line-height: 100rpx;
 33   font-size: 30rpx;
 34   float: left;
 35 }
 36 .score .right {
 37   width: 610rpx;
 38   font-size: 30rpx;
 39   float: left;
 40   color: #888;
 41 }
 42 
 43 .score .right .rtxt {
 44   display: inline-block;
 45   height: 100rpx;
 46   line-height: 100rpx;
 47   margin-left: 15rpx;
 48   color: #c00;
 49   font-weight: bold;
 50 }
 51 .labelColor {
 52   color: #c00;
 53   border: 1px solid #c00 !important;
 54 }
 55 .content {
 56   width: 100%;
 57   overflow: hidden;
 58   border-bottom:1px solid #ccc;
 59   padding:0 0 26rpx 0;
 60   box-sizing: border-box;
 61 } 
 62 .content .left {
 63   width: 100rpx;
 64   font-size: 30rpx;
 65   float: left;
 66   padding-top: 20rpx;
 67 }
 68 .content .right {
 69   width: 610rpx;
 70   font-size: 24rpx;
 71   float: left;
 72   color: #888;
 73 }
 74 .content .right text {
 75   font-size: 24rpx;
 76   padding: 13rpx 24rpx;
 77   float: left;
 78   border: 1px solid #888;
 79   border-radius: 10rpx;
 80   margin-right: 34rpx;
 81   margin-top: 20rpx;
 82 }
 83 .picture {
 84   width: 100%;
 85   overflow: hidden;
 86   background: #fff;
 87   border-bottom: 1px solid #ccc;
 88 }
 89 .picture .left {
 90   width: 100rpx;
 91   font-size: 30rpx;
 92   float: left;
 93   padding-top: 20rpx;
 94 }
 95 .picture .right {
 96   width: 610rpx;
 97   font-size: 24rpx;
 98   float: left;
 99   color: #888;
100   box-sizing: border-box;
101   padding-top:36rpx; 
102 }
103 .picture .right .add {
104   width: 120rpx;
105   height: 120rpx;
106   margin-right: 10rpx;
107 }
108 .According{
109   width:120rpx;
110   height:120rpx;
111   float:left;
112   margin-right:10rpx;
113   margin-bottom: 10rpx;
114 }
115 .parcel{
116  width:120rpx;
117   height:120rpx;
118   float:left;
119   margin-right:10rpx;
120    margin-bottom: 10rpx;
121   position: relative;
122 }
123 .deleteimg{
124   width:30rpx;
125   height:30rpx;
126   position: absolute;
127   right:0;
128   top:0;
129   z-index: 2;
130 }
131 .conts{
132   width: 100%;
133   height: auto;
134   background: #fff;
135 }
136 textarea {
137   width: 687rpx;
138 }
139 .areas{
140   height:315rpx;
141   font-size: 30rpx;
142   padding-top: 30rpx;
143   margin: 0 auto;
144   overflow: hidden;   
145   position: relative; 
146 }
147 .currentWordNumber{
148   font-size: 28rpx;
149   position: absolute;
150   left: 0%;
151   bottom: 0rpx;
152   color: #c00;
153 }
154 .hint{
155    font-size: 28rpx;
156    position: absolute;
157    top: 120rpx;
158    left: 30rpx;
159    color: #FF6600;
160 }
161 .btn {
162   width: 600rpx;
163   height: 80rpx;
164   line-height: 80rpx;
165   font-size: 30rpx;
166   color: #fff;
167   background: #c00;
168   position: fixed;
169   left:75rpx;
170   bottom: 37rpx;
171 } 
172 button:after {
173   border: 0;
174 }

 

js:

  1 const app = getApp();
  2 Page({
  3   data: {
  4     staticImg: app.globalData.staticImg,
  5     current: 0,
  6     attitude: true,
  7     time: true,
  8     efficiency: true,
  9     environment: true,
 10     professional: true,
 11     code:1,
 12     code1:2,
 13     userStars: [
 14       "../img/sx.png",
 15       "../img/sx.png",
 16       "../img/sx.png",
 17       "../img/sx.png",
 18       "../img/sx.png",
 19     ],
 20     wjxScore: 5,
 21     // textarea
 22     min: 5,//最少字数
 23     max: 300, //最多字数 (根据自己需求改变) 
 24     pics: [],
 25   },
 26   // 星星点击事件
 27   starTap: function (e) {
 28     var that = this;
 29     var index = e.currentTarget.dataset.index; // 获取当前点击的是第几颗星星
 30     var tempUserStars = this.data.userStars; // 暂存星星数组
 31     var len = tempUserStars.length; // 获取星星数组的长度
 32     for (var i = 0; i < len; i++) {
 33       if (i <= index) { // 小于等于index的是满心
 34         tempUserStars[i] = "../img/sx.png";
 35         that.setData({
 36           wjxScore: i + 1,
 37         })
 38       } else { // 其他是空心
 39         tempUserStars[i] = "../img/kx.png"
 40       }
 41     }
 42     // 重新赋值就可以显示了
 43     that.setData({
 44       userStars: tempUserStars
 45     })
 46   },
 47   // 标签
 48   label: function (e) {
 49     console.log(e)
 50     var that = this;
 51     that.setData({
 52       attitude: !e.currentTarget.dataset.index
 53     })
 54   },
 55   label1: function (e) {
 56     console.log(e)
 57     var that = this;
 58     that.setData({
 59       time: !e.currentTarget.dataset.index
 60     })
 61   },
 62   label2: function (e) {
 63     console.log(e)
 64     var that = this;
 65     that.setData({
 66       efficiency: !e.currentTarget.dataset.index
 67     })
 68   },
 69   label3: function (e) {
 70     console.log(e)
 71     var that = this;
 72     that.setData({
 73       environment: !e.currentTarget.dataset.index
 74     })
 75   },
 76   label4: function (e) {
 77     console.log(e)
 78     var that = this;
 79     that.setData({
 80       professional: !e.currentTarget.dataset.index
 81     })
 82   },
 83   // 留言
 84   //字数限制  
 85   inputs: function (e) {
 86     // 获取输入框的内容
 87     var value = e.detail.value;
 88     // 获取输入框内容的长度
 89     var len = parseInt(value.length);
 90     //最多字数限制
 91     if (len > this.data.max) 
 92     return;
 93     // 当输入框内容的长度大于最大长度限制(max)时,终止setData()的执行
 94     this.setData({
 95       currentWordNumber: len //当前字数  
 96     });
 97   },
 98   // 图片
 99   choose: function (e) {//这里是选取图片的方法
100     var that = this;
101     var pics = that.data.pics;
102     wx.chooseImage({
103       count: 5 - pics.length, // 最多可以选择的图片张数,默认9
104       sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
105       sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
106       success: function (res) {
107         var imgsrc = res.tempFilePaths;
108         pics = pics.concat(imgsrc);
109         console.log(pics);
110         // console.log(imgsrc);
111         that.setData({
112           pics: pics,
113           // console.log(pics),
114         });
115       },
116       fail: function () {
117         // fail
118       },
119       complete: function () {
120         // complete
121       }
122     })
123 
124   },
125   uploadimg: function () {//这里触发图片上传的方法
126     var pics = this.data.pics;
127     console.log(pics);
128     app.uploadimg({
129       url: 'https://........',//这里是你图片上传的接口
130       path: pics//这里是选取的图片的地址数组
131     });
132   },
133   onLoad: function (options) {
134 
135   },
136   // 删除图片
137   deleteImg: function (e) {
138     var pics = this.data.pics;
139     var index = e.currentTarget.dataset.index;
140     pics.splice(index, 1);
141     this.setData({
142       pics: pics
143     });
144   },
145   // 预览图片
146   previewImg: function (e) {
147     //获取当前图片的下标
148     var index = e.currentTarget.dataset.index;
149     //所有图片
150     var pics = this.data.pics;
151     wx.previewImage({
152       //当前显示图片
153       current: pics[index],
154       //所有图片
155       urls: pics
156     })
157   },
158   handleBtn(){
159     wx:if(this.data.code==1){
160       wx.showToast({
161         title: '评价成功',
162         icon: 'succes',
163         duration: 1500,
164         mask: true,
165         success:function(){
166           setTimeout(function(){
167             wx.reLaunch({
168               url: '../index/index'
169             })
170           },1500)
171         }
172       });
173     } else if (this.data.code1 == 2){
174       console.log("111")
175       wx.showToast({
176         title: '评价失败',
177         image: '../img/fail.png',
178         duration: 1500,
179         mask: true
180       })
181     }
182   }
183 })

 

这就是小编做的一个评论页面,如果有什么瑕疵,请大家在评论给我指出,谢谢大家!!!!
 


 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 小程序上传wx.uploadFile - 小程序请假-请求
    小程序上传wx.uploadFile - 小程序请假-请求
    小程序上传wx.uploadFileUploadTask wx.uploadFile(Object object)将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求,其中 content-type 为 multipart/form-data。使用前请注意阅读相关说明。num=1;当num==3时,设置按钮隐藏直接上代码:view class='
    03-08
  • 微信小程序中overflow:scroll失效的问题 微信小程序overflow设置滚动
    微信小程序中overflow:scroll失效的问题 微信小
    .common-pop-table {padding: 0 30rpx;overflow: scroll;max-height: 70%;}研究后发现,要实际的设置对应的那个维度的高度,wcss改成.common-pop-table {padding: 0 30rpx;overflow: scroll;max-height: 400px;}就恢复正常了
    03-08
  • 小程序 AI/AR 能力
    一、关于 VisionKit1、定义VisionKit 为小程序提供了开发 AR 功能的能力,包含了 AR 在内的视觉算法。2、版本提供了 V1 和 V2 两个版本,区别如下:V1平面接口,适用于用户在平面场景下,例如桌面,地面,泛平面场景,放置虚拟物体,不提供真实世界距离。用户
    03-08
  • Python小程序——快排算法 快排 python
    1 def Partition(list,p,q): 2 #这里是用来分块的算法。 3 x = list[p] 4 i = p 5 for j in range(p+1,q+1): #注意range是顾前不顾后的,所以后面的区间值要大一位 6 if list[j]x: 7 i+=1 8 list[i],list[j] = list[j],list[i] 9 10 list[p], list[i] = list[
    02-09
  • 总结一些 egret项目接小程序时 遇到的问题及解决方法
    总结一些 egret项目接小程序时 遇到的问题及解
    1,https://blog.csdn.net/u013052238/article/details/81456908  这个地址的一些问题 是一部分,其中 第6条,当在wxgame.ts中仿照已有的 暴露库给window的方法写完之后,仍会报错,本人遇到的是 : jszip is not defined :  也尝试过其他前辈分享的解决方
    02-09
  • c++第一个小程序 第一个小程序是什么
     #include iostreamusing namespace std;int main(){const int SIZE=50;//定义大小。char name[SIZE]; cout"please input you name!\n"; //提示cinname;//输入cout"hello world:"nameendl; //输出return 0;}   #include iostreamusing namespace std;int m
    02-09
  • 微信小程序 错误记录
    1、报错this.getUserInfo(this.setData) is not a function;at pages/index/index onShow function;at api request success callback functionTypeError: this.getUserInfo is not a function在回调结果里调用这个页面的函数 this.fun() 或者 this.setData 时
    02-09
  • 【小程序】添加tabBar后navigateTo失效
    某页面.js//事件处理函数bindViewTap() {wx.navigateTo({url: '../logs/logs',})}, app.json"tabBar": {"backgroundColor": "black","color":"white","list": [{"pagePath": "pages/index/inde
    02-09
  • 微信小程序npm引入vant-weapp库的方法
    微信小程序npm引入vant-weapp库的方法
    1、终端打开小程序所在目录  2、npm init初始化,初始化完成之后,小程序项目中就会出现package.json文件,说明已经初始化成功 3、npm install --production 安装生产环境,不要npm install都给装上,以免小程序包过大  4、安装vant :npm i vant-weapp
    02-09
  • 小程序组件之间的通信 小程序子父子组件通信
    前言:其实之前就想写这个的,因为我觉得这么模块化的框架,组件之间通信是非常重要的,也是最经常用到的一块儿,只是之前在项目里一直没用到跨组件通信,现在用到了,也会用了,就一起写出来得了 :) 一、父、子组件之间的通信注:首先我们先将子组件在父组
    02-09
点击排行