| by suyi | No comments

微信小程序开发1

编写一个简单的备忘录微信小程序

先写简单的头部与联系界面,编写app.json文件

{
  "pages": [
    "pages/index/index"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#656e7f",
    "navigationBarTitleText": "备忘录",
    "navigationBarTextStyle": "black"
  },
  "sitemapLocation": "sitemap.json"
}
编写app.js部分
//app.js
App({
  onLaunch: function () {
    //调用API从本地缓存中获取数据
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
  },
  getUserInfo:function(cb){
    var that = this
    if(this.globalData.userInfo){
      typeof cb == "function" && cb(this.globalData.userInfo)
    }else{
      //调用登录接口
      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo
              typeof cb == "function" && cb(that.globalData.userInfo)
            }
          })
        }
      })
    }
  },
  globalData:{
    userInfo:null,
    backgroundAudioPlaying:true
  }
})

书写index页面部分

编写index.js

//index.js
var dataUrl = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46'
var util = require("../../utils/util.js");

//更改数组 第三个参数是对象
function editArr(arr,i,editCnt){
  let newArr = arr,editingObj = newArr[i];   
    for (var x in editCnt){
      editingObj[x]= editCnt[x];
    }
  return newArr;
}

//获取应用实例
var app = getApp()
Page({
  data: {  
    userInfo: {},
    curIpt:'',
    showAll:true,
    lists:[],
    curRange:[],
    curBegin:0,
    curFinish:1,
    remind:[]
  },
  //事件处理函数
  bindViewTap: function() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad: function () {
    var that = this;
    //获取之前保留在缓存里的数据
    wx.getStorage({
      key: 'todolist',
      success: function(res) {
        if(res.data){
           that.setData({
            lists:res.data
          })
        }
      } 
    })
    //获取用户信息
    app.getUserInfo(function(userInfo){
      that.setData({
        userInfo:userInfo
      })
    })
  },
  iptChange(e){ 
    let timeArr = util.setTimeHalf();   
    this.setData({
      curIpt:e.detail.value,
      curRange:timeArr
    })
  },
  formReset(){
    this.setData({
      curIpt:'',
      curRange:[]
    })
  },
  formSubmit(){
    let cnt = this.data.curIpt,newLists = this.data.lists,i = newLists.length,begin=this.data.curRange[this.data.curBegin],finish = this.data.curRange[this.data.curFinish];
    if (cnt){
       newLists.push({id:i,content:cnt,done:false,beginTime:begin,finishTime:finish,editing:false});
       this.setData({
        lists:newLists,
        curIpt:''
      }) 
    }
  },
  showAll(){
    //显示全部事项
     this.setData({
      showAll:true   
    })
  },
  saveData(){
    let listsArr = this.data.lists;
    wx.setStorage({
      key:'todolist',
      data:listsArr
    })
  }
  // 修改功能后续完成
})

编写index.wxml

<!--index.wxml-->
<view class="container">
  <view  bindtap="bindViewTap" class="header">    
    欢迎<text class="userinfo-nickname">{{userInfo.nickName}}</text>使用
  </view>
<form bindsubmit="formSubmit" bindreset="formReset">
 <view class="input-wrap">    
      <input type="text" value='{{curIpt}}' returnKeyType='send' placeholder="请输入待做的事" class="ipt-main"  bindinput='iptChange' />     
      <view class="flex-row flex-time" wx:if="{{curIpt}}">
            <picker range='{{curRange}}' value='{{curBegin}}' bindchange='beginChange'  class="pick-time time">
                <text>
                    开始时间:{{curRange[curBegin]}}
                </text>
            </picker>  
            <picker range='{{curRange}}' value='{{curFinish}}' bindchange='finishChange'  class="pick-time time">
                <text>
                    结束时间:{{curRange[curFinish]}}
                </text>
            </picker>  
            <label class="time"><switch class="switch" checked bindchange="switch1Change" />提醒</label>
        </view>
        <view class="flex-row" wx:if="{{curIpt}}">        
          <button class="btn btn-submit" formType="submit" hover-class="btn-hover">提交</button>
          <button class="btn btn-cancel" formType="reset">清空</button>
       </view>
  </view>
  </form>
  <view class="list-wrap" wx:if="{{lists.length>0}}">
    <view wx:for="{{lists}}" wx:if="{{showAll ||(!showAll && !item.done)}}" id="{{item.id}}" class="{{item.done?'done list':'list'}}">        
        <text>{{index+1}}:</text>
        <text data-id ="{{index}}"  class="cnt" bindtap="toChange" >{{item.content}}</text>
        <view hidden="{{!item.editing}}" class="edit-wrap">
            <input class="ipt-edit" value="{{item.content}}"  data-id="{{index}}" bindinput='iptEdit' />
            <button class="btn btn-edit" data-id="{{index}}" bindtap="saveEdit">修改</button>
        </view>
        
        <text class="time"> {{item.beginTime}}-{{item.finishTime}}</text>
        <icon class="ico-done" bindtap="setDone" data-id="{{index}}" type="success_no_circle" size='18' color="{{item.done?'#d7d7d7':'#6fa6cf'}}" />
        <icon class="ico-delete" bindtap="toDelete" data-id="{{index}}" type='cancel' size='20' color="#6fa6cf" />
    </view>
    <view class="footer">
        <view class="ft-area">
            <text>{{lists.length}}条</text>
        </view>
         <view class="ft-area ft-mid">
            <text wx:if="{{showAll}}" bindtap="showUnfinished" class="ft-action">显示未完成</text>
            <text wx:else bindtap="showAll" class="ft-action">显示全部</text>
        </view>
        <view class="ft-area">
            <text bindtap="doneAll" class="ft-action">全部完成</text>
            <text bindtap="deleteAll" class="ft-action">全删</text>
        </view>
    </view>
  </view>
  <view class="input-wrap mt" wx:if="{{lists.length>0}}">
    <button class="btn btn-save" bindtap="saveData">保存数据</button>
  </view>
</view>
 

样式文件编写index.wxss

/**index.wxss**/
.header{
  text-align: center;
  font-size: 40rpx;
  color: #ae9e84;
  margin-bottom: 40px;
  width:100%;
  position: relative;
  height:50px;
}
.header::after{
  content:'TODOS';
  position: absolute;
  width: 20rem;
  z-index: 1;
  text-align: center;
  color: rgba(225,225,225,0.5);
  font-size: 120rpx;
  left: 0;
  bottom:-50px;
}

.userinfo-nickname {
  color: #a38e6d;
}
/*输入区域*/
.input-wrap{  
  margin: 30rpx 10rpx;
}
.flex-row{
  display: flex;
  margin: 10rpx 0;
  width: 670rpx;
  -webkit-box-pack: justify;
}
.pick-time{
  line-height: 40rpx;
  flex:1;
  margin:-20rpx 0 20rpx;  
}
.time{
  color: #777;
  font-size:12px;
}
.switch{
  transform: scale(0.5);
  vertical-align: middle;
}
.btn{  
  border-radius: 5px;
  font-size: 30rpx;
  line-height: 100rpx;
  display: block;
  background: #6fa6cf;
}
.btn-submit{
  color: #fff;
  flex: 1;
  margin-right:10rpx;
}
.btn-hover{
  background: #a2c7e2;
}
.btn-cancel{
  background: #fff;
}

.ipt-main{
  border: 1rpx solid #eee;
  border-radius: 5px;
  height: 80rpx;
  padding: 10rpx 15px;
  font-size: 30rpx;
  width: 610rpx;
  display: block;
}

/*展示列表区域*/
.list-wrap{
	text-align:left;
	width:670rpx;
  margin: 0 auto;	
  background: #fff;
  border:1px solid #e2e2e2;
  position:relative;
  border-radius:0 0 5rpx 5rpx;
}
.list-wrap::after{
  content:'';
  position: absolute;
  width: 98%;
  height: 100%;
  z-index: -1;
  border: 1px solid #e6e6e6;
  left: 1%;
  bottom:-5px;
  background: #fff;
  border-radius:0 0 5rpx 5rpx;
}
.list-wrap::before{
  content:'';
  position: absolute;
  width: 96%;
  height: 100%;
  z-index: -2;
  border: 1px solid #e6e6e6;
  left: 2%;
  bottom:-9px;
  background: #fff;
  border-radius:0 0 5rpx 5rpx;
}
.list{
  padding:10px;
  position:relative;
}
.done{
  background: #e6f1f8;
  color:#ccc;
}
.ico-done{
  position: absolute;
  right: 80rpx;  
}
.done .ico-done{color: red}
.ico-delete{
	position:absolute;
	right:10rpx;
}	
.red{
  color: red;
}
.cnt{
  width: 400rpx;
}
/*修改*/
.edit-wrap{
  position: absolute;
  background: #fff;
  left: 20px;
  height: 100%;
  width: 90%;
  top: 0;
  z-index: 2;
  display: flex;
  align-items: center;
  padding: 6rpx;
}
.ipt-edit{
  flex:1;
  border: 1rpx solid #ddd;
  border-radius: 3px;
  padding: 5rpx;
  margin-right: 10rpx;
  font-size: 24rpx;
}
.btn-edit{
  line-height: 60rpx;
  font-size: 24rpx;
  color: #fff;
  height: 60rpx;
}

/*列表地步操作区*/
.footer{
  display: flex;
  justify-content:space-between;
  font-size: 10rpx;
  color: #a38e6d;
  border-top: 1px solid #eee;
}
.ft-action{
  color: #6fa6cf; 
  margin: 0 10rpx;
}
.ft-area{  
  padding: 20rpx;
 text-align:center;
}
.ft-mid{
  border-left: 1px solid #eee;
  border-right: 1px solid #eee;
  flex:1;
}


.mt{
  margin-top: 100rpx;
}
.btn-save{
  width:300rpx;
  color: #fff;
}

后续背景音乐,颜色以及备忘部分功能后续完成及优化

发表评论