微信小程序外卖选购页实现切换分类与数量加减功能案例


Posted in Javascript onJanuary 15, 2019

本文实例讲述了微信小程序外卖选购页实现切换分类与数量加减功能。分享给大家供大家参考,具体如下:

关于微信小程序外卖界面实现选购切换分类与数量加减功能开发步骤:

效果图

微信小程序外卖选购页实现切换分类与数量加减功能案例

实现以下功能

一、 点击分类项,切换右边的食品,并高亮自身

这个实现比较简单,给一个states数组,用于记录每一项分类的状态,点击设为true,wxml渲染时三目运算判断即可。

categoryStates = categoryStates.map(function (item, i) {
if (index == i) {
item = true;
} else {
item = false;
}
return item;
});

相应的wxml文件

class="{{categoryStates[index] ? 'category-item-active' : ''}}"

二、 加减按钮

初始只有一个加号

点击加号后,相应商品数量+1,并出现减号

减至0时,减号消失,连同数量值

设计数组结构

cartData: {},它的键是Food表的objectId,值是数量。

以下是js代码实现

add: function (e) {
// 所点商品id
var foodId = e.currentTarget.dataset.foodId;
console.log(foodId);
// 读取目前购物车数据
var cartData = that.data.cartData;
// 获取当前商品数量
var foodCount = cartData[foodId] ? cartData[foodId] : 0;
// 自增1后存回
cartData[foodId] = ++foodCount;
// 设值到data数据中
that.setData({
cartData: cartData
});
}

在wxml文件中绑定数据如下

<view class="stepper">
<!-- 减号 -->
<view class="symbol subtract" wx:if="{{cartData[item.objectId]}}">-</view>
<!-- 数量 -->
<view class="value">{{cartData[item.objectId]}}</view>
<!-- 加号 -->
<view class="symbol add" bindtap="add" data-food-id="{{item.objectId}}">+</view>
</view>

上述代码中,通过wx:if判断当前商品的数量是否存在,无则不显示减号按钮;而在加号按钮旁要显示的数量就是{{cartData[item.objectId]}};点击事件传递的foodId就是{{item.objectId}}

减法按钮类似

subtract: function (e) {
// 所点商品id
var foodId = e.currentTarget.dataset.foodId;
// 读取目前购物车数据
var cartData = that.data.cartData;
// 获取当前商品数量
var foodCount = cartData[foodId];
// 自减1
--foodCount;
// 减到零了就直接移除
if (foodCount == 0) {
delete cartData[foodId]
} else {
cartData[foodId] = foodCount;
}
// 设值到data数据中
that.setData({
cartData: cartData
});
}

减法与加法基本类似,值得一提的是,减法要判断非负的合法性,所以将自减至零时,直接将元素通过delete操作移除,省去后续提交购物车遍历汇总的非零判断的烦琐。

Todo List
购物车动画
购物车逻辑
提交数据到后端存储

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
读jQuery之十二 删除事件核心方法
Jul 31 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
微信小程序 navbar实例详解
May 11 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
Aug 19 Javascript
优雅地使用loading(推荐)
Apr 20 Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 Javascript
JS如何生成随机验证码
Mar 02 Javascript
Node 使用express-http-proxy 做api网关的实现
Oct 15 Javascript
js实现简易计算器小功能
Nov 18 Javascript
原生js实现自定义消息提示框
Nov 19 Javascript
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
微信 jssdk 签名错误invalid signature的解决方法
Jan 14 #Javascript
详解从react转职到vue开发的项目准备
Jan 14 #Javascript
node全局变量__dirname与__filename的区别
Jan 14 #Javascript
微信小程序时间轴实现方法示例
Jan 14 #Javascript
浅谈webpack devtool里的7种SourceMap模式
Jan 14 #Javascript
关于vue的npm run dev和npm run build的区别介绍
Jan 14 #Javascript
用npm-run实现自动化任务的方法示例
Jan 14 #Javascript
You might like
php 获取select下拉列表框的值
2010/05/08 PHP
js left,right,mid函数
2008/06/10 Javascript
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
Python实现八大排序算法
2016/08/13 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
python实现SOM算法
2018/02/23 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
python协程之动态添加任务的方法
2019/02/19 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
python 模拟登陆163邮箱
2020/12/15 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
经典大学生求职信范文
2014/01/06 职场文书
事业单位考核材料
2014/05/21 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
医院护士工作检讨书
2014/10/26 职场文书
企业2014年度工作总结
2014/12/10 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫