美团外卖小程序
来源:互联网 发布:托福tpo模考软件mac版 编辑:程序博客网 时间:2024/04/27 22:52
这个美团外卖的小程序我是从github上面找到的,然后参考他的代码完成的。所以界面和代码还是有点相似,毕竟现在我才刚开始学习,所以我认为参考大牛源码也是一种提升。因为里面有许多的技巧在里面,有的时候就可以不用这么纠结应该如何布局等。
这是一个首页界面,在写代码的时候,只要在app.json的pages的数组的第一行写上你要的首页路径就可以了,因为小程序是将获取到的第一条路径默认为首页。
这些页面都是采用组件写的,而且小程序的组件不多。只要学过前端的都能够很快的上手小程序的前台页面的编写,而且这里的前端都是采用动态的渲染方式的,所以就会有模板的使用出现。这里的模板开始和结束符为{{}}。
然后就是点击商家信息栏进入商家页面了。
这里面的话是采用scroll-view组件写的,因为左边的要滚动,右边的也要滚动。所以要采用scroll-view来写。这里的scroll-view要固定height的值,不然会出不来滚动的效果,不能用百分比的形式。然后按钮的话只要采用bindtap来绑定函数就ok了。这样子的话,只要我们点击图片就会触发事件,这里的bind是可冒泡的,采用catch的话就不会冒泡了。
之后就是订单的提交了,这里的话只要提取静态的购物车数据就ok了。之后直接显示出来,然后再请求url来进行订单的提交。
这个程序大概就是这样子了。
代码在这里:传送门
2017.7.19更新
在使用js的变量的时候,我发现var a=2,b=[]。这样子写有问题,他会说我的变量未定义。
定位添加:
在index.js里面可以使用wx自定义函数getLocation来获取位置数据
wx.getLocation({ type: "wgs84", success: function (res) { var lat = res.latitude;//纬度 var lng = res.longitude;//经度 console.log("lat:" + lat); console.log("lng:" + lng); that.getCity(lat, lng);//调用自己写的函数获得城市信息 }, })获取到数据之后就要利用百度的api来将具体的经纬度转为位置的信息了。所以这里的话可以自己封装一个函数来使用,这里就是上面代码所用到的getCity函数。
//获得城市 getCity: function (lat, lng) { var that = this; var url = "http://api.map.baidu.com/geocoder/v2/"; var param = { ak: 'QgDjg59KnbdsL14plwnoP5rUAGKyDYPe', location: lat + ',' + lng, output: 'json' }; wx.request({ url: url, data: param, success: function (res) { console.log(res); var city = res.data.result.addressComponent.district; var street = res.data.result.addressComponent.street; that.setData({ city: city, street: street }); } }) }
这样子就可以获取到城市和街道的数据了,之后只要自己在前端页面调用就ok了。
然后就是对数据的动态加载,因为这里的数据是假的,所以做出来的也是假的加载条。
这里面其实是利用
scroll-view组件的bindscrolltolower事件来做的,这里面首先给出一个分组数据,然后等到滑到底部就会触发这个函数,就可以在里面做数据动态添加和动画效果出来了。这个函数会出现抖动的现象,所以要使用一个变量来控制只能进行一次。具体代码如下:
var app = getApp();var server = require('../../utils/server.js');Page({ /** * 页面的初始数据 */ data: { cart:{ count:0, total:0 }, cartList:[], localList:[], isFreshing:false, loding:false, count:1, sum : 0, showCartDetail:false, defaultImg: 'http://global.zuzuche.com/assets/images/common/zzc-logo.png', }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { var shopId = options.id; var shop = server.selectedShopDetail(shopId); this.setData({ shopId : shopId, shop : shop, sum : shop.menu.length }); var menu = Array(shop.menu[0]); this.setData({ menu: menu }); console.log("myShop"); console.log(this.data.shop); console.log(this.data.menu); //加载静态订单数据 var res = wx.getStorageSync('orderList'); if(res){ if(res.count<0)res.count=0; this.setData({ cart:{ count:res.count==null?0:res.count, total:res.total } }); console.log("shop---Loading"); console.log(res.count,res.total,res.cartList); console.log(this.data.cart.count, this.data.cart.total); console.log("shop---end"); if(!server.isEmptyObject(res.cartList)){ this.setData({ cartList:res.cartList, localList:server.filterEmptyObject(res.cartList) }); } } //防止未定义数组的形式 if (typeof this.data.cartList[this.data.shopId] == 'undefined' || server.isEmptyObject(this.data.cartList[this.data.shopId])) { var cartList = this.data.cartList; cartList[this.data.shopId] = []; this.setData({ cartList: cartList }) } console.log(this.data.localList, this.data.cartList) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { }, /** * 商品展示滚动 */ onGoodsScroll:function(e){ var that = this; var scare = e.detail.scrollWidth / 250, scrollTop = e.detail.scrollTop, h = 0, selectOrder, len = this.data.shop.menu.length; this.data.shop.menu.forEach(function(classify,i){ var _h = 37.5 + 94 * classify.menu.length; //console.log("srcollTop:" + scrollTop); //console.log(h - 100 / scare); if (scrollTop + 500 >= h ){ selectOrder = classify.id; } h += _h; }); this.setData({ selectOrder: selectOrder }); }, /* 增加商品 */ addGoods:function(e){ var that = this; if (!this.data.isFreshing && that.data.count < that.data.sum){ this.setData({ loding: true, isFreshing:true }); setTimeout(this.timeOut, 2000); } }, //定时增加 timeOut:function(){ var that = this; { var menu = that.data.menu; menu.push(that.data.shop.menu[that.data.count]); //console.log(that.data.count); that.setData({ menu: menu, count: that.data.count + 1, loding:false, isFreshing:false }); //console.log("jinrulimiandeshuju"); } }, showCartDetailf:function(){ this.setData({ showCartDetail : !this.data.showCartDetail }); console.log(this.data.showCartDetail); }, hiddenCartDetailf:function(){ this.setData({ showCartDetail : false }); console.log(this.data.showCartDetail); }, //检查下标 checkOrderSame: function (name) { var list = this.data.cartList[this.data.shopId]; for (var index in list) { if (list[index].name === name) { return index; } } return false; }, //将饭菜加入购物车 tapAddCart:function(e){ var price = parseFloat(e.target.dataset.price); var name = e.target.dataset.name; var img = e.target.dataset.pic; var list = this.data.cartList; var sortedList = []; var index; if (index = this.checkOrderSame(name)){ sortedList = list[this.data.shopId][index]; var num = list[this.data.shopId][index].num; list[this.data.shopId][index].num = num + 1; list[this.data.shopId][index].pay = (num+1)*sortedList.price; }else{ //console.log(this.data.cartList); //console.log(list); //console.log(this.data.shopId); var order={ 'price' : price, 'name' : name, "num": 1, 'img' : img, 'shopId': this.data.shopId, 'shopName': this.data.shop.restaurant_name, 'pay': price, }; list[this.data.shopId].push(order); sortedList = order; } this.setData({ cartList : list, localList : server.filterEmptyObject(list) }); this.addCount(sortedList); console.log(this.data.localList); }, //删除购物车上的饭菜 tapReduceCart:function(e){ var name = e.target.dataset.name; var price = e.target.dataset.price; var list = this.data.cartList; var index,sortedList = []; if(index = this.checkOrderSame(name)){ var num = list[this.data.shopId][index].num; if(num>1){ sortedList = list[this.data.shopId][index]; list[this.data.shopId][index].num = num - 1; }else{ sortedList = list[this.data.shopId][index]; list[this.data.shopId].splice(index,1); } } this.setData({ cartList : list, localList : server.filterEmptyObject(list) }); this.deduceCount(list); }, //增加数量 addCount: function (list) { var count = this.data.cart.count + 1, total = this.data.cart.total + list.price; total = Math.round(parseFloat(total)); this.saveCart(count, total); }, //减少数量 deduceCount: function (list) { var count = this.data.cart.count - 1, total = this.data.cart.total - list.price; total = Math.round(parseFloat(total)); this.saveCart(count, total); }, //保存购物车的东西 saveCart: function (count, total) { console.log(typeof total, total); if (isNaN(total)) total = 0; console.log(typeof total,total); total = Math.round(parseFloat(total)); this.setData({ cart: { count: count, total: total } }); wx.setStorage({ key: 'orderList', data: { cartList: this.data.cartList, count: this.data.cart.count, total: this.data.cart.total } }); }, submit: function (e) { var total = this.data.cart.total wx.navigateTo({ url: '/pages/order/order?pay=1&total=' + total }) }})
功能上还是比较少,所以等到有时间再补吧
- 美团外卖小程序
- 美团外卖小程序
- 外卖小程序开发
- 美团CODEM 送外卖
- 饿了么,美团外卖用一台打印机自动接单打印外卖订单小票(教程)
- 微信小程序外卖平台,免费下载小程序外卖源代码
- 【新手指南】美团外卖小票打印机如何设置教程
- 美团,饿了么,百度打印机如何自动打印外卖订单小票(教程)
- 对对机如何自动打印饿了么,美团外卖订单小票(教程)
- 厨房打印机如何设置自动接单打印美团外卖小票(教程)
- 干货:O2O美团外卖四部曲
- 美团外卖支付过程分析
- 【美团】外卖配送事业部面试
- 美团外卖前端实习生面试总结
- 美团外卖电话面试的知识点
- 美团外卖订单中心的演进
- 美团外卖订单系统演进
- 美团外卖演化之路
- ejabberd配置数据库(其他数据库类似操作)
- Linux — 线程安全和可重入函数
- git分布式版本控制系统原理以及常用命令的使用
- Java并发编程:同步容器、并发容器和阻塞队列
- web安全测试
- 美团外卖小程序
- 水题
- Opencv函数之--threshold函数
- leetcode 242. Valid Anagram
- POJ 1159 Palindrome(最长回文子序列+滚动数组)
- POJ 2533 Longest Ordered Subsequence 笔记
- HDU5929-Basic Data Structure
- java NIO原理解析和代码实现
- PAT甲级真题及训练集(18)--1097. Deduplication on a Linked List (25)