首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【云开发校园技术布道师】-校园跑跑跑

【云开发校园技术布道师】-校园跑跑跑

原创
作者头像
100001268369
修改于 2020-04-07 10:00:49
修改于 2020-04-07 10:00:49
2.5K00
代码可运行
举报
文章被收录于专栏:yangyang
运行总次数:0
代码可运行

前言

在看到题目时,脑子里空荡荡的,不知道做什么。在到第二天时有些着急,眼看离结束时间越来越近,心里越来越慌。在我焦虑的刷手机时,看到青春有你的宣传片,是她们在跑步,突然想起来我之前做过一个跑步打卡的小程序。那个项目是我17年中下旬写的,所以我也是一个元老级玩(被)家(玩)了。但是仔细一想,当时我是七天从零入门写的,别说js基础连html都没基础,但就是神奇的肝出来了,为了展示当时菜鸟水平(现在也菜)给大家献丑了:

大量的全局变量真舒服,不管在哪想调就调。。。
大量的全局变量真舒服,不管在哪想调就调。。。

其他的地方过于残忍就不展示了。当时因为啥也不会,但是要对参与活动的同学进行排名来发奖品,但是后端什么php,c++看了两天就劝退了,后来用我的民科思维用自定义分析解决了。。。有谁想到我拿这个当后端。。。(自定义分析详见:

https://developers.weixin.qq.com/miniprogram/analysis/custom/#_2-2-%E4%BA%8B%E4%BB%B6%E7%9A%84%E7%BC%96%E8%BE%91%E4%B8%8E%E5%8F%91%E5%B8%83),当时处理数据那叫一个头疼,把数据用excel到处一点点“分析”,现在用云开发岂不是美滋滋?

为什么要做这个小程序?

因为在学生会体育部,当时想举办一些活动,看到共青团团中央发出了“三走”的号召(走出宿舍、走下网络、走向操场),所以我们打算办一个运动打卡的活动。当时市面上有许多跑步记录的app,种类繁多,但是对于我们活动举办方来说不方便统计数据是其一,其二是需要下载app会劝退一部分同学,其三是不可以针对学校进行个性化定制,(用自己学校的东西就一个字亲切)所以我们当时打算做这么一个小程序。为什么要重构这个小程序呢?一是参加活动,被迫营业;二是重构自己的第一个项目回忆往事有种很特别的感觉,还可以在重构中锻炼自己,话不多说开始codeReview!(重写)

项目首页

项目首页
项目首页
代码语言:javascript
代码运行次数:0
运行
复制
.loading_box {
  position: absolute;
  top: 80%;
  z-index: 9;
  width: 100%;
  text-align: center;
}

.loading3 {
  width: 20rpx;
  height: 20rpx;
  background: #ffffff;
  border-radius: 50%;
  margin-left: 15rpx;
}

.loading3_1 {
  -webkit-animation: loading3 1s linear infinite alternate;
  animation: loading3 1s linear infinite alternate;
}

.loading3_2 {
  -webkit-animation: loading3 1s linear infinite alternate;
  animation: loading3 1s linear infinite alternate;
  animation-delay: 0.5s;
}

.loading3_3 {
  -webkit-animation: loading3 1s linear infinite alternate;
  animation: loading3 1s linear infinite alternate;
  animation-delay: 1s;
}

@-webkit-keyframes loading3 {
  0% {
    transform: scale(1);
  }

  100% {
    transform: scale(0);
  }
}

@keyframes loading3 {
  0% {
    transform: scale(1);
  }

  100% {
    transform: scale(0);
  }
}

这页没什么好说的,当时因为小程序很容易被清理后台所以要题型同学:“别忘记置顶小程序!还有别关屏”这样会避免小程序被清后台;还有一个作用是提前加载一些获取时开销较大的数据;其实最重要的还是会让小程序看一些。。。整体动画通过css3 animation动画实现,实话实说感觉做动画很有意思。。。

跑步页面

同学可在本页面进行跑步打卡。页面上半部分是通过canvas实现的一个环型进度条,当达到设定的每天打卡阈值时进度条走满。

中间是显示运动燃烧的卡路里值及时间,下方显示当前跑步的路径。

跑步开始前
跑步开始前
打卡成功后
打卡成功后
不知道为什么模拟器得polyline总抽风有时候画的出来有时候画不出来,所以以上手机的截图
不知道为什么模拟器得polyline总抽风有时候画的出来有时候画不出来,所以以上手机的截图

这里为了更加人性化在开始跑步、打卡成功后都会有语音提示,代码很简单就不上了。这里需要注意的是开始跑步这些按钮都设计得比较肥硕,因为这是一款运动打卡app,人在户外运动时操作的精准性会减低,所以按钮要设计明显,尺寸要稍微大一些。

燃烧热量值得计算其实很简单,大家看看是怎么算的(燃烧你的卡路里):

代码语言:javascript
代码运行次数:0
运行
复制
 that.setData({
        //longitude: res.longitude,
        //latitude: res.latitude,
        col: new Number(that.data.totalMeters * that.data.userInfo.weight).toFixed(2)
 })
 

程序的主要运行逻辑如下:

代码语言:javascript
代码运行次数:0
运行
复制
 function repeat() {
   that.getlocation()
   that.drawCircle(that.data.totalMeters)
   console.log(that.data.pointline)
   that.setData({
      timeShow: util.timeUpdate(++that.data.totalTime),
      polyline: [{
        points: that.data.pointline,
        color: "#1e90ff",
        width: 8
      }]
   })
 }

程序会每隔3s运行一次repeat函数,

  1. getlocation()故名思意就是获取当前位置,里面还通过两次读取到的经纬度对跑步的距离进行了计算,其实这里面还要多读取到的数据点进行滤波处理,但是目前写的还不完善所以都没用,这里简单说一下:在测试时发现在你原地不动时发现getlocation值乱飘,所以需要用加加速度计,当检测到变化不大时就不进行记录,当用户跑的时候在记录;还有一个策略是当检测到本次位移过大时,由于程序每隔三秒运行一次,取奥运冠军得百米冲刺速度约10m/s,所以如果单次位移到3s*10m/s=30m,那么这次数据是不可信得所以需要把这个数据清除,也避免了同学骑自行啥的造假(手动狗头)。
  2. drawCircle(that.data.totalMeters)是绘制进度条的函数,通过两个边长不同的圆弧叠加而成,里面的公里数也是canvas绘制
  3. that.setData(...)这个对中间得时间及地图路径进行了渲染,其中timeUpdate()是写的一个时间格式化函数,polyline[]是地图所需要绘制得路径参数

以上步骤不断循环,当跑步里程达到设计里程时系统提示打卡完成,用户可点击结束跑步提交本次数据,云函数通过读取传过来的openid值将本次得数据push到用户的motionRecord(运动数据)数组中。

代码语言:javascript
代码运行次数:0
运行
复制
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const db = cloud.database()
  const _ = db.command
  console.log(event.record,event.openid)
  return await db.collection('userList').where({
    _openid: event.openid
  }).update({
    data: {
      motionRecord: _.push({data:event.record})
    }
  }).then((res) => {
    console.log(res)
  })
}

个人界面

点击加入活动将进入用户报名界面
点击加入活动将进入用户报名界面

考虑到有同学可能会输错联系方式所以在云函数设计上选择了如果次openid不存在则add一条数据,若存在则update,以下是代码:

代码语言:javascript
代码运行次数:0
运行
复制
exports.main = async (event, context) => {
 const wxContext = cloud.getWXContext()
 console.log(wxContext)
 const db = cloud.database()
 const mydata = {
    name: event.name,
    contact: event.contact,
    schoolID: event.schoolId,
    weight: event.weight,
    avatarUrl: event.avatarUrl,
    nickName: event.nickName,
    _openid: wxContext.OPENID,
    motionRecord:[]
 }
 return new Promise((resolve, reject) => {
 db.collection('userList').where({
      _openid: wxContext.OPENID
 }).count().then((res) => {
    console.log(res)
    if (res.total > 0) {
    db.collection('userList').where({
        _openid: wxContext.OPENID
    }).update({
       data: mydata,
    }).then(() => {
       resolve(wxContext.OPENID)
    })
    } else {
       db.collection('userList').add({
       data: mydata,
       }).then(() => {
         resolve(wxContext.OPENID)
       })
    }
   })
 })
}

用户登录或者加入成功后将显示之前的运动记录,

页面下面的运动详情展示还有排名因为时间关系还没有做完,后面会继续完善。。。下面放一个之前做过的小程序,做出来后其实和这个类似(画饼充饥),只不过后面会加班级还有院系排名等(下面的页面是学生会的设计总监设计的,我只做了少部分修改)

好了就这么多,后续文章后续还会完善。。。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
你的心事我全知晓——心情日记小程序丨实战
1、通过wx.createInnerAudioContext()获取实例 ,安卓机上音乐能正常播放,IOS上不行,具体原因感兴趣的可以去深究一下;
腾讯云开发TCB
2019/08/14
7400
原生微信小程序+云开发,源码给你们多久能开流量主?(下)
文章链接:https://cloud.tencent.com/developer/article/2466737
一起重学前端
2024/11/20
1800
小程序云开发全套实战教程(最全)
在学习云开发的时候将自己的学习过程记录下来了,放在了网上,收获了一波好评,今天下午在办公室没有事情,也发现之前有人在博客里面评论,你这个教程还有一半哩,可能是csdn的自动搬运功能出来一点小问题,没有搬运成功吧,这里就手动复制粘贴成为一篇了,篇幅比较长,如果有不足或者不注意写错的地方,欢迎大家提出纠正哦。
王小婷
2019/01/28
16.3K2
【云+社区年度征文】基于云开发完成小程序用户注册登录
之前,如果我们想要开发一个小程序,运维人员需要考虑买什么样的服务器,匹配哪些资源,比如存储应用、数据库等,后端开发人员需要编写服务接口,前端人员需要编写页面,对接后端提供的接口,这个工作流程下来,需要至少一个月的时间。有了“小程序 · 云开发”以后,开发者不用考虑后端复杂的技术操作,一个前端开发者就可以轻松的完成从无到有、从开发到发布的过程。
青年码农
2020/11/25
4.5K14
【云+社区年度征文】基于云开发完成小程序用户注册登录
微信小程序云开发入门详细教程
通过以上清晰的对比,我们可以看出,如果小团队想要快速创建一个小程序的后台,用云开发是一个很好的选择。
bug开发工程师007
2024/11/13
4.4K3
教你用云开发打造一个双端自动发布的博客体系(下)
上期文章主要介绍了博客项目的背景、技术选型、开发框架和系统设计部分的内容,承接上期,下文主要介绍该小程序的登录方式配置、分享和订阅消息功能是如何实现的。 1 数据库 文章: sync_posts = [   {     _id: String,     createTime: String,     slug: String,     title: String,     tags: Array,     description: String,     cover: String, // ur
腾讯云开发TCB
2020/08/21
5240
微信小程序与云开发
Java、NodeJS、JavaScript、HTML5、CSS3、VueJs、ReactJs、前端工程化、前端架构
达达前端
2019/08/05
9.5K0
微信小程序与云开发
cocos creator 部署微信云开发
把刚刚授权好的用户信息通过微信云函数保存到微信云数据库中。所以这里需要一个数据库和一个云函数。
全栈程序员站长
2022/11/17
3.5K0
cocos creator 部署微信云开发
小程序云函的那些事
已经很长时间没写小程序了,也没怎么留意云开发小程序那部分的发展情况。但最近因为新开一个物联项目进行阶段性开发测试,所以就重新了解小程序和云开发,云开发虽然还是由以前的云数据库、云存储和云函数组成。但里面功能加强了很多,就云数据库里面的功能也加入了不少,例如联表(aggregate())、分页等都已经很成熟了。今天就记录一下云函数的那些事。。
谭广健
2020/03/06
7540
从头到尾撸个疫情期间针对学生信息报备的小程序(微信小程序+云开发实践
初学小程序,每天起床第一件事不是去看文档,而是打开班群接龙打卡信息,填写ex表(苦逼的大二狗每天群通知99+),所以萌生了写一款让学生报备信息的小程序。本来只是简单写了一个上报表单的程序,但是写完了之后又觉得好像缺了点什么,所以功能越写越多,项目不断重构,里面很多东西都是现学现用,陆陆续续写了10天左右,算是一滴都不剩了。。不对,是差不多写得没想法了,项目包含了一整套前后端的交互,由于很多数据前期和后期设计理念不一样,简称自己打自己脸,所以会有很多不完善的地方,希望大家轻喷。。。 ( ゜ェ゜ ) 废话不多说,现在主要讲一下该项目的设计思路和一些功能的实现思路。
问号就是我
2020/02/22
1.2K1
从头到尾撸个疫情期间针对学生信息报备的小程序(微信小程序+云开发实践
【小程序+云开发】实战:一天搭建小型论坛
笔者最近涉猎了小程序相关的知识,于是利用周末时间开发了一款类似于同事的小程序,深度体验了小程序云开发模式提供的云函数、数据库、存储三大能力。关于云开发,可参考文档:小程序·云开发。
达文西
2018/11/25
4.5K1
【今天吃什么】uniApp和微信小程序同款炫酷摇一摇来告诉你!
本篇文章是用UniApp开发的,但是由于调用的API只是被UniApp封装好的微信API,所以整个功能是可以完全使用微信小程序原生开发的。
猿来是前端
2022/12/17
1.5K0
【今天吃什么】uniApp和微信小程序同款炫酷摇一摇来告诉你!
几行代码解决云开发微信支付
新版二手书小程序的进程每天都在更新了,中午抽时间赶到了支付阶段,第一次使用云开发进行小程序支付,体验了下,真的方便。
许坏
2019/09/09
2.9K0
几行代码解决云开发微信支付
微信小程序--云开发支付闭环
云开发支付流程闭环 extends 微信小程序--使用云开发完成支付闭环 在上述文章中,我们对支付结果的处理更多依赖于小程序端的操作 订单号存储在小程序端 支付结果采用小程序端定时触发器轮询
Kindear
2021/06/10
4.4K0
微信小程序--云开发支付闭环
为了考PMP,我做了一个刷题小程序
1.我是一名软件工程师,技术出身,担任开发组长,对项目管理不是很熟,所以决定系统学习下项目管理。
悟空聊架构
2019/07/01
2.9K3
为了考PMP,我做了一个刷题小程序
小程序开发技巧总结(三)-- 云开发时效数据刷新和存储 (access_token等)
小程序中经常有需要进行OCR识别,或者使用外部api例如百度AI识别等接口,请求调用这些接口需要令牌,即一些具有时效性的数据。本文以小程序云开发使用百度API接口为例,介绍access_token定时刷新和请求机制。
Kindear
2020/03/19
1.6K0
小程序开发技巧总结(三)-- 云开发时效数据刷新和存储 (access_token等)
实战 | 用云开发从0到1实现一个校园社交小程序
https://cloud.tencent.com/document/product/876/68589
腾讯云开发TCB
2022/02/17
1.6K0
实战 | 用云开发从0到1实现一个校园社交小程序
小程序云开发常用语句宝库
查询语句,返回的是 res.data[] 数组 调用云函数返回的是res.result get 数据获取返回的是 res.data{} 对象 1.调用云函数 this.DB = wx.cloud.database() wx.cloud.init({ env: 'mm-4t7rg' }) wx.cloud.callFunction({ name: "login", data: {}, success(res) { console.log('个人信息-------------',res.
IT工作者
2022/02/16
3700
基于微信小程序云开发(校园许愿墙app)妄想替代学校的表白墙
随着移动端的不断发展,人们大部分的办公及生活应用都开始趋向于移动端。然而在2017年“微信之父”张小龙带领团队,开发了一款叫做微信小程序的东西,它的出现打破了人们认识移动端的隔膜,由以前的需要先下载app然后在开始工作的老式模式,逐渐的趋向于小程序app(无需下载)的形式。
淼学派对
2022/11/20
1.7K0
基于微信小程序云开发(校园许愿墙app)妄想替代学校的表白墙
【小程序云开发】云函数路由的高效配置
在小程序开发工具中,启动云开发默认模板,提供的云函数办法是一个请求对应一个云函数,比如说,我要获取用户登录数据,就添加一个login函数,然后前端就请求这个login获取,如果现在我要通过云函数删除我的使用用户,是不是就得重新再建一个函数如delete,然后这个delete就用于处理前端提交的用户删除任务,如果到时候任务多了,不就需要创建很多个云函数了吗?麻烦,所以我们想办法一个函数处理多个任务,这就需要使用云函数路由了。
许坏
2019/07/14
1.7K0
推荐阅读
相关推荐
你的心事我全知晓——心情日记小程序丨实战
更多 >
目录
  • 前言
  • 为什么要做这个小程序?
  • 项目首页
  • 跑步页面
  • 个人界面
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档