微信小程序实现时间预约功能


Posted in Javascript onNovember 27, 2018

一个类似电商的时间预约功能,供大家参考,具体内容如下

1 .概述

我们在学习微信小程序或者做项目时,应该会遇到需要时间预约功能情况,那么这个时间预约功能我们应该怎么编写呢?于是就做了一个类似电商的时间预约功能,觉得有用,就独立出来成了个小插件,今天我们就分享这样的小教程。希望对大家有所帮助。

不多说了,上图来啦!

微信小程序实现时间预约功能

2. wxml

<!--pages/orderTime/index.wxml-->
<view class='containt'>
 <scroll-view class="scroll-view_H" scroll-x>
  <view class='list' style='width:{{ width }}rpx'>
   <view bindtap="select" wx:for="{{ calendar }}" wx:for-item="item" wx:for-index="index" data-index="{{ index }}" class='listItem {{index==currentIndex? "current":""}}' wx:key='' data-date="{{ item.date}}">
    <text class='name'>{{ item.week }}</text>
    <text class='date'>{{ item.date }}</text>
   </view>
  </view>
 </scroll-view>
 <view class='time'>
  <view wx:for="{{ timeArr }}" wx:for-item="timeItem" wx:for-index="timeIndex" data-Tindex="{{ timeIndex }}" data-time="{{ timeItem.time}}" bindtap='selectTime' class='listItem {{ currentTime==timeIndex? "current":"" }}' wx:key=''>
   <text>{{ timeItem.time }}</text>
   <text>{{ timeItem.status }}</text>
  </view>
 </view>
 <view class='operate'>
  <button class='del'>删除</button>
  <button class='save'>保存</button>
 </view>
</view>

3 . js

// pages/orderTime/index.js
Page({
 /**
  * 页面的初始数据
  */
 data: {
  calendar:[],
  width:0,
  currentIndex:0,
  currentTime: 0,
  timeArr: [
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" },
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-10:00", "status": "约满" }, 
      { "time": "8:00-22:00", "status": "约满" }
      ]  
 },
 /**
  * 生命周期函数--监听页面加载
  */
 onLoad: function (options) {
  var that=this;
  function getThisMonthDays(year, month) {
   return new Date(year, month, 0).getDate();
  }
 // 计算每月第一天是星期几
  function getFirstDayOfWeek(year, month) {
   return new Date(Date.UTC(year, month - 1, 1)).getDay();
  }
  const date = new Date();
  const cur_year = date.getFullYear();
  const cur_month = date.getMonth() + 1;
  const cur_date=date.getDate();
  const weeks_ch = ['日', '一', '二', '三', '四', '五', '六'];
  //利用构造函数创建对象
  function calendar(date,week){
   this.date=cur_year+'-'+cur_month+'-'+date;
   if(date==cur_date){
    this.week = "今天";
   }else if(date==cur_date+1){
    this.week = "明天";
   }else{
    this.week = '星期' + week;
   }
  }
  //当前月份的天数
  var monthLength= getThisMonthDays(cur_year, cur_month)
  //当前月份的第一天是星期几
  var week = getFirstDayOfWeek(cur_year, cur_month)
  var x = week;
  for(var i=1;i<=monthLength;i++){
   //当循环完一周后,初始化再次循环
   if(x>6){
    x=0;
   }
   //利用构造函数创建对象
   that.data.calendar[i] = new calendar(i, [weeks_ch[x]][0])
   x++;
  }
  //限制要渲染的日历数据天数为7天以内(用户体验)
  var flag = that.data.calendar.splice(cur_date, that.data.calendar.length - cur_date <= 7 ? that.data.calendar.length:7)
  that.setData({
   calendar: flag
  })
  //设置scroll-view的子容器的宽度
  that.setData({
   width: 186 * parseInt(that.data.calendar.length - cur_date <= 7 ? that.data.calendar.length : 7)
  })
 },
 /**
  * 生命周期函数--监听页面初次渲染完成
  */
 onReady: function () {
 },
 /**
  * 生命周期函数--监听页面显示
  */
 onShow: function () {
 },
 /**
  * 生命周期函数--监听页面隐藏
  */
 onHide: function () {
 },
 /**
  * 生命周期函数--监听页面卸载
  */
 onUnload: function () {
 },
 /**
  * 页面相关事件处理函数--监听用户下拉动作
  */
 onPullDownRefresh: function () {
 },
 /**
  * 页面上拉触底事件的处理函数
  */
 onReachBottom: function () {
 },
 /**
  * 用户点击右上角分享
  */
 onShareAppMessage: function () {
 },
 select:function(event){
  //为上半部分的点击事件
  this.setData({
   currentIndex: event.currentTarget.dataset.index
  })
  console.log(event.currentTarget.dataset.date)
 },
 selectTime:function(event){
  //为下半部分的点击事件
  this.setData({
   currentTime: event.currentTarget.dataset.tindex
  })
   console.log(event.currentTarget.dataset.time)
 }
})

4. css

/* pages/orderTime/index.wxss */
scroll-view{
 height: 128rpx;

 width: 100%;
}
scroll-view .list{
 display: flex;
 flex-wrap: nowrap;
 justify-content: flex-start;
  width: 1302rpx; 
}
scroll-view .listItem{
 text-align: center;
 width: 186rpx;
 height: 128rpx;
 background-color: #f1f2f6;
 padding-top: 30rpx;
 box-sizing: border-box;
 /* float: left; */
 display: inline-block;
}
scroll-view .listItem text{
 display: block;
}
scroll-view .listItem .name{
 font-size: 30rpx;
}
scroll-view .listItem .date{
 font-size: 30rpx;
}
scroll-view .current{
 background-color: #76aef8;

}
scroll-view .current text{
 color: #fff;
}
.time{
 width: 95%;
 display: flex;
 flex-wrap: wrap;
 justify-content: flex-start;
 margin: 0 auto;
 margin-top: 30rpx;
}
.time .listItem{
 width: 25%;
 height: 135rpx;
 text-align: center;
 box-sizing: border-box;
 background-color: #fff;
 padding-top: 35rpx;
 border: 1px solid #b9c1c8;
}
.time .listItem text{
 display: block;
 font-size: 30rpx;
}
.time .current{
 border: 1px solid #76aef8;
}
.time .current text{
 color: #76aef8;
}
.operate button{
 width:300rpx;
 height: 88rpx;
 background-color: #fff;
}
.operate .del{

  color: #e54449; 
}
.operate button::after{
 border: 2px solid #e54449;
}
.operate{
 display: flex;
 flex-wrap: nowrap;
 justify-content: space-around;
}
.operate button:nth-child(2):after{
 border: 2px solid #e54449;
}
.operate .save{
 color: #fff;
 background-color: #e54449; 

}
.operate{
 width: 100%;
 padding: 30rpx 0;
 background-color: #fff;
 position: fixed;
 bottom: 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript suggest效果 自动完成实现代码分享
Feb 17 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
EasyUI Pagination 分页的两种做法小结
Jul 09 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
Jan 06 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
Vue实现购物车功能
Apr 27 Javascript
Angular开发实践之服务端渲染
Mar 29 Javascript
关于Angularjs中跨域设置白名单问题
Apr 17 Javascript
vue cli2.0单页面title修改方法
Jun 07 Javascript
原生JS与JQ获取元素的区别详解
Feb 13 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 Javascript
如何优雅地取消 JavaScript 异步任务
Mar 22 Javascript
微信小程序使用component自定义toast弹窗效果
Nov 27 #Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 #Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 #Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
Nov 27 #jQuery
js replace替换字符串同时替换多个方法
Nov 27 #Javascript
Vue中用props给data赋初始值遇到的问题解决
Nov 27 #Javascript
使用electron制作满屏心特效的示例代码
Nov 27 #Javascript
You might like
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
python之wxPython菜单使用详解
2014/09/28 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
Python实现的弹球小游戏示例
2017/08/01 Python
详解python基础之while循环及if判断
2017/08/24 Python
Python判断telnet通不通的实例
2019/01/26 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
Kathmandu新西兰官网:新西兰户外运动品牌
2019/07/27 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
实习护士自荐信
2014/06/21 职场文书
会计学习心得体会
2014/09/09 职场文书
未婚证明书模板
2014/10/08 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python