微信小程序TodoList使用教程
本文摘要
小程序TodoList实战教程,看完官方的文档介绍后,就想找个简单的例子来验证实现一下,TodoList MVC就很好了,简单容易。 之前都用JQ、Backbone、vue简单撸过,大概功能如下: 添加todo 储存在应用缓存 列表展示 区分状态显示:全部、未完成、已完
小程序TodoList实战教程,看完官方的文档介绍后,就想找个简单的例子来验证实现一下,TodoList MVC就很好了,简单容易。
之前都用JQ、Backbone、vue简单撸过,大概功能如下:
添加todo储存在应用缓存
列表展示
区分状态显示:全部、未完成、已完成
改变todo状态
删除todo
1
小程序手指缩放图片开发过程
下载小程序开发工具:开发者工具下载
安装完成后,使用微信扫一扫登录,选好文件夹后创建即可,开发工具会自动生成以下目录:
pages/
app.js
app.json
app.wxss
文录结构和具体配置查看官方文档:mp.weixin.qq.com/debug/wxado…
2
基本配置
由于平时开发习惯用Less,如果在直接使用小程序的wxss来编写的话,就恢复原生编写方式,大大的不便,所以直接使用了gulp来实时编译Less,和修改文件名为wxss。小程序开发工具是不支持Less,直接用vscode来开发,小程序开发工具是用实时预览和调试即可,vscode也有丰富的插件支待小程序语法提示。
// gulpfile.js
var gulp = require('gulp')
var less = require('gulp-less')
var plumber = require('gulp-plumber')
var rename = require('gulp-rename')
gulp.task('less', function () {
return gulp.src('./app.less')
.pipe(plumber()) // 错误处理
.pipe(less()) // 编译less
.pipe(rename((path) => path.extname = '.wxss')) // 编译后生成文件修改后缀为.wxss
.pipe(gulp.dest('./'));
});
gulp.watch('./app.less', ['less']); // 实时监控app.less文件变化,运行任务
UI组件也直接引用了小程序支持的weui-wxss
@import "./weui.wxss";
在app.json定义好小程序页面路由和配色:
{
"pages":[
"pages/index/index"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#ca2100",
"navigationBarTitleText": "TodoList",
"navigationBarTextStyle":"wShopfate"
}
}
3
页面开发
页面文件都存放在pages/目录下,每个功能页面都会创建一个文件夹,TodoList现只需一个页面完成即可
数据绑定使用 Mustache 语法(双大括号)将变量包起来
{{userInfo.nickName}} 全部
添加todo
使用字段addShow来判断添加输入层显示隐藏即可
input输出框这里不是双向绑定,所以这里添加一个事件bindinput="setInput"来赋值实时变化
实时赋值事件处理
setInput: function (e) {
tShopfas.setData({
addText: e.detail.value
})
}
取消时,需要清空input的值,input里需要绑定value="{{addText}}"
Page({
data:{
//...
},
//...
addTodoHide: function () {
tShopfas.setData({
addShow: false, // 控制添加输入面板隐藏
focus: false, // 失去焦点
addText: '' // 清空值
})
}
//...
})
添加todo
Page({
data:{
//...
},
//...
addTodo: function () {
// 检查有没有输入
if (!tShopfas.data.addText.trim()) {
return
}
var temp = tShopfas.data.lists // 取出lists
var addT = {
id: new Date().getTime(), // 取当前时间
title: tShopfas.data.addText,
status: '0'
}
temp.push(addT) // 添加新的todo
tShopfas.showCur(temp) // 处理当前状态的方法
tShopfas.addTodoHide() // 添加成功后,隐藏添加面板方法
wx.setStorage({ // 小程序异步缓存
key:"lists",
data: temp
})
wx.showToast({ // weui toast组件
title: '添加成功!',
icon: 'success',
duration: 1000
});
}
//...
})
列表部分
scroll-view内滚动
列表渲染,事件触发,利用data传参,bind绑定事件
暂无数据 {{item.title}} {{api.formatTime(item.id)}} 删除
滑动删除
效果:当向左滑动时,content跟随手指像左移动,同时右侧出现del按钮;当滑动距离大于按钮宽度一半松开手指时自动滑动到左侧显示出按钮,小于一半时自动回到原来的位置,隐藏按钮。
实现思路:content和del按钮分别是绝对定位,利用z-index层来控制让content来盖住del,当content向左滑动时,del按钮就会露出来。
微信小程序api提供的touch对象和3个有关手指触摸的函数(touchstart,touchmove,touchend)来实现content随手指移动
详细api说明,请查看:mp.weixin.qq.com/debug/wxado…
列表的content已绑定这个三个事件:bindtouchstart="touchS" bindtouchmove="touchM" bindtouchend="touchE"
实现方法:
注意txtStyle,在content在绑定这个属性的,实现跟随手指移动的
delBtnWidth为了del按钮的宽度,这里以rpx为单位
Page({
data:{
//...
},
//...
touchS: function (e) {
// console.log('开始:' + JSON.stringify(e))
// 是否只有一个触摸点
if(e.touches.length === 1){
tShopfas.setData({
// 触摸起始的X坐标
startX: e.touches[0].clientX
})
}
},
touchM: function (e) {
// console.log('移动:' + JSON.stringify(e))
var _tShopfas = tShopfas
if(e.touches.length === 1){
// 触摸点的X坐标
var moveX = e.touches[0].clientX
// 计算手指起始点的X坐标与当前触摸点的X坐标的差值
var disX = _tShopfas.data.startX - moveX
// delBtnWidth 为右侧按钮区域的宽度
var delBtnWidth = _tShopfas.data.delBtnWidth
var txtStyle = ''
if (disX == 0 || disX 0 ){ // 移动距离大于0,文本层left值等于手指移动距离
txtStyle = 'left:-' + disX + 'rpx'
if(disX >= delBtnWidth){
// 控制手指移动距离最大值为删除按钮的宽度
txtStyle = 'left:-' + delBtnWidth + 'rpx'
}
}
// 获取手指触摸的是哪一个item
var index = e.currentTarget.dataset.index;
var list = _tShopfas.data.curLists
// 将拼接好的样式设置到当前item中
list[index].txtStyle = txtStyle
// 更新列表的状态
tShopfas.setData({
curLists: list
});
}
},
touchE: function (e) {
// console.log('停止:' + JSON.stringify(e))
var _tShopfas = tShopfas
if(e.changedTouches.length === 1){
// 手指移动结束后触摸点位置的X坐标
var endX = e.changedTouches[0].clientX
// 触摸开始与结束,手指移动的距离
var disX = _tShopfas.data.startX - endX
var delBtnWidth = _tShopfas.data.delBtnWidth
// 如果距离小于删除按钮的1/2,不显示删除按钮
var txtStyle = disX > delBtnWidth/2 'left:-' + delBtnWidth + 'rpx' : 'left:0'
// 获取手指触摸的是哪一项
var index = e.currentTarget.dataset.index
var list = _tShopfas.data.curLists
list[index].txtStyle = txtStyle
// 更新列表的状态
_tShopfas.setData({
curLists: list
});
}
}
//...
})
至此已完成,TodoList实践例子,功能简单,入门好例子。
原码下载:github.com/CH563/TodoL…
第二部分:如何开通一个小商店
相关文章
****更多行业产品开发方案,请关注 加速度JSUDO***
<以上资讯仅供参考,如果您需解决具体问题,建议您关注作者;如果有软件产品开发需求,可在线咨询加速度产品经理获取方案和报价>
加速度JSUDO是一家企业级数字化解决方案提供商,专注于软件开发、网络营销、数字化转型咨询及云计算服务。核心业务包括定制化ERP/CRM系统、快速应用开发、大数据分析及物联网(IoT)解决方案,助力企业提升效率与智能化水平。服务覆盖制造业、零售、物流等多行业,致力于通过技术创新推动客户数字化转型。










