「轻算账」小程序实践笔记

这篇文章主要记录我做小程序「轻算账」过程中遇到的一些问题和解决方案,就当是做个总结,也希望其中有能够帮助到他人的信息。

小程序码:轻算账

需求

勤俭节约(贫穷)如我,经常会和他人一起拼单点外卖或者购物,然而由于大家购买的商品价值不同,用上了各种优惠券或者参与满减活动之后,钱就不好算了。
举个例子:同事有一张满 100 减 50 的购书优惠券,然而她想买的书才达到 80 元,这时候她问你有没有想买的书,你挑了一本 20 元的书,结账后你们一共花了 50 元,这个时候你需要给同事多少钱?最合理的方式当然是按照你们购买的商品价值 4:1(80:20) 平分那张优惠券,也就是说你可以优惠 50*(1/5)=10 元,最后你需要给你的同事 20-10=10 元!
以上例子中的商品价格比较好算,但实际情况中这种计算特别麻烦,因此我开发了这款能够协助你轻松算出拼单个人实际支出的小程序。(PS: 如果想快速知道如何使用,建议看一下视频版的使用说明)

准备

  • 页面样式

Dribbble,找到喜欢的页面设计,参考它的样式配色等。(我知道做得不好看,但总归过了我自己这关了……)

  • 小程序框架

之前使用过 mpvue,条条框框有点多,所以这次不打算用,觉得写起来会更灵活些。
我还查看了多个小程序组件库:赞组件库演示、WeUI组件库演示、MinUI组件库、Vant组件库演示、AntUI组件库、ZANE组件库、TouchUI组件库等(可以用关键词‘组件’搜索小程序,会有一系列的组件库示例)。
看了那么多组件库,我觉得最满意的是 TouchUI 组件库,里面组件很多,我想要的都有,可以少写不少代码。
选择使用 TouchUI 组件库后,我发现它不仅是组件库,还是一个轻量的开发框架,最突出的一点是编写代码时将原本小程序一个页面分四个文件的方式改为了单文件方式,具体见 Touch WX 开发文档

代码

遇到的问题:
#1:可以在小程序里使用 emoji 吗?

可以,我是用在复制账单信息这里,觉得加上 emoji 更有趣味性。具体实现是:我直接在这个网站复制需要的 emoji,粘贴到代码中,结合账单信息拼接出所需字符串,利用 API wx.setClipboardData(Object object) 将内容设置到剪贴板上,粘贴的时候就能看到 emoji 了~

#2:如何优化性能?

最耗费渲染性能的一句代码就是 this.setData() 了,实际编写代码过程中,但凡未被绑定到 wxml 页面上的数据,我都归纳到 this._data 字段下,与 this.data 彻底区分开来,没有必要的字段坚决不使用 this.setData() 进行更新,示例如下:

 Page({
   _data: {
    priceValue: ''
  },
  data: {
    ...
  },
  bindPriceInput(e) {
    // 在使用 input 组件的过程中我将其值暂存在 this._data 中
    this._data.priceValue = e.detail.value.trim();
  },
  confirmPriceInput() {
    // 需要的时候获取即可,无需使用到 this.setData() 函数
    let priceValue = this._data.priceValue;
    ...
  }
 })

#3:如何实现清空 input 功能?

// wxml
<input class="input" value="{{someValue}}"/>

// js
Page({
  data: {
    someValue: ''
  },
  clearInput() {
    this.setData({
      someValue: ''
    })
  }
})

#4:如何引用 iconfont?

我知道的有两种方式,一种是将 iconfont 的 ttf 文件转为 base64,详细的使用说明可以查看这里;还有一种是引用 iconfont 的在线链接,详细说明可以查看这篇文章
大家可以根据自己的需求选择其中一种,区别就是一个资源在本地,一个托管在 alicdn。我个人偏向于使用后一种,这样就不用每次更新 iconfont 都去转换 ttf 文件了……

#5:如何实现 input 自动聚焦功能?

实现自动聚焦功能并没有什么难度,但是在我的使用场景中我遇到了问题:我的 input 组件放置在一个弹框组件中,我希望在弹框出现后 input 能够自动聚焦,弹框关闭后重置控制聚焦的值,代码如下:

// .wxml
<ui-popup bindshow="focusInput" bindhide="blurInput">
  <input focus="{{inputFocus}}"/>
</ui-popup>

// .js
focusInput() {
  setTimeout(() => {
    this.setData({
      inputFocus: true
    })
  }, 300) // 300ms 是 ui-popup 组件出现时的动画时长
},
blurInput() {
  this.setData({
    inputFocus: false
  })
}

尝试多次后我发现 css 动画执行时自动聚焦无法实现,我需要在动画结束后再将 inputFocus 的值设置为 true。

#6:如何获取打赏?

个人开发者总是希望用户能够认可自己花时间打造出来的工具,不管怎样,研究一下如何获取赞赏又没有什么坏处。
我参考了这篇文章和一些资料,得知可以使用赞赏码获取打赏,但是小程序的 image 组件中二维码/小程序码图片不支持长按识别,仅在 wx.previewImage 中支持长按识别。
所以最后我的方案就是:

// 保存了自己的赞赏码,托管在码云上,点击某个按钮后直接进入图片预览,此时赞赏码长按可识别
handleLikeButton() {
  wx.previewImage({
    current: '', // 赞赏码图片的 http 链接
    urls: [] // 需要预览的图片 http 链接列表
  })
}

#7:如何在其他项目中使用 touchui 的组件?

我很喜欢 touchui 的组件,节省了我很多时间。我在不使用任何框架的小程序项目中也想用它的组件,稍微尝试后我的总结如下:

// 当你基于 touchui 构建了一个项目,启动开发服务后(执行 `tui dev` 命令)
// 可以在项目中使用它的任意组件(直接使用,不需要任何引入)
// 保存代码后,框架会将修改后的 .wx 文件
// 编译成 index.html、index.js、index.json、index.wxss 至对应 dist 目录中
// 同时,使用到的组件也将被编译到 dist/packages/touchui-wx-components
// 这些编译过后的代码就是小程序能够使用的组件代码
// 可以直接将相应的文件夹复制到自己的项目中使用
//(如果有缺少什么依赖的 util 文件,根据需要都复制过去就好了)

// pages/home/index.wx
<ui-popup>
  ...
</ui-popup>

#8:如何收集意见反馈?

最直观的方式当然是提供一个意见反馈的表单页面,但我想指出的是微信官方也提供了用于收集意见反馈的组件,可以直接使用(button open-type="feedback")。

唠叨

在开发其他小程序项目时,我没有使用任何框架,因为如果项目到了其他人手里,会产生一定的维护成本,选用原生开发最为妥当。
但是,我必须强调一下 touchui 单文件编辑这个特性,非常适合个人项目开发(使用原生开发时每个页面都有 4 个文件,我切换文件都快疯了……)。

资源

Touch WX 开发文档

Touch WX是一套完全免费的微信小程序开发框架,扩展了小程序的能力。

iconfont

图标资源

码云

存放项目相关资源

launchaco

制作 logo 不求人!

videosmaller

视频压缩(手机录制的操作视频需要进行压缩)

小程序开发文档

文章

基于后端云微信小程序开发 (文不对题,大家看文章内容就好)

总结了小程序开发中常见的一些问题(小程序 API 异步方案…),看一遍就可以对开发小程序有一个大致的了解!

【微信小程序】自定义组件

很棒的文章,看完就基本知道怎么写小程序的自定义组件了~

小程序开发技巧总结

很棒的文章,解答了很多小程序开发过程中会遇到的问题,值得参考!(引入 iconfont,使用 less,动态设置 data 中某个值、上拉加载和下拉刷新、上传图片、async/await)
setData 操作是同步的,能马上获取刚刚设置的属性;但是页面渲染则是异步进行的。

我与小程序的故事以及小程序框架选型

小程序、wepy、mpvue、taro……
我觉得还是使用原生开发比较稳定(缺点:无自动构建、无数据流管理)

微信小程序仿APP section header 悬停效果

也许以后会用到……

【微信小程序】性能优化

非常棒的文章,干货满满!
小程序启动加载性能
1.控制代码包的大小
2.分包加载
3.首屏体验(预请求,利用缓存,避免白屏,及时反馈)
小程序渲染性能
1.避免不当的使用setData
2.合理利用事件通信
3.避免不当的使用onPageScroll
4.优化视图节点
5.使用自定义组件

小程序登录态控制探索全过程

做用户登录相关逻辑时可以参考!

小程序入门总结篇

有问题可以看看这里有没有解决方案,过一遍就大概知道怎么开发小程序了。

mini-programm-template

推荐!有一些不错的解决方案:Promise 封装、封装 wx API、跨页面事件通讯 event、 监听数据变化 watch...

开发 | 如何在微信小程序的页面间传递数据?

需要时可以快速过一遍。

微信小程序:回调,Promise,async,await 的使用例子

供参考~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容