博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
支付宝小程序日期选择组件 datePicker 封装
阅读量:6324 次
发布时间:2019-06-22

本文共 3889 字,大约阅读时间需要 12 分钟。

最近在做支付宝小程序(以下简称小程序)开发,发现小程序的日期选择组件很不好用,比如安卓和IOS设备上,样式明显不同,因为小程序调用该组件是调用系统原生组件,所以会有一定的差异,另外,小程序提供的日期组件并不满足我当前的业务需求:

  1. 该日期为快递上门时间.

  2. 用户只可选择的日期范围,当日往后 2 天(即 今天, 明天 )的日期,并且时间选择为早上 9 点至下午 18 点间的 10 个小时整点时间.

  3. 由于是快递上门,所以可选择的时间点为当前时间点 2 小时后(比如,现在时间是11点,用户可选择的最早时间为13点).

  4. 如果当前时间晚于下午 18 点,则用户应该可以看到 明天后天 2 天的时间点.

针对以上需求,借助小程序的 picker-view 组件,进行了二次封装,以下是封装后的组件.

示例

项目结构

.├── README.md├── app.acss├── app.js├── app.json├── components                      // 组件目录│   └── dateTimePicker              // 日期组件目录│       ├── datePickerBase.js       // 基础 js 文件,需在使用文件中引入│       ├── dateTimePicker.acss     // 组件默认样式,除非特殊需要,一般不用修改│       ├── dateTimePicker.axml     // 组件默认结构│       ├── dateTimePicker.js       // 组件 js │       ├── dateTimePicker.json     // 组件配置信息│       └── js│           ├── handleDateArr.js    // 日期数组处理的 js ,用以生成所需的日期数组│           └── moment.min.js       // 时间生成使用 moment.js│└── pages                         // 示例目录    └── index        ├── index.acss        ├── index.axml        ├── index.js        └── index.json复制代码

使用说明

支付宝小程序的组件引用方法,及使用说明,可参照 支付宝 查看,也可参照本示例中 pages/index 下的使用方法.

pages/index/index.json 需配置 usingComponents, 填写组件路径

{    "defaultTitle": "日期选择picker demo",    "usingComponents": {        "picker": "../../components/dateTimePicker/dateTimePicker"    }}复制代码

pages/index/index.js 引入基础文件,详细配置及使用说明,参照 js 文件内容

// 引入基础初始import datePicker from '../../components/dateTimePicker/datePickerBase'复制代码

pages/index/index.axml 使用 picker 组件

复制代码

其中

title           // 组件标题class           // 组件样式,可以自定义visible         // 组件显示/隐藏onHidePicker    // 隐藏该组件的事件onConfirm       // 点击组件弹窗确定后的事件,onConfirm(str),其中 str 为最终回调的参数,可取到 picker 的值pickerValue     // 默认参数,用来初始的时候用,传入数据是 picker 的索引值,默认(0,0),即 默认选中两列 picker 的第一项复制代码

一些其他的说明

  1. 组件的封装过程中,由于采用的是支付宝的 picker-view 所以在界面上没有花过多的时间,主要可能还是日期时间数组的生成需要处理一下,借助了 moment.js 库,对于时间处理上还是很方便的,以下是对处理日期数组 handleDateArr.js 的代码说明.
// 依赖于 moment.jsconst Moment = require('./moment.min')/** * 生成日期时间数组 * @param dayLength // 要生成的天数时长,不传的话,默认生成 1 天 * @param timeSection // 时间区间,默认 10 , 可下单区间早上9点到下午6点,可下单时间在当前小时后2小时 */function getDaysArr(dayLength, timeSection){  let _daysArr = [[],[]]  let _dayLength = dayLength || 1  const _timeSection = timeSection || 10  const _nowHour = Moment().format('HH')  // 当前时间 小时  const _expressHour = parseInt(_nowHour) + 2 // 可下单时间,当前时间 +2  const _earlyHour = 9  // 最早时间  const _endHour = 19 // 截止时间  for(let i = 0; i < _dayLength; i++){    // 当天时间处理    if( i === 0){      if(_expressHour <= _earlyHour ){        // 早于早上 9点时        _daysArr[1].push(getHoursArr(_earlyHour, _timeSection))        // 处理日期        _daysArr[0].push(Moment().add(i, 'days').format('YYYY-MM-DD'))      } else if( _expressHour > _earlyHour && _expressHour < _endHour){        // 晚于早上 9 点, 早于下午 18 点之前        _daysArr[1].push(getHoursArr(_expressHour, (_endHour - _expressHour)))        // 处理日期        _daysArr[0].push(Moment().add(i, 'days').format('YYYY-MM-DD'))      } else if ( _expressHour >= _endHour && _expressHour < 24){        // 超过晚上 19 点之后,日期天数增加一天        _dayLength++      }    } else {      // 其他日期时间处理      // 早于早上 9点时      _daysArr[1].push(getHoursArr(_earlyHour, _timeSection))      // 处理日期      _daysArr[0].push(Moment().add(i, 'days').format('YYYY-MM-DD'))    }  }  /**   * 获取小时时间数组   * @param nowHour // 当前小时   * @param hoursLength // 小时区间长度   */  function getHoursArr(nowHour, hoursLength) {    let _hoursArr = []    for(let j = 0 ; j < hoursLength; j++){      _hoursArr.push(`${nowHour + j}:00:00`)    }    return _hoursArr  }  return _daysArr}module.exports = {  getDaysArr}复制代码
  1. dateTimePicker.js 文件中使用 handleDateArr.js 的方法
...const { getDaysArr } = require('./js/handleDateArr');   // 引入处理函数Component({  data: {    ...  },  methods: {    // 获取日期数据    doGetDaysArr() {      this.setData({        dateTimeData: getDaysArr(2)     // 传入参数,需返回的日期天数,2天      });    }  }});...复制代码

以上就是该组件的基本说明,代码相对比较简单,觉得可以给目前在做支付宝小程序并有相关需要的童鞋参考一下.

转载地址:http://kpqaa.baihongyu.com/

你可能感兴趣的文章
P1045 麦森数
查看>>
一个自动生成html的类
查看>>
Tomcat:Exception loading sessions from persistent storage
查看>>
servlets的表单提交响应
查看>>
C#中Main方法的四种形式
查看>>
Script:诊断SYSAUX表空间使用情况
查看>>
[Cocos2d-x For WP8]基础知识
查看>>
Android——Android Studio导入SlidingMenu类库的方法
查看>>
Jenkins+Maven+Sonar系统持续集成环境部署以及配置
查看>>
完美的nginx图片防盗链设置详解
查看>>
Windows下Redis的安装使用
查看>>
ASP.NET MVC中使用FluentValidation验证实体
查看>>
Python之模块和包学习
查看>>
C++11 多线程
查看>>
恢复低版本的FlashPlayer
查看>>
Opengl VS2008开发环境
查看>>
ylbtech-QQ(腾讯)-群空间-数据库设计
查看>>
面试书籍
查看>>
模式识别 - 处理多个演示样本研究(MIL)特点(matlab)
查看>>
lintcode :Remove Duplicates from Sorted Array II 删除排序数组中的重复数字 II
查看>>