微信小程序案例---本地生活
文章目录
- 首页效果以及实现步骤
- 接口地址
- 新建项目并梳理项目结构
- 配置导航栏效果
- 配置 tabBar 效果
- 实现轮播图效果
- 实现九宫格效果
- 实现图片布局
- 本地生活(列表页面)
- 演示页面效果以及主要功能
- 列表页面的 API 接口
- 页面导航并传参
- 获取并渲染列表数据
- 上拉触底时加载下一页数据
- 下拉刷新列表数据
- 使用wxs处理手机号
- 整个项目的获取途径
首页效果以及实现步骤
首页效果图:
接口地址
获取轮播图数据列表的接口
【GET】https://www.escook.cn/slides
获取九宫格数据列表的接口
【GET】https://www.escook.cn/categories
新建项目并梳理项目结构
新建项目:
在app.json文件中新建home、message、contact、shoplist四个页面
"pages":["pages/home/home",// 首页"pages/message/message",// 消息页"pages/contact/contact",// 联系我们页"pages/shoplist/shoplist"// 列表页],
输入以上代码后按下enter键自动创建四个页面目录
项目结构图:
配置导航栏效果
修改app.js文件中的window
"window":{"backgroundTextStyle":"light","navigationBarBackgroundColor": "#2b4b6b",// 导航栏颜色"navigationBarTitleText": "本地生活",// 导航栏标题"navigationBarTextStyle":"white"// 导航栏字体颜色
},
配置 tabBar 效果
在app.json文件中加入以下代码:
"tabBar": {"list": [{"pagePath": "pages/home/home","text": "首页","iconPath": "./images/tabs/home.png","selectedIconPath": "./images/tabs/home-active.png"},{"pagePath": "pages/message/message","text": "消息","iconPath": "./images/tabs/message.png","selectedIconPath": "./images/tabs/message-active.png"},{"pagePath": "pages/contact/contact","text": "联系我们","iconPath": "./images/tabs/contact.png","selectedIconPath": "./images/tabs/contact-active.png"}]},
实现轮播图效果
在home.wxml文件中加入以下代码:
<!-- 轮播图区域 -->
<swiper indicator-dots circular autoplay interval="2000"><swiper-item wx:for="{{swiperList}}" wx:key="id"><image src="{{item.image}}"></image></swiper-item>
</swiper>
在home.wxss文件中加入以下代码:
/* 轮播图 */
swiper{height: 350rpx;
}
swiper image{width: 100%;height: 100%;
}
在home.js文件中加入以下代码:
/*** 页面的初始数据*/data: {// 存放轮播图数据的列表swiperList:[],},
/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getSwiperList()// 加载轮播图数据},// 获取轮播图数据的方法getSwiperList () {wx.request({url: 'https://www.escook.cn/slides',method:'GET',success:(res)=>{// console.log(res);this.setData({swiperList:res.data})}})},
实现九宫格效果
在home.wxml文件中加入以下代码:
<!-- 九宫格区域 -->
<view class="grid-list"><view class="grid-item" wx:for="{{gridList}}" wx:key="id"><image src="{{item.icon}}"></image><text>{{item.name}}</text></view>
</view>
在home.wxss文件中加入以下代码:
/* 九宫格 */
.grid-list{display: flex;flex-wrap: wrap;border-left: 1rpx solid #efefef;border-top: 1rpx solid #efefef;
}
.grid-item{width: 33.33%;height: 200rpx;display: flex;flex-direction: column;align-items: center;justify-content: center;border-bottom: 1rpx solid #efefef;border-right: 1rpx solid #efefef;box-sizing: border-box;
}
.grid-item image{width: 60rpx;height: 60rpx;
}
.grid-item text{font-size: 24rpx;margin-top: 10rpx;
}
在home.js文件中加入以下代码:
/*** 页面的初始数据*/data: {// 存放九宫格数据gridList:[],},
/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getGrideList()// 加载九宫格数据},
// 获取九宫格数据的方法 getGrideList() {wx.request({url: 'https://www.escook.cn/categories',method:'GET',success:(res)=>{// console.log(res);this.setData({gridList:res.data})}})},
实现图片布局
在home.wxml文件中加入以下代码:
<!-- 图片区域 -->
<view class="img-box"><image src="/images/link-01.png" mode="widthFix"></image><image src="/images/link-02.png" mode="widthFix"></image>
</view>
在home.wxss文件中加入以下代码:
/* 图片区域 */
.img-box{display: flex;padding: 20rpx 10rpx;justify-content: space-around;
}
.img-box image{width: 45%;
}
本地生活(列表页面)
演示页面效果以及主要功能
主要功能:
- 页面导航并传参
- 上拉触底时加载下一页数据
- 下拉刷新列表数据
演示页面效果:
列表页面的 API 接口
以分页的形式,加载指定分类下商铺列表的数据:
- 接口地址:https://www.escook.cn/categories/:cate_id/shopsURL
- 地址中的 :cate_id 是动态参数,表示分类的 Id
请求方式
- GET 请求
请求参数
- _ page 表示请求第几页的数据
- _ limit 表示每页请求几条数据
页面导航并传参
在app.json文件下的pages中创建列表页:
"pages":["pages/shoplist/shoplist"],
修改home.wxml文件中的九宫格代码(变为链接):
<!-- 九宫格区域 -->
<view class="grid-list"><navigator class="grid-item" wx:for="{{gridList}}" wx:key="id" url="/pages/shoplist/shoplist?id={{item.id}}&title={{item.name}}"><!--添加url属性:跳转路径并携带九宫格数据中的id和title参数--><image src="{{item.icon}}"></image><text>{{item.name}}</text></navigator>
</view>
在shoplist.js文件中动态添加列表页的标题
/*** 页面的初始数据*/data: {query:{},// 对首页传递参数进行转存},
/**/*** 生命周期函数--监听页面加载*/onLoad(options) {this.setData({query:options})},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {wx.setNavigationBarTitle({title: this.data.query.title})},
获取并渲染列表数据
在shoplist.js文件中初始化数据
/*** 页面的初始数据*/data: {query:{},shopList:[],page:1,pageSize:10,total:0,isloading:false},
获取列表数据
/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getShopList()}, // 获取列表数据getShopList(){wx.request({url: `https://www.escook.cn/categories/${this.data.query.id}/shops`,method:'GET',data:{_page:this.data.page,_limit:this.data.pageSize},success:(res)=>{// console.log(res);this.setData({shopList:[...this.data.shopList,...res.data],total:res.header['X-Total-Count']-0})},
渲染页面,在shoplist.wxml文件中添加以下代码
<view class="shop-item" wx:for="{{shopList}}" wx:key="id"><view class="thumb"><image src="{{item.images[0]}}"></image></view><view class="info"><text class="shop-title">{{item.name}}</text><text>电话:{{item.phone}}</text><text>地址:{{item.address}}</text><text>营业时间:{{item.businessHours}}</text></view>
</view>
添加列表页面样式
.shop-item{display: flex;padding: 15rpx;border: 1rpx solid #efefef;border-radius: 8rpx;margin: 15rpx;box-shadow: 1rpx 1rpx 15rpx #dddddd;
}
.thumb image{width: 250rpx;height: 250rpx;display: block;margin-right: 15rpx;
}
.info{display: flex;flex-direction: column;justify-content: space-around;font-size: 24rpx;
}
.shop-title{font-weight: bold;
}
上拉触底时加载下一页数据
加载下一页数据处理
getShopList(cb){this.setData({isLoading:true})// 展示roading效果wx.showLoading({title: '数据加载中...',})// 请求数据wx.request({url: `https://www.escook.cn/categories/${this.data.query.id}/shops`,method:'GET',data:{_page:this.data.page,_limit:this.data.pageSize},success:(res)=>{// console.log(res);this.setData({shopList:[...this.data.shopList,...res.data],total:res.header['X-Total-Count']-0})},complete:()=>{// 隐藏loading效果wx.hideLoading(),this.setData({isLoading:false})cb && cb()// cb回调函数}})},
/*** 页面上拉触底事件的处理函数*/onReachBottom() {if(this.data.page * this.data.pageSize >= this.data.total){// 没有下一页数据(判断所有数据是否显示完)return wx.showToast({title: '数据加载完毕!',icon:'none'})}if(this.data.isLoading)return // 判断当前是否在请求数据this.setData({// 页码值+1page:this.data.page + 1})this.getShopList()// 获取下一组数据},
在shoplist.json文件中添加以下代码:
{"usingComponents": {},// 引入自定义组件"onReachBottomDistance": 200,// 设置上拉触发距离
}
下拉刷新列表数据
在shoplist.json文件中添加以下代码:
{"enablePullDownRefresh": true,// 开启下拉刷新"backgroundColor": "#efefef",// 下拉刷新背景颜色"backgroundTextStyle": "dark"// 下拉刷新背景样式
}
下拉刷新重新获取第一页数据
/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {// 需要重置关键的数据this.setData({page:1,shopList:[],total:0})// 重新发起数据请求this.getShopList(()=>{wx.stopPullDownRefresh()})},
使用wxs处理手机号
在util.js文件中创建tools.wxs文件,并添加下列代码:
function splitPhone(str){if(str.length!=11) return strvar arr = str.split('')arr.splice(3,0,'-')arr.splice(8,0,'-')return arr.join('')
}
// 对外暴露splitPhone()方法
module.exports = {splitPhone:splitPhone
}
在shoplist.wxml文件中引入wxs脚本
<wxs src="../../utils/tools.wxs" module="tools"></wxs>
在shoplist.wxml文件中使用wxs脚本(修改电话格式)
<text>电话:{{tools.splitPhone(item.phone)}}</text>
整个项目的获取途径
项目中图片获取链接
整个项目下载链接
微信小程序案例---本地生活相关推荐
- 微信小程序_13,本地生活案例
列表页面的api接口: 以分页的形式,加载指定分类下商铺列表的数据 1.接口地址: https://www/escook.cn/categories/:cate_id/shops URL地址中的:ca ...
- 微信小程序与本地数据库的进行基础数据交互的案例——使用Java后台
微信小程序与本地数据库的进行基础数据交互的案例--使用Java后台 案例介绍 本地数据库储存用户信息表 后台Java访问数据库,获得需要数据 小程序端访问服务器 环境配置及需要的项目代码资源: 案例介 ...
- 微信小程序案例TODO备忘录
微信小程序案例TODO备忘录 微信小程序案例TODO备忘录 本节展示一个制作todo备忘录的案例讲解 代码:https://github.com/Harryjun/WeChatPrj/tree/mas ...
- 怎么搭建微信小程序的本地测试服务器
Windows环境下 手把手教你搭建Windows环境微信小程序的本地测试服务器 问题的提出 Mac环境 方便快捷地搭建小程序的测试服务器 小程序对于网络请求的URL的特殊要求 不能出现端口号 不能用 ...
- Uni-app开发微信小程序使用本地图片做背景图
Uni-app开发微信小程序使用本地图片做背景图 <view class="content" :style="{backgroundImage:'url(' + i ...
- 【计算机毕业设计】基于微信小程序的校园生活服务平台
毕设帮助.技术解答.源码交流 联系方式见文末. 一.课题概述 随着互联网时代的到来,移动端应用的发展十分迅猛,校园服务类应用 也是不计其数.但大多功能单一,只能满足学生们的部分需求,无法实现真正的一站 ...
- 微信小程序案例一 成绩计算
微信小程序案例一 :成绩计算 效果图 2.WXML文件 属性 bindinput 的类型为 handlerEvent 除了date/time 类型的输入框,当键盘输入时触发 input 事件,e.de ...
- 《微信小程序案例6》点击图片上传,从本地相册选择或打开摄像头拍摄上传照片
点击一下相机图片实现上传本都相册图片或者打开摄像头拍照上传 使用微信小程序API里面的wx.chooseImage 实现点击并上传图片后把上传的图片放入上面的虚线框里面. 方法: 在wx.choose ...
- 小程序加入人脸识别_人脸识别微信小程序案例:11.案例概述
1案例介绍 本项目将应用python.mongodb.tornado.pymongo.ip2region.dlib.pillow.opencv.werkzeug.wtforms.wxss/wxml/j ...
最新文章
- 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计
- ubuntu12.04中sublime输入中文
- ASCX呼叫ASPX.CS的方法
- 用CRT查找内存泄漏
- Winform中实现连接Mysql8使用mysqldump实现备份表的数据
- web前端技术分享:web前端的求职前景好不好?
- Java解析HTML之HTMLParser使用与详解
- Reddit热议被引最多的机器学习论文:上世纪LSTM称霸,何恺明今年被引1.8w居首...
- libpcap 中的 struct block
- 20155325 2016-2017-2 《Java程序设计》第九周学习总结
- 《游戏程序设计模式》 2.2 - 游戏循环
- 转载:Arcgis 地理配准步骤(底图校正)
- 未来IT互联网企业的发展前景
- Endless无限循环·数字化趋势
- 快递API接口对接分析
- 80核处理器_【装机帮扶站】第690期:12核amp;16核怪兽CPU配置推荐
- 善于计划,善于总结,善于归纳
- 【大话云原生】煮饺子与docker、kubernetes之间的关系
- 心流状态---人们做事时内心的一种状态
- 红米K50配置出炉,红米旗舰对小米有何影响?
热门文章
- 微信开发者调试工具官方下载地址
- 不是吧,win10 自带的表情包这么可爱,不会有人不知道?
- Eclipse-设置格式化代码时不格式化注释
- python xlsx读写实践
- VSCode JS主题风格与样式环境配置 settings.json 文件配置 完成 webstorm风格化配置
- 8086微机实验代码示例解释
- 1、Python量化交易-开发环境与整体架构
- [附源码]JAVA+ssm计算机毕业设计服装创意定制管理系统(程序+Lw)
- Redis基础类型ZSet增删改查(带Java库源码)
- 新iPhone终结单手握持时代:大屏将占据更多注意力