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


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 获取对象 基本选择与层级
May 31 Javascript
js中用window.open()打开多个窗口的name问题
Mar 13 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
jquery trigger函数执行两次的解决方法
Feb 29 Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 Javascript
如何用原生js写一个弹窗消息提醒插件
May 24 Javascript
JS动态显示倒计时效果
Dec 12 Javascript
Javascript操作select控件代码实例
Feb 14 Javascript
通过js随机函数Math.random实现乱序
May 19 Javascript
2分钟实现一个Vue实时直播系统的示例代码
Jun 05 Javascript
原生JavaScript实现轮播图
Jan 10 Javascript
JS ES6异步解决方案
Apr 29 Javascript
微信 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动态实现表格跨行跨列实现代码
2012/11/06 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
js随机生成网页背景颜色的方法
2015/02/26 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python远程登录代码
2008/04/29 Python
Python备份Mysql脚本
2008/08/11 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
Python 忽略文件名编码的方法
2020/08/01 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
什么是Smart Navigation?
2016/07/03 面试题
工商技校毕业生自荐信
2013/11/15 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL