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


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的each终止或跳过示例代码
Dec 12 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
Bootstrap零基础学习第一课之模板
Jul 18 Javascript
解析利用javascript如何判断一个数为素数
Dec 08 Javascript
Angular2自定义分页组件
Apr 19 Javascript
基于Vue.js实现tab滑块效果
Jul 23 Javascript
ES6中字符串的使用方法扩展
Jun 04 Javascript
微信小程序动态显示项目倒计时
Jun 20 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
Oct 26 Javascript
JavaScript实现答题评分功能页面
Jun 24 Javascript
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 jQuery
React Native项目框架搭建的一些心得体会
May 28 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中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
php正则表达式学习笔记
2015/11/13 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python中的index()方法使用教程
2015/05/18 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
python抓取网页中链接的静态图片
2018/01/29 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
Python秒算24点实现及原理详解
2019/07/29 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
个人收入证明范本
2014/01/12 职场文书
教师远程培训感言
2014/03/06 职场文书
主管竞聘书范文
2014/03/31 职场文书
单位单身证明样本
2014/10/11 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
管理失职检讨书
2015/05/05 职场文书
民政局未婚证明
2015/06/15 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技