小程序仿学习强国填空题

效果图如下:
在这里插入图片描述

概述:

和后台人员商议好题目中答案的代表符号,我这边是根据_分割,答案有多少字数就写几个_。
例如:
题目:新时代政法队伍“五个过硬”:__过硬、__过硬、责任过硬、纪律过硬、作风过硬。
答案:政治,业务

下面上代码

<!--index.wxml-->
<view  wx:for="{{subject}}" wx:if="{{active_index==index}}" wx:key="index">
  <view class="section">
    <view class="top_title">
      <view class="top_title_left">
        <view wx:if="{{item.type==3}}">填空</view>
      </view>
      <view class="top_title_right"><text>{{active_index+1}}</text>/{{subject.length}}</view>
    </view>
    <!-- 题目 -->
    <view class="fill_box" wx:if="{{item.type==3}}"> 
      <input bindinput="inputfill"  maxlength="{{maxlength}}" disabled="{{isDisabled}}" focus="{{is_focus}}" ></input> 
      <block wx:for="{{item.title}}" wx:for-item='title' wx:for-index='title_inx' wx:key="title_inx">
          {{title}}
          <view  
            wx:if="{{title_inx!=item.title.length-1}}"
            class="{{color_fill==title_inx?'active_fill':''}}" 
            style="color:{{is_parsing?'#FF2D2D':''}};border:{{is_parsing?'1rpx solid #EFC1AD;':''}}" 
            data-length="{{item.title.length}}"
            bindtap="changFill">
              {{fill_arr[title_inx]}}
          </view>
      </block>  
    </view>
  </view>

  <!-- 解析 -->
  <view wx:if="{{is_parsing}}" class="section">
    <view class="top_title">
      <view class="top_title_left">答案解析</view>
    </view>
    <view class="parsing">
      <view>
        正确答案:<text wx:for="{{item.answer}}" wx:for-item='answerItem' wx:for-index='answerIndex' wx:key="answerIndex">{{answerItem}} </text>
      </view>
      <view class="parsing_text">{{item.analysis}}</view>
    </view>
  </view>
</view>

<view  class="btn_box" bindtap="{{is_parsing==false?'submit':'next'}}" >
  <text wx:if="{{active_index==subject.length-1&&is_parsing}}">完成</text>
  <text wx:else>{{is_parsing==false?'确定':'下一题'}}</text> 
</view>

/* index.wxss */

page{
  width:100%;
  height: 100%;
  background: #E8E8E8;
  padding:20rpx;
  box-sizing: border-box;
}
.btn_box{
  height: 90rpx;
  margin: 50rpx auto;
  margin-top: 80rpx;
  text-align: center;
  color: #fff;
  line-height: 90rpx;
  background: #DF2A2A;
  border-radius: 10rpx;
}

/* 填空 */
.section{
  box-shadow:0px 3px 6px rgba(0,0,0,0.08);
  border-radius: 16rpx;
  background: #fff;
  position: relative;
  margin-top: 50rpx;
  padding: 20rpx 40rpx;
  box-sizing: border-box;
  font-size: 32rpx;
}
.fill_box,.parsing{
  padding: 20rpx 0;
}
.fill_box view{
  background: #f4f4f4;
  width: 50rpx;
  display: inline-block;
  vertical-align: middle;
  text-align: center;
  height: 50rpx;  
  margin-right: 15rpx;
}
.fill_box input{
  position: fixed;
  left: -9999rpx;
  top:0rpx;
}
.active_fill{
  border: 1rpx solid rgb(185, 121, 3);
  height: 48rpx!important;
  width:48rpx!important;
}
.top_title_right{
  font-weight: bold;
}
.top_title_right text{
  font-size: 60rpx;
}
.top_title{
  border-bottom: 1rpx solid #eee;
  height: 90rpx;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.top_title_left{
  border-left: 7rpx solid #DF2A2A;
  padding-left: 17rpx;
  font-size: 34rpx;
  display: flex;
  align-items: center;
  font-weight: bold;
}
.parsing_text{
  margin-top: 30rpx;
  font-weight: normal;
}
// index.js
Page({
  data: {
    active_index:0,
    isDisabled:false, 
    is_parsing:false, //是否显示解析
    fill_arr:[],//填空答案
    formData:[],  //提交的所有答案
    is_focus:false, //是否弹出键盘
    maxlength:'',  //答案输入框最大字数
    color_fill:null, // 答案文本框颜色
    subject:[
      { 
        analysis:"政治过硬、业务过硬、责任过硬、纪律过硬、作风过硬。",
        answer:["政","治","业","务"],
        id: 1,
        title:"新时代政法队伍“五个过硬”:__过硬、__过硬、责任过硬、纪律过硬、作风过硬。",
        type: 3
      },
      { 
        analysis:"政法委员",
        answer:["政","法","委","员"],
        id: 2,
        title:"《条例》规定乡镇(街道)党组织应配备____",
        type: 3
      }
    ],
  },
  onLoad: function (options) {
    let subject=this.data.subject
    subject.forEach(item=>{
        let title=item.title
        let titleArr=title.split('_')
        item.title=titleArr
    })
    this.setData({
      subject:subject
    })
  },
  // 填空答案
  inputfill(e){
    let val=e.detail.value
    let data=val.split("")
    this.setData({
      fill_arr:data,
      color_fill:data.length
    })
  },
  //点击填写
  changFill(e){
    let length=e.currentTarget.dataset.length
    this.setData({
      is_focus:true,
      maxlength:length-1
    })
    if(this.data.fill_arr==''){
      this.setData({
        color_fill:0
      })
    }
  },
  submit(){
    let active_index=this.data.active_index
    let subject=this.data.subject
    let fill_arr=this.data.fill_arr
    let formData=this.data.formData
    let type=subject[active_index].type
    if(fill_arr==''&&type==3){
      wx.showToast({
        title: '请填写答案',
        icon:"none"
      })
      return
    }
    formData.push({id:subject[active_index].id,content:fill_arr})
    console.log(formData)
    this.setData({
      formData:formData
    })
    let all= JSON.stringify(subject[active_index].answer)==JSON.stringify(fill_arr)
    if(all){

     if(active_index==subject.length-1){
       wx.showToast({
         title: '已完成所有题目',
       })
       console.log(this.data.formData)
       return
     }  
     active_index++
     this.setData({
       fill_arr:[],
       color_fill:null,
       active_index:active_index,
     })
    }else{
     this.setData({
       is_parsing:true,
       isDisabled:true
     })
    }
  },
  //下一题
  next(){
    let active_index=this.data.active_index
    let subject=this.data.subject
    if(active_index==subject.length-1){
      wx.showToast({
        title: '已完成所有题目',
      })
      console.log(this.data.formData)
      return
    }else{
      active_index++
      this.setData({
        fill_arr:[],
        color_fill:null,
        active_index:active_index,
        is_parsing:false,
        isDisabled:false
      })
    }
  },
})

欢迎交流讨论,本文为原创,转载请注明出处。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值