艺灵设计

全部文章
×

微信小程序从入坑到放弃二十六:在WXS中使用split实现金额小数点前的数比后面的大的效果

作者:艺灵设计 - 来源:http://www.yilingsj.com - 发布时间:2020-04-28 23:54:03 - 阅: - 评:0 - 积分:0

摘要:在这次微信小程序开发中,有一个关于价格的样式调整。小数点前的数值比小数点后面的的,主要是突出一下。由于接口返回的只有一个字段,所以前端要利用split对相关参数的值进行分割,再配合wxss样式实现最终效果......

一、原型

可能标题描述的不是太清晰,那我们就看下原型图吧。如图:UI原型.pngUI原型实际上就是:小数点前的数字比小数点后面的数字大

二、思路分析

通常情况,金额(价格)是一个字段。比如:price,所以不存在小数点前后字号不一致的问题。但既然原型是这样画的,那要怎么实现呢?让后端改接口,改成两个字段?这后端肯定是不干的且也不合理!所以,只能靠前端来实现了。

那前端怎么实现呢?看官会发现小数点是分界线。所以,想办法把小数点前后的数字分别取到就解决了问题。

三、split()方法

js中,如果要把数字15.32变成15.32的话,最简单的方法就是使用split()方法。在微信小程序中也同样适用。

昨天在format.wxs文件中封装了一个名叫formatValue的函数,现在把split也添加进去。

3.2、新增split 类型

  1. /* 封装一个格式转换的方法 */
  2. function formatValue(value, type) {
  3.   if (typeof value === 'string') {
  4.     if (value.match('¥')) {
  5.       /* 使用getRegExp函数处理正则表达式 start */
  6.       var reg = getRegExp('¥', 'g')
  7.       value = value.replace(reg, '')
  8.       /* 使用getRegExp函数处理正则表达式 end */
  9.     }
  10.   }
  11.   var result = value
  12.   switch (type) {
  13.     case 'split': /* 分割 */
  14.       result = ('' + result).split('.')
  15.       console.log('result=', result, JSON.stringify(result))
  16.       break
  17.     case 'price': /* 普通价格 */
  18.       /* ...... 完整代码见文章末尾的github分支 */
  19.       break
  20.     case 'sold': /* 已售*/
  21.       /* ...... 完整代码见文章末尾的github分支 */
  22.       break
  23.     case 'commission': /* 佣金 */
  24.       /* ...... 完整代码见文章末尾的github分支 */
  25.       break
  26.     case 'coupon': /* 优惠券 */
  27.       /* ...... 完整代码见文章末尾的github分支 */
  28.       break
  29.     }
  30.   return result
  31. }

然后在需要使用的wxml页面中先引入wxs然后再使用\{\{wxs.formatValue('值', 'split')\}\}即可。示例代码如下:

  1. <!-- 引入格式化函数 yiling 20200420 10:53:46 start -->
  2. <wxs src="../../utils/format.wxs" module="wxs"></wxs>
  3. <!-- 引入格式化函数 yiling 20200420 10:53:46 end -->
  4. ...... /* 省略若干项目代码 */
  5. <view class="price">
  6.   ¥<text class="price__big">\{\{wxs.formatValue(price, 'split')[0]\}\}</text>.<text>\{\{wxs.formatValue(price, 'split')[1]\}\}</text> /* 处理价格 */
  7. </view>
  8. ...... /* 省略若干项目代码 */

友情提示:上面代码中的\反斜线是为了防止在文章中转码,看官复制后替换为空即可。

上面的代码只是实现了小数点前后的数字分离,但想实现小数点前的数值比小数点后面的大的话就需要靠wxss样式了。

  1. .price {
  2.   font-size: 24rpx;
  3.   color: #f00;
  4.   font-weight: bold;
  5. }
  6. .price__big {
  7.   font-size: 36rpx;
  8. }

此时再预览小程序时已经可以看到效果了。如图:在wxss样式中控制字号大小.png在wxss样式中控制字号大小

3.3、细节优化

这样就完了吗?

我们再来看看当价格为整数时会出现什么效果吧。如图:当价格为整数时小数点后面无内容.png当价格为整数时小数点后面无内容

是不是有点小尴尬???至于为什么会出现这种情况是因为:166是一个整数,使用split('.')分割后数组长度为1,此时\{\{wxs.formatValue(166, 'split')[1]\}\}不存在。所以,出现上述情况就很好理解了。

解决方案有两种:
方案一:整数时不显示小数点;
方案二:统一保留两位有效小数

选择的方案不同,我们的代码写法也会有所区别,下面来一一演示。

3.3.1、方案一:整数时不显示小数

将原来的.替换成<text wx:if="\{\{wxs.formatValue(price, 'split')[1]\}\}">.</text>即可。

友情提示:上面代码中的\反斜线是为了防止在文章中转码,看官复制后替换为空即可。

3.3.2、方案二:统一保留两位有效小数

此时又有两种方法。
第一种:不修改wxs中的代码,使用现有代码组合的方式实现;
第二种:修改wxs中的代码。
后一种一劳永逸,将原来的('' + result).split('.')替换成Number(result).toFixed(2).split('.')即可。最终效果如图:统一保留两位有效小数.png统一保留两位有效小数

四、demo源码

demo源码已上传到了github上,如果看官需要研究源码,可以点击下面的链接进行访问并下载。

  1. 源码分支: https://github.com/yilingsj/weixinxiaochengxu/tree/dev-wxs-split-20200428

源码中会有必要注释和本篇文章中的示例。若有疑问可与艺灵联系,方式见下方二维码或右侧。

转载声明:
  若亲想转载本文到其它平台,请务必保留本文出处!
本文链接:/xwzj/2020-04-28/weixin-wxs-split.html

若亲不想直保留地址,含蓄保留也行。艺灵不想再看到有人拿我的技术文章到他的地盘或者是其它平台做教(装)程(B)而不留下我的痕迹。文章你可以随便转载,随便修改,但请尊重艺灵的劳动成果!谢谢理解。

亲,扫个码支持一下艺灵呗~
如果您觉得本文的内容对您有所帮助,您可以用支付宝打赏下艺灵哦!

Tag: 微信小程序 小程序教程 WXS split UI原型 正则表达式 regexp replace getRegExp match

上一篇: 微信小程序从入坑到放弃二十五:记一次在WXS中使用正则表达式的坑   下一篇: 微信小程序从入坑到放弃二十七:可控制播放进度的音乐播放器(初级版)

评论区