基于原生小程序精仿猫眼电影,数据API都是在网上抓取的,仅供学习和参考。
有人提供了一个城市列表接口可以获取城市ID:https://maoyan.com/ajax/cities
另外此小程序没有选座功能。选座功能需要页面的缩放、座位的生成、座位的选择、座位的推荐等等,没有实现。网上有很多例子可以参考
关注同名公众号【码农园区】,回复「电影」,获取项目源码
总共18
个page、3
个component、6
个template
├── assets
│ ├── font # 项目的icon文件
│ ├── images # 图片资源
│ └── libs # 三方支持库
├── components
│ ├── filter-nav # 筛选条件组件
│ ├── select-movie # 选择电影组件
│ └── select-time # 选择时间组件
├── pages
│ ├── subPages # 非tab页面
│ │ ├── about-page # “关于”页面
│ │ ├── buy-snack # “购票确认订单”页面
│ │ ├── buy-ticket # “小吃确认订单”页面
│ │ ├── cinema-detail # “影院详情”页面
│ │ ├── cinema-map # “影院地图”页面
│ │ ├── city-select # “选择城市”页面
│ │ ├── comment-page # “评论”页面
│ │ ├── movie-detail # “电影详情”页面
│ │ ├── movie-order # “电影订单”页面
│ │ ├── movie-order-detail # “电影订单详情”页面
│ │ ├── search-page # “搜索”页面
│ │ ├── select-cinema # “选择影院”页面
│ │ ├── snack-order # “小吃订单”页面
│ │ ├── snack-page # “小吃详情”页面
│ │ └── video-page # “电影预告”页面
│ └── tabBar # tab页面
│ ├── cinema # “影院”页面
│ ├── movie # “电影”页面
│ └── user # “我的”页面
├── templates
│ ├── cinemaMap # 影院地图section样式模板
│ ├── cinemaSection # 影院section样式模板
│ ├── commentSection # 评论section样式模板
│ ├── loadingMore # 加载更多功能样式模板
│ ├── movieSection # 电影section样式模板
│ └── nothing # 查询空值样式模板
├── utils
│ └── util.js # 工具函数
├── app.js # 小程序逻辑
├── app.json # 小程序公共配置
├── app.wsxx # 小程序公共样式表
└── project.config.json # 项目配置文件
首页效果图
数据请求
url: 'https://m.maoyan.com/ajax/movieOnInfoList?token=',
success(res) {
const movieList0 = _this.formatImgUrl(res.data.movieList)
wx.hideLoading()
_this.setData({
movieIds0: res.data.movieIds,
movieList0
})
if (res.data.movieList.length >= res.data.movieIds.length) {
_this.setData({
loadComplete0: true
})
}
}
})
完整wxml
{{city}}
正在热映
即将上映
近期最受期待
{{movie.nm}}
{{movie.wish}}人想看
{{movie.comingTitle}}
{{movie.comingTitle}}
附近影院效果图
可根据商圈或者地铁站进行直接查询附件影院,效果图如下
可根据影院名进行直接查询附件影院,效果图如下
还可根据其他具体需求进行直接查询附件影院,效果图如下
获取影院列表
const _this = this;
return new Promise((resolve, reject) => {
wx.request({
url: 'https://m.maoyan.com/ajax/cinemaList',
data: params,
success(res) {
resolve(res.data.cinemas)
_this.setData({
cinemas: _this.data.cinemas.concat(res.data.cinemas),
loadComplete: !res.data.paging.hasMore
})
}
})
})
},
当过滤条件变化时调用的函数
const obj = e.detail
wx.showLoading({
title: '正在加载...'
})
this.setData({
params: { ...this.data.params,
...obj
},
cinemas: [],
nothing: false
}, () => {
this.getCinemas(this.data.params).then((list) => {
if (!list.length) {
this.setData({
nothing: true
})
}
wx.hideLoading()
})
})
},
导航下拉框状态变化时的处理
const item = e.detail.item
this.setData({
isShow: item !== -1
})
},
完整wxml
{{city}}
搜影院
我的效果图
关于信息效果图
其他代码细节,不再赘述,具体可查看源码。
关注同名公众号【码农园区】,回复「电影」,获取项目源码
做的过程中遇到了很多问题,并没有一一记录。总之只用自己写一遍才能更好的发现、理解和解决问题
其他代码细节,不再赘述,具体可查看源码。
▲关注 同名 公众号【码农园区】▲
▲回复「电影」,获取项目源码▲