继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

一周学会小程序-比赛计分器

慕村9548890
关注TA
已关注
手记 1297
粉丝 227
获赞 991

webp

最终效果图

前言:

为了方便使用,脱离App的限制,小程序版比赛计分器由此诞生。由于本人是新手,如有不对,请更正,欢迎在下方留言。iOS版比赛计分器

功能设计:

小回合计分
大比分计分
随时查看比赛记录
计时功能
一局比赛结束换位功能

实现功能:

小回合计分
大比分计分
计分时不息屏
随时查看比赛记录
摇一摇截屏(目前只能监测截屏事件)
可选比赛为普通比赛 标准比赛(标准比赛比普通比赛更严格,必须根据比赛规则结束比赛)

细节:

队名输入
分数上下区域点击、按钮都可增减比分
计分时不息屏
随机先手

待开发功能

计时功能
一局比赛结束换位功能

具体功能实现:

1.页面布局:css布局 基本使用display: flex; flex-direction: row/column;  position: absolute;等
2.数据存储:小程序本地存储功能setStorageSync(存,使用同步操作)、getStorage(取,使用异步操作)
3.模板使用(模板只有.wxml和.wxss两个文件,其他文件目前不生效,不是完整的封装,事件在引入的.js中写)
4.this指代
5.欢迎引导页

主要详细功能实现:

1,2与iOS版比赛计分器类似,这里不在详细说明
3.封装比分模板,与RBScoreView类似,封装分数和按钮操作

  • 3-1.分数模板封装 .wxml文件

<template name="scoreTemplate">
  <view class='scoreview'>
    <text class='scoretext'>{{score}}    </text>
    <view class='cover-view'>
    <text class='cover-up' hidden='{{false}}'  catchtap='addButtonClick' data-type='{{isLeft}}'></text>
    <text class='cover-down' hidden='{{false}}' bindtap='reduceButtonClick' data-text='{{score}}'  data-type='{{isLeft}}'></text>
    </view>
 
    <view class='scoreAddAndReduce'>
      <button class='add' bindtap='addButtonClick' data-text='{{score}}' data-type='{{isLeft}}'>+</button>
      <button class='reduce' bindtap='reduceButtonClick' data-text='{{score}}'  data-type='{{isLeft}}'>-</button>
    </view>
    <button class='reset' bindtap='resetButtonClick'  data-type='{{isLeft}}'>重置</button>
  </view></template>
  • 3-2.分数css布局 .wxss文件

.scoreview {  flex-direction: column;  display: flex;  text-align: center;  padding: 0 0 0 0;  width: 280rpx;
}.scoretext {  font-size: 100px;  background-color: black;  color: white;  height: 280rpx;  /* width: 100%;
  height: width; */
  text-align: center;  line-height: 280rpx;
}.cover-view {  display: flex;  flex-direction: column;  position: absolute;  width: 280rpx;  height: 280rpx;
}.cover-up {  height: 140rpx;
}.cover-down {  height: 140rpx;
}.scoreAddAndReduce {  flex-direction: row;  display: flex;  /* width: 300rpx; */
  height: 90rpx;  margin-top: 20rpx;
}.add {  background-color: black;  color: white;  padding: 0;  width: 130rpx;  height: 90rpx;  line-height: 90rpx;  border-radius: 0;  margin-left: 0rpx;  font-size: 30px;
}.reduce {  background-color: black;  color: white;  width: 130rpx;  height: 90rpx;  line-height: 90rpx;  font-size: 30px;  margin-left: 40rpx;  margin-right: 0rpx;  border-radius: 0;
}.reset {  background-color: black;  color: white;  margin-left: 0rpx;  margin-right: 0rpx;  border-radius: 0; /* 去除边框 */}/* 去除按钮边框 */.add::after {  border: none;
}.reduce::after {  border: none;
}.reset::after {  border: none;
}
  • 3-3.首页 home.wxml 引入模板组件文件

<import src="template/littlescore.wxml" />
  • 3-4.首页 home.wxss 引入模板布局文件

@import "template/littlescore.wxss";
  • 3-5.模板数据绑定,通过data-text和data-type传递文本和左右分数类型

<button class='reduce' bindtap='reduceButtonClick' data-text='{{score}}'  data-type='{{isLeft}}'>-</button>

  reduceButtonClick: function(event) {    // 通过获取组件绑定的变量累加
    var score = event.target.dataset.text;    var isLeft = event.target.dataset.type;    if (score > 0) {
      score--;      if (isLeft) {        this.setData({          leftScore: score
        });
      } else {        this.setData({          rightScore: score
        });
      }
    }
  },

4.this指代 此时定义that变量保存this,因为在success函数中,this指代的不是上文的this了。

var that = this;
    wx.showModal({      title: '比赛结束',      content: '比分:' + leftBigScore + ":" + rightBigScore + " " + winner + "胜",      success: function(res) {        if (res.confirm) {
          that.storagerecordListData();
          that.resetAllData();
          that.recordTap();
        }        else if (res.cancel) {

        }
      }
    });

5.欢迎引导页:通过本地存储一个变量,第一次进入小程序默认值为false,在app.js->onLaunch/onShow方法中判断是否是false,进入欢迎引导页,然后本地存入true,下次进来直接进入首页。这里使用wx.reLaunch方法,看到网上说使用过redirectTo好像不是每次都能成功。

// 引导欢迎页
    var isFirst = wx.getStorageSync("isFirstLaunch");    if (isFirst == false) {
      wx.setStorageSync("isFirstLaunch", true);      // redirectTo
      wx.reLaunch({        url: 'pages/index/index',
      });
    }    else {
      wx.reLaunch({        url: 'pages/home/home',
      });
    }

webp

注意:目前一个邮箱仅能申请一个小程序 一个身份证号只能注册5个小程序

总结:一周学会小程序,那是不可能的。同样的方法,有的设备页面适配却出现问题,只有转换思路,换一种方法实现,小程序布局之路还是很漫长的。


此处是华丽的分割线 新增比赛类型和摇先手功能-与iOS功能同步(比赛结果列表增加比赛类型)2018.9.10

1.比赛类型

可选比赛为普通比赛 标准比赛(标准比赛比普通比赛更严格,必须根据比赛规则结束比赛)
页面使用小程序radio-group组件,仿iOS的UISegmentControl控件。

home.wxml

  <view class='segment'>    <radio-group class="radio-group" bindchange="radioChange">
      <label class="radio" wx:for="{{items}}" wx:key="" class="{{gameType == item.value ? 'bc_green white': 'green'}}">
        <radio value="{{item.value}}" checked="{{item.checked}}" /> {{item.name}}      </label>
    </radio-group>
  </view>

home.wxss

.segment {  position: fixed;  right: 30rpx;  top: 30rpx;  height: 60rpx;
}.radio-group {  background-color:blue;  display: flex;  /* margin: 25px; */
  border: 1px solid white;  border-radius: 5px;  /* border-right: 0; */}.radio-group radio {  display: none;
}.green{  color: white;
}.bc_green{  background-color: white;
}.white {  color: black;
}/* label均匀分布,文字居中 */label {  font-size: 26rpx;  text-align: center;  padding: 3px 5px;  /* line-height: 50rpx;
  height: 50rpx; */
  flex: 1;  border-right: 1px solid white;
}label:last-child {  border-right: 0;
}
2.摇先手功能

乒乓球比赛看哪一方先发球,另一方可选择场地。使用js定时器:
js 定时器有以下两个方法:

  • setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。

  • setTimeout() :在指定的毫秒数后调用函数或计算表达式。
    通过查阅资料,setInterval()方法不太准缺,所以本文使用setTimeout()方法。

  initativeTap:function(event) {    // var isStart = currentTarget.dataset.isstart;
    if(this.data.isStart) {
      clearTimeout(timer);      this.setData({        isStart: false
      });
    }    else {      this.random();      this.setData({        isStart: true
      });
    }
  },  random:function() {    var that = this;
    timer = setTimeout(function () {
      that.random();
      that.setData({        firstTeam: that.data.randomArray[i]
      });
      i++;      // 防止多次使用计时器无限累加
      if(i >= 2) {
        i = 0;
      }      console.log(i);
    }, 100);
  },



作者:RiberWang
链接:https://www.jianshu.com/p/07c5870cab0a


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP