助力乡村振兴,我为农民伯伯开发了这款微信小程序

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 我和我的小伙伴使用微信小程序云开发打造了这款口袋农识,掘友可以通过微信扫一扫下面的二维码来体验一下。

前言

为什么开发这个项目,有两点原因:

  • 猪痞恶霸的家庭是务农的,在家帮忙的时候,父母遇到了农业病害的问题,不知道从哪下手,所以需要一个方便的工具去了解这些。
  • 借由2022年高校微信小程序开发大赛的主题:助力乡村振兴。

由此,我和我的小伙伴使用微信小程序云开发打造了这款口袋农识,掘友可以通过微信扫一扫下面的二维码来体验一下。

1.webp.jpg

下面我将从项目结构核心功能细节处理来带各位掘友全面了解这款小程序

项目结构

1.webp.jpg

项目总体结构如上图所示,分为首页农识百科农害识别个人中心四大模块构成

  • 首页:节气预报,天气预报,农业资讯与农业新闻
  • 农识百科:农识信息,农识搜索,农识收藏,农识内容
  • 农害识别:拍照识别,系统推荐
  • 个人中心:我的收藏,意见反馈,联系客服,关于我们

项目结构我这里就以图文的形式一笔带过,大家可以通过体验来进一步了解,我将主要篇幅放在下面核心功能细节处理,让读者可以了解主要功能的主要实现方案与一些交互上的主要的细节设计。

核心功能

下面我将为大家介绍小程序的核心功能及相关的实现方式核心功能实现包括三大点分别为:主题更迭农识收藏文本解析

主题更迭

主题更迭主要有两种实现方案,分别是CSS变量与字符串替换

CSS变量

CSS变量是比较常用的,但是在口袋农识中我并没有应用而是选择了第二种,因为当时设计的时候没有想到(还是技术太菜)

--theme-color:#FFFFFF;
复制代码

如上所示代码为CSS变量的设置方式,以--开头,属性即合法CSS合法属性值即可,可以通过全局变量的方式即globalData的形式定义CSS变量,再在相关的样式中调用即可,实例代码如下:

let spring_theme = `--theme-text-color:#FFFFFF;--theme-btn-color:#363b40;`
let autumn_theme = `--theme-text-color:#29ac55;--theme-btn-color:#ffffff;`
let themeObj = {
    spring-theme,
    autumn_theme
}
this.globalData.theme = themeObj
复制代码

使用模板字符串的形式定义多个主题变量,再将所有变量通过对象形式存储起来,存到全局变量内即可,其实还可以更加细节化,按钮文本表单等等,定义完整体的主题变量后就可以将其存储到全局中,这些步骤完成后,我们来看看如何进行变量绑定。

<view class="btn {{themeObj.spring_theme}}"></view>
复制代码

首先肯定需要将定义好的CSS变量值通过插值绑定给元素,而一般的全局页面使用绑定在小程序是在page中进行绑定的,因为其为小程序的最顶层。

.btn {
    color:var(--theme-btn-color)
}
复制代码

之后对绑定元素的相应class内通过var将变量解析出为CSS合法属性即可。

字符串替换

所谓字符串替换是利用插值来替换元素的class,比如:

<view class="left {{season}}-item"></view>
复制代码

设置全局变量,在onload生命通过global获取season字符串拼接,再在CSS中预设好每个季节的样式即可,当如果静态文件也需要发生变化,比如icon,背景图片,也可以通过这种方式来更改,值得注意的是在一些场景中可以搭配模板字符串使用。

<image src="../../images/personicon/{{season}}-accredit.png"></image>
复制代码

主题的更迭的实现方式就介绍到这里,如果有问题,可以在评论区留言,下面将介绍在农识收藏功能中的核心。

农识收藏

农识收藏的主要核心是用户操作数据的鉴权以及点击收藏防抖。

用户鉴权

微信云开发的鉴权方式很轻松,因为其独特的openid,使得用户在操作数据的时候就会将用户唯一标识符以_openid的形式存储起来,而在获取的时候也只需要通过调用云开发的api通过doc来获取该唯一标识符下的收藏数据。

防抖

在这里防抖的作用是避免用户连续点击收藏按钮,造成发生多次收藏请求,用户收藏数据会包含重复数据。我的思路有两种,一个是在请求中对重复相同请求进行判断并拦截,一个是通过函数来实现防抖,下面是我通过网上资料参考,在工具文件中定义的防抖函数。

const debounce = (fun,time) =>{
    console.log(time)
    return  () => {
        clearTimeout(TIMEOUT);
        var that = this;
        TIMEOUT = setTimeout(function(){
            fun.apply(that,arguments);
        }, time);
    }
}
复制代码

这种实现是比较暴力的,在有新的函数进入时,会清空旧的定时器并重新设定新的定时器。

util.debounce(this.addCollect,1000)()
复制代码

使用的化如上所示,引入util后调用封装的防抖函数并传入收藏函数与防抖时间作为参数。

文本解析

文本解析可以说是整个微信小程序最基础也是最重要的功能,因为其农识是通过文本的方式实现,所以我采用了已经不维护wxParse作为文本解析组件,项目地址:icindy/wxParse: wxParse-微信小程序富文本解析自定义组件,支持HTML及markdown解析 (github.com),在其仓库中的readme文件中有详细的使用说明,各位掘友也可以在我的项目中进行一个参考。

细节处理

我们通过对小程序增加一些细节来优化用户体验,主要为两点:首屏渲染卡片流

首屏渲染

首屏渲染主要是由骨架屏的使用来实现的,微信开发者工具自带了骨架屏生成工具,所以使用起来也很方便,一般是在页面组件同级目录下生成skeleton.wxmlskeleton.wxss文件,譬如主页文件目录:

.
├── home
|   └── home.js
|   └── home.wxml
|   └── home.wxss
|   └── home.json
|   └── home.skeleton.wxml
|   └── home.skeleton.wxss
└── ...
复制代码

之后就可以通过v-showv-if来控制骨架屏与真实元素的出现与消失,一般是通过v-show来控制真实内容,因为其要先进行一个内容的加载,再通过骨架屏的消失来为用户展现加载完的文本与图片,具体的使用方式,在微信开发者工具生成的文件中有详细步骤,又或者跳到本文的倒数第二个标题:相关文章,其云开发实战总结中也有相关介绍。

卡片流

卡片流指的是在农识百科中农识卡片的集合,会涉及到上拉加载与触底刷新问题。

上拉加载与触底刷新是优化卡片流的一种配套动作,用户想要刷新数据,下拉进行刷新并重新请求数据,而触底加载是为了避免集合元素即内容数量过多,造成渲染压力,使用触底加载,继续请求接下来的数据,具体实现可以参考我总结的:小程序触底加载与下拉刷新功能的设计与实现 - 掘金 (juejin.cn)

相关文章

我在开发小程序的过程中也总结了一些个人体会,掘友们可以作为一个参考。

开源地址

hogB/hoewo (github.com)大家可以送我个star,由相关问题可以在评论区留言!!!

写在最后

新时代IT青年必须扛起乡村振兴的大旗,如果掘友们有好的想法与创意,一定是要关于乡村振兴的!!!可以在评论区留言,在创意活动结束后,我将通过掘金安东尼大佬的抽奖算法对符合留言规则的掘友送出click抱枕一个(今天又拿到一个)

恭喜南方者。

1.webp.jpg

锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦。



相关文章
预约按摩小程序开发,为什么很多上门按摩平台根本招聘不到优秀技师?
上门按摩平台面临招不到优秀技师的问题,主要原因是平台众多,技师选择多样。为解决此问题,平台可引入技师等级制度,根据订单数量和好评率划分高、低等级技师。高等级技师可享受70%-90%的高提成及首页推荐,这不仅能激励技师的积极性,还能帮助平台筛选出优质技师,提升服务质量和口碑,形成良性循环。
|
26天前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
7天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
74 17
|
25天前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
20天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
2月前
|
人工智能 小程序 IDE
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
随着AI技术的发展,各大厂商推出的AI运动APP如“乐动力”、“天天跳绳”等,使云上运动会、线上健身等概念大热。本文将指导你如何利用“云智AI运动识别小程序插件”,在微信小程序中实现类似功能,包括工具搭建、服务启动及数据回传等步骤,助力开发者高效开发AI运动小程序。
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
2月前
|
人工智能 JSON 小程序
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
随着AI技术的发展,各大厂商推出的如“乐动力”、“天天跳绳”等AI运动APP,使得云上运动会、线上健身等概念风靡一时。本文将引导读者从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”,介绍人体姿态检测规则、规则编写语法、执行检测规则运算及姿态检测实战等内容,助力开发者轻松实现AI运动小程序的开发。
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
|
21天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。