MBTI职业性格测试小程序

前两天看了一个贴子写职业性格的,于是心血来潮也想测一测。在百度上一搜,找到一个测试网站,然后一道一道答题,答完93道题之后,让我付费,瞬间想骂人。

越想越气,然后就搜索职业性格测试试题,果然有好朋友分享到网上,于是我就灵机一动花了半天时间写了个微信小程序。

数据模型来源于网络,是个人微信账号开发的,免费的,大家感兴趣可以测测看看,不是商业用途哈,仅用于学习哈

index.wxml:

<!--index.wxml-->
<view class="container">
  <view class="usermotto" wx:if="{{nowindex==0}}">
    <view bindtap="showHelp" class="title"><text style="color:red">(免费)</text>MBTI职业性格测试 <icon class="icon-box-img" type="info" size="26"></icon></view>
    <view>迈尔斯-布里格斯类型指标</view>
    <view style="line-height: 40rpx;font-size: 26rpx;color:cornflowerblue">世界五百强中,有 80% 的企业,使用 MBTI 性格测试。它是全球著名、权威与实用的职业性格测试工具之一。</view>
    <view>共93题</view>
    <button class="bgbt" bindtap="doNext">开始</button>
    <view class="showlastresult" bindtap="showResult" wx:if="{{oldmbtiresult}}"  >查看上次测试结果</view>
  </view>
  <view wx:elif="{{nowindex<=93}}" >
     <view wx:if="nowinfo" class="testinfo">
     <view class="title">
       <text>{{nowindex}}.</text>
       <text>{{nowinfo.content}}</text>
     </view>
      <view class="{{nowinfo.checkinfo[0]?'ra rselect':'ra'}}" data-ide='0' bindtap="doClick">
        A:{{nowinfo.result[0]}}
      </view>
      <view class="{{nowinfo.checkinfo[1]?'ra rselect':'ra'}}"  data-ide='1'  bindtap="doClick">
        B:{{nowinfo.result[1]}}
      </view>
      <view >
        <view wx:if="{{debug}}" class="table">
      <view class="col">E</view>
      <view class="col">I</view>
      <view class="col">S</view>
      <view class="col">N</view>
      <view class="col">T</view>
      <view class="col">F</view>
      <view class="col">J</view>
      <view class="col">P</view>
     
        <view wx:for="{{nowinfo.score[0]}}"  wx:for-index= "mindex" class="col bg{{mindex}}">
        <text class="se" wx:if="{{item==1}}">○</text>
        <text class="se" wx:else></text>
        </view>
        <view wx:for="{{nowinfo.score[1]}}"  wx:for-index= "mindex" class="col bg{{mindex}}">
        <text class="se" wx:if="{{item==1}}">○</text>
        <text class="se" wx:else></text>
        </view>
      </view>
      </view>
     </view>
     <button type="primary" style="margin-top: 100rpx;font-size: 50rpx;" class="donext" bindtap="doNext" disabled="{{!(nowinfo.checkinfo[0]||nowinfo.checkinfo[1])}}"><text wx:if="nowindex<93">下一题</text><text wx:else>查看结果</text></button>
  </view>
  <view wx:else>
    <view wx:if="{{oldmbtiresult}}">
      <view class="resultbig">
      您的测试结果为:{{oldmbtiresult.mbti}}
      </view>
      <view class="table" wx:if="{{debug}}">
      <view class="col">E</view>
      <view class="col">I</view>
      <view class="col">S</view>
      <view class="col">N</view>
      <view class="col">T</view>
      <view class="col">F</view>
      <view class="col">J</view>
      <view class="col">P</view>
      <view wx:for="{{oldmbtiresult.mbtiscore}}" class="col" >
      <text class="seshow" >{{item}}</text>
      </view>
      </view>
    
      <view>
      <text class="result" decode="{{true}}">
      <text class="par" wx:for="{{mbtisource.resultlist[oldmbtiresult.mbtiindex].desc}}">
        <text class="title">{{item.title}}</text>
         {{item.content}}
      </text>
      </text>
      </view>
    </view>
    
  </view>
</view>

<view wx:if="{{oldmbtiresult&&nowindex>93}}" class="view-fix-bottom" >
      <view class="col2">
        <button class="btshare" open-type="share"  style="width: 90%;margin-right: 0;overflow: hidden;">分享</button>
      </view>
      <view class="col2" bindtap="doAgain">
        <button class="btagin"  style="width: 90%;margin-left:0;overflow: hidden;">再测一次</button>
      </view>
    </view>


    <modal id="helpInfo" hidden="{{ishideHelp}}" title="指导语"
     confirm-text="关闭"   cancle-text="取消"
     bindcancel="closeHelp"  bindconfirm="closeHelp" >
     <scroll-view style="width:100%;height:{{height-180}}px;margin:0;" scroll-x='false' scroll-y='true'>
     <view style="padding:0 30rpx;">
      <text class="result" decode="{{true}}">
        1、参加测试的人员请务必诚实、独立地回答问题,只有如此,才能得到有效的结果。\r\n 2、测试结果展示的是你的性格倾向,而不是你的知识、技能、经验。 \r\n3、MBTI提供的性格类型描述仅供测试者确定自己的性格类型之用,每一种性格特征都有其价值和优点,也有缺点和需要注意的地方。清楚地了解自己的性格优劣势,有利于更好地发挥自己的特长,而尽可能的在为人处事中避免自己性格中的劣势,更好地和他人相处,更好地作重要的决策。\r\n4、本测试分为四部分,共93题;需时约18分钟。所有题目没有对错之分,请根据自己的实际情况选择。\r\n只要你是认真、真实地填写了测试问卷,那么通常情况下你都能得到一个确实和你的性格相匹配的类型。\r\n5、本小程序免费使用,数据模型来源为互联网。本程序开发源于作者想做一次性格测试,结果网络上基本上都要收费,所以无奈之下自己开发一个。\r\n希望你能从中或多或少地获得一些有益的信息。
      </text>
     </view>
     </scroll-view>
     </modal>

index.js:

// index.js
// 获取应用实例
const app = getApp()
var jsonsource=require("../../source/jsonsource")

Page({
  data: {
    motto: 'Hello World',
    mbtisource:null,
    nowindex:0,
    debug:false,
    userreq:[],
    oldmbtiresult:null,
    nowinfo:null,
    height:600,
    ishideHelp:true
  },
  showHelp()
  {
 
      this.setData({
        ishideHelp:false
      })
    
   
  },
  closeHelp()
  {
  
    this.setData({
      ishideHelp:true
    })
  },
  onLoad() {
    this.initSource();
    var rt= wx.getStorageSync('oldmbtiresult');
    if(rt)
    {
      this.setData({
        oldmbtiresult:rt
      });
    }
    wx.getSystemInfo({
      success: (res) => {
        this.setData({
          height: (res.windowHeight - 20)
        })
      }
    })
  },
  onShareAppMessage() {
    var _this=this;
    var title="快来测试一下你的职业性格吧!";
    if(_this.data.oldmbtiresult)
    {
      title="我的职业性格是:【"+ _this.data.oldmbtiresult.mbti+"】,你也来测测吧!";
    }
    //console.log(title);
    return {
      title: title,
      path: '/pages/index/index', 
      imageUrl:"/source/share.png",
      success: function(res){
              // 转发成功之后的回调
              if(res.errMsg == 'shareAppMessage:ok'){
              }
            },
            fail: function(){
              // 转发失败之后的回调
              if(res.errMsg == 'shareAppMessage:fail cancel'){
                // 用户取消转发
              }else if(res.errMsg == 'shareAppMessage:fail'){
                // 转发失败,其中 detail message 为详细失败信息
              }
            }
    }
  },
  onShareTimeline()
  {
    var _this=this;
    var title="快来测试一下你的职业性格吧!";
    if(_this.data.oldmbtiresult)
    {
      title="我的职业性格是:【"+ _this.data.oldmbtiresult.mbti+"】,你也来测测吧!";
    }
    return {
      title: title,
      imageUrl:"/source/share.png",
    }
  },
  doAgain()
  {
    this.setData({
      nowindex:0
    }); 
  },
  showResult()
  {
    this.setData({
      nowindex:94
    }); 
  },
  initSource()
  {
    try
    {
      this.setData({
        mbtisource:jsonsource.mbtisource,
        nowindex:0
      }); 
    }
    catch(err)
    {
       console.log(err)
    }
  },
  doNext()
  {
    if(this.data.nowindex!=0&&this.data.nowindex<=93)
    {
      var userreq=this.data.userreq;
      if(this.data.nowinfo["checkinfo"][0])
      {
        userreq.push(this.data.nowinfo["score"][0])
      }
      else if(this.data.nowinfo["checkinfo"][1])
      {
        userreq.push(this.data.nowinfo["score"][1])
      }
    }

    if(this.data.nowindex<93)
    {
      var nowindex=(this.data.nowindex+1);
      var nowss=this.data.mbtisource.infolist[nowindex-1];
      var nowinfo=nowss;
      nowinfo["checkinfo"]=[false,false];
      this.setData({
        nowindex:nowindex,
        nowinfo:nowinfo
      });
    }
    else if(this.data.nowindex=93)
    {
      var nowindex=(this.data.nowindex+1);
      this.setData({
        nowindex:nowindex,
        nowinfo:null
      });
      
      var cscore=[0,0,0,0,0,0,0,0];
      var mbti=["E","I","S","N","T","F","J","P"];
      var use=this.data.userreq;
      for(var i=0;i<use.length;i++)
      {
        for(var j=0;j<cscore.length;j++)
        {
          cscore[j]+=use[i][j];
        }
      }
      var result="";
      for(var i=0;i<4;i++)
      {
        var a=i*2;
        var b=i*2+1;
        if(cscore[a]>cscore[b])
        {
          result+=mbti[a];
        }
        else
        {
          result+=mbti[b];
        }
      }

      var mbtiindex=0;
      for(var i=0;i<this.data.mbtisource.resultlist.length;i++)
      {
        if(this.data.mbtisource.resultlist[i].name==result)
        {
          mbtiindex=i;
          break;
        }
      }

      var userscore={
        mbtiscore:cscore,
        mbti:result,
        mbtiindex:mbtiindex
      };

      this.setData({
        oldmbtiresult:userscore
      });

      wx.setStorageSync('oldmbtiresult', userscore);
      //console.log(userscore);
      
    }

    //console.log(this.data.nowindex)
  },
  doClick(e)
  {
    var ide=e.currentTarget.dataset.ide;
     if(ide==0)
     {
       this.setData({
         "nowinfo.checkinfo":[true,false]
       })
     }
     else
     {
      this.setData({
        "nowinfo.checkinfo":[false,true]
      })
    }
   // console.log(this.data.nowinfo);
     
  }
  // getUserProfile(e) {
  //   // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
  //   wx.getUserProfile({
  //     desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  //     success: (res) => {
  //       console.log(res)
  //       this.setData({
  //         userInfo: res.userInfo,
  //         hasUserInfo: true
  //       })
  //     }
  //   })
  // },
  // getUserInfo(e) {
  //   // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
  //   console.log(e)
  //   this.setData({
  //     userInfo: e.detail.userInfo,
  //     hasUserInfo: true
  //   })
  // }
})

代码简单,希望对您有帮助!

声明:数据来源于网络,侵删!!!!

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值