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


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 相关文章推荐
javascript获取form里的表单元素的示例代码
Feb 14 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
Jun 20 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
Javascript中this绑定的3种方法与比较
Oct 13 Javascript
浅谈jQuery hover(over, out)事件函数
Dec 03 Javascript
微信小程序 数组中的push与concat的区别
Jan 05 Javascript
ajax分页效果(bootstrap模态框)
Jan 23 Javascript
浅谈vuex 闲置状态重置方案
Jan 04 Javascript
angular4 JavaScript内存溢出问题
Mar 06 Javascript
在vue-cli项目中使用bootstrap的方法示例
Apr 21 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
Dec 06 Javascript
vue axios post发送复杂对象问题
Jun 04 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接收POST数据方式
2015/06/05 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
网页javascript精华代码集
2007/01/24 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
Python 字典dict使用介绍
2014/11/30 Python
Python使用turtule画五角星的方法
2015/07/09 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
python yield和Generator函数用法详解
2020/02/10 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
中国网上药店领导者:1药网
2017/02/16 全球购物
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
公司财务工作总结的自我评价
2013/11/23 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
红色影片观后感
2015/06/18 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
Java基础——Map集合
2022/04/01 Java/Android