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


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 相关文章推荐
div层的移动及性能优化
Nov 16 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
Oct 04 Javascript
纯文字版返回顶端的js代码
Aug 01 Javascript
firefox浏览器不支持innerText的解决方法
Aug 07 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
Nov 20 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
Dec 17 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
Dec 23 Javascript
vue实现todolist单页面应用
Apr 11 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
Sep 12 Javascript
postman+json+springmvc测试批量添加实例
Mar 31 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
Aug 08 Javascript
JavaScript array常用方法代码实例详解
Sep 02 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
深入了解php4(1)--回到未来
2006/10/09 PHP
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
javascript中this的四种用法
2015/05/11 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
在Python下尝试多线程编程
2015/04/28 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
用django设置session过期时间的方法解析
2019/08/05 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
幼儿园教师工作制度
2014/01/22 职场文书
教师简历自我评价
2014/02/03 职场文书
写给老师的保证书
2015/05/09 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
Python中time与datetime模块使用方法详解
2022/03/31 Python
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技