├── .editorconfig ├── LICENSE ├── README.md ├── app.js ├── app.json ├── app.wxss ├── comm ├── script │ ├── config.js │ └── fetch.js └── style │ ├── animation.wxss │ └── tab.wxss ├── component ├── filmList │ ├── filmList.wxml │ └── filmList.wxss ├── list │ ├── list.wxml │ └── list.wxss ├── message │ ├── message.js │ ├── message.wxml │ └── message.wxss └── nullTip │ ├── nullTip.wxml │ └── nullTip.wxss ├── dist └── images │ ├── coming_active_icon.png │ ├── coming_icon.png │ ├── green_tri.png │ ├── my_active_icon.png │ ├── my_icon.png │ ├── popular_active_icon.png │ ├── popular_icon.png │ ├── search_active_icon.png │ ├── search_icon.png │ ├── top_active_icon.png │ └── top_icon.png ├── pages ├── about │ ├── about.js │ ├── about.json │ ├── about.wxml │ └── about.wxss ├── coming │ ├── coming.js │ ├── coming.json │ ├── coming.wxml │ └── coming.wxss ├── editPersonInfo │ ├── editPersonInfo.js │ ├── editPersonInfo.json │ ├── editPersonInfo.wxml │ └── editPersonInfo.wxss ├── favorite │ ├── favorite.js │ ├── favorite.json │ ├── favorite.wxml │ └── favorite.wxss ├── filmDetail │ ├── filmDetail.js │ ├── filmDetail.json │ ├── filmDetail.wxml │ └── filmDetail.wxss ├── gallery │ ├── gallery.js │ ├── gallery.json │ ├── gallery.wxml │ └── gallery.wxss ├── history │ ├── history.js │ ├── history.json │ ├── history.wxml │ └── history.wxss ├── location │ ├── location.js │ ├── location.json │ ├── location.wxml │ └── location.wxss ├── my │ ├── my.js │ ├── my.json │ ├── my.wxml │ └── my.wxss ├── personDetail │ ├── personDetail.js │ ├── personDetail.json │ ├── personDetail.wxml │ └── personDetail.wxss ├── personInfo │ ├── personInfo.js │ ├── personInfo.json │ ├── personInfo.wxml │ └── personInfo.wxss ├── popular │ ├── popular.js │ ├── popular.json │ ├── popular.wxml │ └── popular.wxss ├── search │ ├── search.js │ ├── search.json │ ├── search.wxml │ └── search.wxss ├── searchResult │ ├── searchResult.js │ ├── searchResult.json │ ├── searchResult.wxml │ └── searchResult.wxss ├── setting │ ├── setting.js │ ├── setting.json │ ├── setting.wxml │ └── setting.wxss ├── shake │ ├── shake.js │ ├── shake.json │ ├── shake.wxml │ └── shake.wxss ├── skin │ ├── skin.js │ ├── skin.json │ ├── skin.wxml │ └── skin.wxss ├── systemInfo │ ├── systemInfo.js │ ├── systemInfo.json │ ├── systemInfo.wxml │ └── systemInfo.wxss └── top │ ├── top.js │ ├── top.json │ ├── top.wxml │ └── top.wxss ├── resource └── logo.png └── util └── util.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | insert_final_newline = true 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Sesine 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

logo

2 | 3 | # 🎬 电影推荐小程序 v2.0 4 | 5 | 🎉 查看页面UI请点击:[https://sesine.com/mina](https://sesine.com/mina/) 6 | 7 | 🌠 此项目使用了大部分微信的api,封装了一些UI组件。如果对您有帮助,请给一个⭐️Star。如果在使用过程中发现问题,请给我 [反馈](https://github.com/sesine/wechat-weapp-movie/issues/new) 我会尽量在第一时间解决。 8 | 9 | ## 🔌 使用方法 10 | 11 | 1. 克隆或下载此项目 12 | 2. 在微信开发者工具导入此项目 13 | 3. 域名设置 14 | - 如果有自己的APPID,可以使用自己的APPID,并在微信后台添加可信域名 `https://sesine.com/` 和 `https://sesine.com/mina/api/`。 15 | - 如果没有自己的APPID,可以使用测试APPID。开发时勾选 `不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书` 的选项,如果需要在手机上预览,并且出现api无法访问的问题。请在 [微信小程序测试号管理](https://developers.weixin.qq.com/sandbox) 里面添加上一条中的二个可信域名。 16 | 4. 开发、体验与反馈。发现问题时,可以给我 [反馈](https://github.com/sesine/wechat-weapp-movie/issues/new) 17 | 18 | 19 | ## ❤️ 感谢与支持 20 | - 豆瓣api https://sesine.com/ (代理豆瓣api) 21 | 22 | > 由于微信服务器请求豆瓣api次数过多,已经禁止微信小程序请求。请使用新的api地址请求,请将原来的api请求地址从 `https://api.douban.com/v2/` 改为 `https://sesine.com/mina/api/` 即可,api请求的参数不变。 23 | 24 | - 百度地图 http://lbsyun.baidu.com/ 25 | 26 | ## 🚀 v2.0更新内容 27 | 28 | - 将搜索从页面转移到首页面的搜索框 29 | - 增加了电影与人物的浏览历史、收藏功能 30 | - 添加“我的页面”(重头戏) 31 | - 添加摇一摇、相册模块 32 | - 添加设置功能,可清除缓存、编辑个人资料、查看手机信息、更新地理位置 33 | - 添加关于页面,里面列举除了项目中所有使用到的api 34 | 35 | ## 📅 更新日志 36 | 37 | > v1.0的旧版本代码可以通过master分支中的 [tag](https://github.com/sesine/wechat-weapp-movie/tree/v1.0) 中找到 38 | 39 | - **v1.8.0** 2016-11-20 40 | + 1.添加下拉刷新功能 41 | + 2.列表改为模板渲染 42 | + 3.封装了api请求的代码提高可复用性 43 | 44 | - **v1.7.0** 2016-11-21 45 | + 1.添加人物的详情页 46 | + 2.将电影详情和人物详情的网络请求进行了封装 47 | 48 | - **v1.6.0** 2016-11-22 49 | + 1.添加了消息通知组件 50 | + 2.搜索页调整 51 | + 3.调整了目录结构,整合静态资源(dist)和组件文件(component) 52 | 53 | - **v1.5.0** 2016-11-25 54 | + 1.将网络请求从wx.request改为fetch的方式 55 | + 2.完成搜索功能 56 | + 3.完成消息通知组件 57 | + 4.删除了没有用到的util文件夹 58 | 59 | - **v1.4.0** 2016-12-03 60 | + 1.将电影列表的下拉刷新从scroll-view的bindscrolltolower改为Page的onReachBottom事件触发 61 | + 2.将“我的”页面的文件补全,功能列表改为数据渲染,添加跳转。新增换肤 62 | + 3.删除了tabBar中的搜索选项,添加“我的”选项 63 | + 4.首页搜索栏(点击跳转到搜索页)添加轮播图 64 | + 5.添加定位功能,在小程序载入时进行定位 65 | + 6.添加浏览记录、收藏、相册、设置、摇一摇功能(都在开发中) 66 | 67 | - **v1.3.0** 2016-12-04 68 | + 1.将api列表 banner列表、搜索关键词列表、皮肤列表整合配置文件(config.js) 69 | + 2.完成换肤、设置、个人资料(还差修改)、摇一摇功能(再次进入不能摇的问题还需解决) 70 | + 3.添加util文件及文件夹,用于封装获取并格式化时间等工具类方法 71 | + 4.消息组件修改,删除了成功、失败等情况,避免与wx.showToast重合,添加了网络不正常的提示 72 | + 5.电影详情页面添加存储浏览历史的功能 73 | 74 | - **v1.2.0** 2016-12-06 75 | + 1.完成电影收藏和人物收藏功能 76 | + 2.搜索页面添加为空时的提示页面并封装成组件 77 | 78 | - **v1.1.0** 2016-12-14 79 | + 1.完成相册功能和关于页面 80 | + 2.添加定位功能(gps) 81 | 82 | - **v1.0.0** 2016-12-24 83 | + 1.相册的背景图片方式改成image标签的方式 84 | + 2.添加摇一摇debug测试开关变量 85 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var config = require('comm/script/config') 2 | App({ 3 | globalData: { 4 | userInfo: null 5 | }, 6 | onLaunch: function() { 7 | // 获取用户信息 8 | this.getUserInfo() 9 | //初始化缓存 10 | this.initStorage() 11 | }, 12 | getUserInfo:function(cb){ 13 | var that = this 14 | wx.login({ 15 | success: function () { 16 | wx.getUserInfo({ 17 | success: function (res) { 18 | that.globalData.userInfo = res.userInfo 19 | typeof cb == "function" && cb(that.globalData.userInfo) 20 | } 21 | }) 22 | } 23 | }) 24 | }, 25 | getCity: function(cb) { 26 | var that = this 27 | wx.getLocation({ 28 | type: 'gcj02', 29 | success: function (res) { 30 | var locationParam = res.latitude + ',' + res.longitude + '1' 31 | wx.request({ 32 | url: config.apiList.baiduMap, 33 | data: { 34 | ak: config.baiduAK, 35 | location: locationParam, 36 | output: 'json', 37 | pois: '1' 38 | }, 39 | method: 'GET', 40 | success: function(res){ 41 | config.city = res.data.result.addressComponent.city.slice(0,-1) 42 | typeof cb == "function" && cb(res.data.result.addressComponent.city.slice(0,-1)) 43 | }, 44 | fail: function(res) { 45 | // 重新定位 46 | that.getCity(); 47 | } 48 | }) 49 | } 50 | }) 51 | }, 52 | initStorage: function() { 53 | wx.getStorageInfo({ 54 | success: function(res) { 55 | // 判断电影收藏是否存在,没有则创建 56 | if (!('film_favorite' in res.keys)) { 57 | wx.setStorage({ 58 | key: 'film_favorite', 59 | data: [] 60 | }) 61 | } 62 | // 判断人物收藏是否存在,没有则创建 63 | if (!('person_favorite' in res.keys)) { 64 | wx.setStorage({ 65 | key: 'person_favorite', 66 | data: [] 67 | }) 68 | } 69 | // 判断电影浏览记录是否存在,没有则创建 70 | if (!('film_history' in res.keys)) { 71 | wx.setStorage({ 72 | key: 'film_history', 73 | data: [] 74 | }) 75 | } 76 | // 判断人物浏览记录是否存在,没有则创建 77 | if (!('person_history' in res.keys)) { 78 | wx.setStorage({ 79 | key: 'person_history', 80 | data: [] 81 | }) 82 | } 83 | // 个人信息默认数据 84 | var personInfo = { 85 | name: '', 86 | nickName: '', 87 | gender: '', 88 | age: '', 89 | birthday: '', 90 | constellation: '', 91 | company: '', 92 | school: '', 93 | tel: '', 94 | email:'', 95 | intro: '' 96 | } 97 | // 判断个人信息是否存在,没有则创建 98 | if (!('person_info' in res.keys)) { 99 | wx.setStorage({ 100 | key: 'person_info', 101 | data: personInfo 102 | }) 103 | } 104 | // 判断相册数据是否存在,没有则创建 105 | if (!('gallery' in res.keys)) { 106 | wx.setStorage({ 107 | key: 'gallery', 108 | data: [] 109 | }) 110 | } 111 | // 判断背景卡选择数据是否存在,没有则创建 112 | if (!('skin' in res.keys)) { 113 | wx.setStorage({ 114 | key: 'skin', 115 | data: '' 116 | }) 117 | } 118 | } 119 | }) 120 | } 121 | }) -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": [ 3 | "pages/popular/popular", 4 | "pages/coming/coming", 5 | "pages/top/top", 6 | "pages/search/search", 7 | "pages/filmDetail/filmDetail", 8 | "pages/personDetail/personDetail", 9 | "pages/searchResult/searchResult", 10 | "pages/my/my", 11 | "pages/favorite/favorite", 12 | "pages/history/history", 13 | "pages/shake/shake", 14 | "pages/gallery/gallery", 15 | "pages/setting/setting", 16 | "pages/skin/skin", 17 | "pages/personInfo/personInfo", 18 | "pages/editPersonInfo/editPersonInfo", 19 | "pages/systemInfo/systemInfo", 20 | "pages/about/about", 21 | "pages/location/location" 22 | ], 23 | "window": { 24 | "navigationBarBackgroundColor": "#47a86c", 25 | "navigationBarTextStyle": "white", 26 | "navigationBarTitleText": "电影推荐", 27 | "backgroundColor": "#fff", 28 | "backgroundTextStyle": "dark", 29 | "enablePullDownRefresh": true 30 | }, 31 | "tabBar": { 32 | "color": "#686868", 33 | "selectedColor": "#47a86c", 34 | "backgroundColor": "#ffffff", 35 | "borderStyle": "white", 36 | "list": [{ 37 | "pagePath": "pages/popular/popular", 38 | "iconPath": "dist/images/popular_icon.png", 39 | "selectedIconPath": "dist/images/popular_active_icon.png", 40 | "text": "热映" 41 | }, { 42 | "pagePath": "pages/coming/coming", 43 | "iconPath": "dist/images/coming_icon.png", 44 | "selectedIconPath": "dist/images/coming_active_icon.png", 45 | "text": "待映" 46 | }, 47 | { 48 | "pagePath": "pages/top/top", 49 | "iconPath": "dist/images/top_icon.png", 50 | "selectedIconPath": "dist/images/top_active_icon.png", 51 | "text": "口碑" 52 | }, 53 | { 54 | "pagePath": "pages/my/my", 55 | "iconPath": "dist/images/my_icon.png", 56 | "selectedIconPath": "dist/images/my_active_icon.png", 57 | "text": "我的" 58 | }] 59 | }, 60 | "networkTimeout": { 61 | "request": 10000, 62 | "downloadFile": 10000 63 | }, 64 | "debug": true 65 | } -------------------------------------------------------------------------------- /app.wxss: -------------------------------------------------------------------------------- 1 | page { 2 | display: block; 3 | background-color: #fff; 4 | font-family: "微软雅黑"; 5 | font-size: 28rpx; 6 | } 7 | 8 | .loading { 9 | position: fixed; 10 | left: 50%; 11 | top: 50%; 12 | width: 200rpx; 13 | height: 200rpx; 14 | margin: -100rpx 0 0 -100rpx; 15 | line-height: 300rpx; 16 | border-radius: 16rpx; 17 | background-image: url(data:image/gif;base64,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); 18 | background-position: center 40rpx; 19 | background-repeat: no-repeat; 20 | background-size: 80rpx; 21 | background-color: rgba(0, 0, 0, 0.85); 22 | color: #fff; 23 | text-align: center; 24 | font-size: 24rpx; 25 | animation: bounceIn .3s; 26 | } -------------------------------------------------------------------------------- /comm/script/config.js: -------------------------------------------------------------------------------- 1 | /* 2 | 备注 3 | city: 城市(在程序载入时获取一次) 4 | count: 返回结果数量 5 | baiduAK: 百度地图AK 6 | apiList: api列表 7 | hotKeyword: 搜索页热门关键词关键词 8 | hotTag: 搜索页热门类型 9 | bannerList: 首页(热映页)轮播图列表列表 10 | skinList: “我的”页面背景列表 11 | shakeSound: 摇一摇音效地址(带staticUrl表示远程地址) 12 | shakeWelcomeImg: 摇一摇欢迎图片 13 | */ 14 | // 静态资源地址 15 | var staticUrl = 'https://static.sesine.com/wechat-weapp-movie' 16 | // api地址 17 | var apiUrl = 'https://sesine.com/mina/api' 18 | module.exports = { 19 | city: '', 20 | count: 20, 21 | baiduAK: 'Y1R5guY8Y2GNRdDpLz7SUeM3QgADAXec', 22 | apiList: { 23 | popular: apiUrl + '/movie/in_theaters', 24 | coming: apiUrl + '/movie/coming_soon', 25 | top: apiUrl + '/movie/top250', 26 | search: { 27 | byKeyword: apiUrl + '/movie/search?q=', 28 | byTag: apiUrl + '/movie/search?tag=' 29 | }, 30 | filmDetail: apiUrl + '/movie/subject/', 31 | personDetail: apiUrl + '/movie/celebrity/', 32 | baiduMap: 'https://api.map.baidu.com/geocoder/v2/' 33 | }, 34 | hotKeyword: ['功夫熊猫', '烈日灼心', '摆渡人', '长城', '我不是潘金莲', '这个杀手不太冷', '驴得水', '海贼王之黄金城', '西游伏妖片', '我在故宫修文物', '你的名字'], 35 | hotTag: ['动作', '喜剧', '爱情', '悬疑'], 36 | bannerList: [ 37 | {type:'film', id: '26683290', imgUrl: staticUrl + '/images/banner_1.jpg'}, 38 | {type:'film', id: '25793398', imgUrl: staticUrl + '/images/banner_2.jpg'}, 39 | {type:'film', id: '26630781', imgUrl: staticUrl + '/images/banner_3.jpg'}, 40 | {type:'film', id: '26415200', imgUrl: staticUrl + '/images/banner_4.jpg'}, 41 | {type:'film', id: '3025375', imgUrl: staticUrl + '/images/banner_5.jpg'} 42 | ], 43 | skinList: [ 44 | {title: '公路', imgUrl: staticUrl + '/images/user_bg_1.jpg'}, 45 | {title: '黑夜森林', imgUrl: staticUrl + '/images/user_bg_2.jpg'}, 46 | {title: '鱼与水', imgUrl: staticUrl + '/images/user_bg_3.jpg'}, 47 | {title: '山之剪影', imgUrl: staticUrl + '/images/user_bg_4.jpg'}, 48 | {title: '火山', imgUrl: staticUrl + '/images/user_bg_5.jpg'}, 49 | {title: '科技', imgUrl: staticUrl + '/images/user_bg_6.jpg'}, 50 | {title: '沙漠', imgUrl: staticUrl + '/images/user_bg_7.jpg'}, 51 | {title: '叶子', imgUrl: staticUrl + '/images/user_bg_8.jpg'}, 52 | {title: '早餐', imgUrl: staticUrl + '/images/user_bg_9.jpg'}, 53 | {title: '英伦骑车', imgUrl: staticUrl + '/images/user_bg_10.jpg'}, 54 | {title: '草原', imgUrl: staticUrl + '/images/user_bg_11.jpg'}, 55 | {title: '城市', imgUrl: staticUrl + '/images/user_bg_12.jpg'} 56 | ], 57 | shakeSound: { 58 | startUrl: staticUrl + '/sound/shake.mp3', 59 | start: '', 60 | completeUrl: staticUrl + '/sound/shakeComplete.wav', 61 | complete: '' 62 | }, 63 | shakeWelcomeImg: staticUrl + '/images/shake_welcome.png' 64 | } 65 | -------------------------------------------------------------------------------- /comm/script/fetch.js: -------------------------------------------------------------------------------- 1 | var config = require('./config.js') 2 | var message = require('../../component/message/message') 3 | 4 | // 获取电影列表 5 | function fetchFilms(url, start, count, cb, fail_cb) { 6 | var that = this 7 | message.hide.call(that) 8 | if (that.data.hasMore) { 9 | wx.request({ 10 | url: url, 11 | data: { 12 | city: config.city, 13 | start: start, 14 | count: config.count 15 | }, 16 | method: 'GET', 17 | header: { 18 | "Content-Type": "application/json,application/json" 19 | }, 20 | success: function(res){ 21 | if(res.data.subjects.length === 0){ 22 | that.setData({ 23 | hasMore: false, 24 | }) 25 | }else{ 26 | that.setData({ 27 | films: that.data.films.concat(res.data.subjects), 28 | start: that.data.start + res.data.subjects.length, 29 | showLoading: false 30 | }) 31 | console.log(that.data.start); 32 | } 33 | wx.stopPullDownRefresh() 34 | typeof cb == 'function' && cb(res.data) 35 | }, 36 | fail: function() { 37 | that.setData({ 38 | showLoading: false 39 | }) 40 | message.show.call(that,{ 41 | content: '网络开小差了', 42 | icon: 'offline', 43 | duration: 3000 44 | }) 45 | wx.stopPullDownRefresh() 46 | typeof fail_cb == 'function' && fail_cb() 47 | } 48 | }) 49 | } 50 | } 51 | 52 | // 获取电影详情 53 | function fetchFilmDetail(url, id, cb) { 54 | var that = this; 55 | message.hide.call(that) 56 | wx.request({ 57 | url: url + id, 58 | method: 'GET', 59 | header: { 60 | "Content-Type": "application/json,application/json" 61 | }, 62 | success: function(res){ 63 | that.setData({ 64 | filmDetail: res.data, 65 | showLoading: false, 66 | showContent: true 67 | }) 68 | wx.setNavigationBarTitle({ 69 | title: res.data.title 70 | }) 71 | wx.stopPullDownRefresh() 72 | typeof cb == 'function' && cb(res.data) 73 | }, 74 | fail: function() { 75 | that.setData({ 76 | showLoading: false 77 | }) 78 | message.show.call(that,{ 79 | content: '网络开小差了', 80 | icon: 'offline', 81 | duration: 3000 82 | }) 83 | } 84 | }) 85 | } 86 | 87 | // 获取人物详情 88 | function fetchPersonDetail(url, id, cb) { 89 | var that = this; 90 | message.hide.call(that) 91 | wx.request({ 92 | url: url + id, 93 | method: 'GET', 94 | header: { 95 | "Content-Type": "application/json,application/json" 96 | }, 97 | success: function(res){ 98 | that.setData({ 99 | personDetail: res.data, 100 | showLoading: false, 101 | showContent: true 102 | }) 103 | wx.setNavigationBarTitle({ 104 | title: res.data.name 105 | }) 106 | wx.stopPullDownRefresh() 107 | typeof cb == 'function' && cb(res.data) 108 | }, 109 | fail: function() { 110 | that.setData({ 111 | showLoading: false 112 | }) 113 | message.show.call(that,{ 114 | content: '网络开小差了', 115 | icon: 'offline', 116 | duration: 3000 117 | }) 118 | } 119 | }) 120 | } 121 | 122 | // 搜索(关键词或者类型) 123 | function search(url, keyword, start, count, cb){ 124 | var that = this 125 | message.hide.call(that) 126 | var url = decodeURIComponent(url) 127 | if (that.data.hasMore) { 128 | wx.request({ 129 | url: url + keyword, 130 | data: { 131 | start: start, 132 | count: count 133 | }, 134 | method: 'GET', 135 | header: { 136 | "Content-Type": "application/json,application/json" 137 | }, 138 | success: function(res){ 139 | if(res.data.subjects.length === 0){ 140 | that.setData({ 141 | hasMore: false, 142 | showLoading: false 143 | }) 144 | }else{ 145 | that.setData({ 146 | films: that.data.films.concat(res.data.subjects), 147 | start: that.data.start + res.data.subjects.length, 148 | showLoading: false 149 | }) 150 | wx.setNavigationBarTitle({ 151 | title: keyword 152 | }) 153 | } 154 | wx.stopPullDownRefresh() 155 | typeof cb == 'function' && cb(res.data) 156 | }, 157 | fail: function() { 158 | that.setData({ 159 | showLoading: false 160 | }) 161 | message.show.call(that,{ 162 | content: '网络开小差了', 163 | icon: 'offline', 164 | duration: 3000 165 | }) 166 | } 167 | }) 168 | } 169 | } 170 | module.exports = { 171 | fetchFilms: fetchFilms, 172 | fetchFilmDetail: fetchFilmDetail, 173 | fetchPersonDetail: fetchPersonDetail, 174 | search: search 175 | } -------------------------------------------------------------------------------- /comm/style/animation.wxss: -------------------------------------------------------------------------------- 1 | @keyframes fadeIn { 2 | from { 3 | opacity: 0; 4 | } 5 | to { 6 | opacity: 1; 7 | } 8 | } 9 | 10 | @keyframes fadeInDown { 11 | from { 12 | opacity: 0; 13 | transform: translate3d(0, -100%, 0); 14 | } 15 | to { 16 | opacity: 1; 17 | transform: none; 18 | } 19 | } 20 | 21 | @keyframes fadeInUp { 22 | from { 23 | opacity: 0; 24 | transform: translate3d(0, 100%, 0); 25 | } 26 | to { 27 | opacity: 1; 28 | transform: none; 29 | } 30 | } 31 | 32 | @keyframes bounceIn { 33 | from, 20%, 40%, 60%, 80%, to { 34 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 35 | } 36 | 0% { 37 | opacity: 0; 38 | transform: scale3d(.3, .3, .3); 39 | } 40 | 20% { 41 | transform: scale3d(1.1, 1.1, 1.1); 42 | } 43 | 40% { 44 | transform: scale3d(.9, .9, .9); 45 | } 46 | 60% { 47 | opacity: 1; 48 | transform: scale3d(1.03, 1.03, 1.03); 49 | } 50 | 80% { 51 | transform: scale3d(.97, .97, .97); 52 | } 53 | to { 54 | opacity: 1; 55 | transform: scale3d(1, 1, 1); 56 | } 57 | } 58 | 59 | @keyframes fadeInRight { 60 | from { 61 | opacity: 0; 62 | -webkit-transform: translate3d(100%, 0, 0); 63 | transform: translate3d(100%, 0, 0); 64 | } 65 | 66 | to { 67 | opacity: 1; 68 | -webkit-transform: none; 69 | transform: none; 70 | } 71 | } 72 | 73 | 74 | @keyframes fadeInLeft { 75 | from { 76 | opacity: 0; 77 | -webkit-transform: translate3d(-100%, 0, 0); 78 | transform: translate3d(-100%, 0, 0); 79 | } 80 | 81 | to { 82 | opacity: 1; 83 | -webkit-transform: none; 84 | transform: none; 85 | } 86 | } -------------------------------------------------------------------------------- /comm/style/tab.wxss: -------------------------------------------------------------------------------- 1 | page{ 2 | background-color: #fcfcfc; 3 | } 4 | 5 | .tab-header { 6 | box-sizing: border-box; 7 | position: fixed; 8 | top: 0; 9 | left: 0; 10 | display: table; 11 | width: 750rpx; 12 | height: 80rpx; 13 | background-color: #fff; 14 | border-bottom: 1px solid #eee; 15 | } 16 | 17 | .tab-header-item { 18 | display: table-cell; 19 | height: 80rpx; 20 | line-height: 80rpx; 21 | text-align: center; 22 | } 23 | 24 | .tab-header-item:active { 25 | background-color: #f8f8f8; 26 | } 27 | 28 | .tab-header-active { 29 | border-bottom: 4rpx solid #47a86c; 30 | } 31 | 32 | .tab-content { 33 | margin-top: 80rpx; 34 | } 35 | 36 | .tab-content-item { 37 | box-sizing: border-box; 38 | padding: 30rpx; 39 | } -------------------------------------------------------------------------------- /component/filmList/filmList.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /component/filmList/filmList.wxss: -------------------------------------------------------------------------------- 1 | @import "../../comm/style/animation.wxss"; 2 | .film { 3 | box-sizing: border-box; 4 | width: 750rpx; 5 | padding: 10rpx 15rpx; 6 | display: flex; 7 | flex-wrap: wrap; 8 | flex-direction: row; 9 | justify-content: space-between; 10 | box-shadow: 0 0 40rpx #f4f4f4 inset; 11 | } 12 | 13 | .film-item { 14 | width: 350rpx; 15 | margin-bottom: 20rpx; 16 | border-radius: 10rpx; 17 | background-color: #fff; 18 | border: 1px solid #e4e4e4; 19 | box-shadow: 0 20rpx 40rpx #eee; 20 | overflow: hidden; 21 | animation: fadeIn 1s; 22 | } 23 | 24 | .film-cover, .film-cover-img { 25 | width: 350rpx; 26 | height: 508rpx; 27 | } 28 | 29 | .film-cover { 30 | position: relative; 31 | overflow: hidden; 32 | } 33 | 34 | .film-rating { 35 | box-sizing: border-box; 36 | position: absolute; 37 | bottom: 0; 38 | left: 0; 39 | width: 100%; 40 | height: 50rpx; 41 | padding-right: 20rpx; 42 | font-size: 12px; 43 | text-align: right; 44 | line-height: 50rpx; 45 | background-color: rgba(0, 0, 0, .65); 46 | color: #fff; 47 | } 48 | 49 | .file-intro { 50 | padding: 16rpx; 51 | margin-top: -8rpx; 52 | } 53 | 54 | .film-title { 55 | white-space: nowrap; 56 | text-overflow: ellipsis; 57 | overflow: hidden; 58 | } 59 | 60 | .film-tag { 61 | width: 100%; 62 | margin-top: 10rpx; 63 | display: flex; 64 | justify-content: flex-start; 65 | } 66 | 67 | .film-tag-item { 68 | padding: 4rpx 6rpx; 69 | margin-right: 10rpx; 70 | font-size: 24rpx; 71 | box-shadow: 0 0 0 1px #ccc; 72 | border-top: 1px solid #fff; 73 | border-radius: 10rpx; 74 | background-color: #fafafa; 75 | color: #666; 76 | } 77 | 78 | .loading-tip { 79 | width: 100%; 80 | height: 80rpx; 81 | line-height: 80rpx; 82 | text-align: center; 83 | color: #ccc; 84 | } -------------------------------------------------------------------------------- /component/list/list.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /component/list/list.wxss: -------------------------------------------------------------------------------- 1 | page { 2 | background: #f4f4f4; 3 | } 4 | 5 | .cells { 6 | position: relative; 7 | margin: 20rpx 0; 8 | background: #fff; 9 | overflow: hidden; 10 | } 11 | 12 | .cells::before, .cells::after { 13 | content: ''; 14 | display: block; 15 | position: absolute; 16 | z-index: 99; 17 | left: 0; 18 | width: 100%; 19 | height: 1px; 20 | transform-origin: 0 0; 21 | transform: scaleY(0.5); 22 | background-color: #e5e5e5; 23 | } 24 | 25 | .cells::before { 26 | top: 0; 27 | } 28 | 29 | .cells::after { 30 | bottom: 0; 31 | } 32 | 33 | .cell { 34 | display: flex; 35 | justify-content: space-between; 36 | position: relative; 37 | box-sizing: border-box; 38 | width: 750rpx; 39 | height: 100rpx; 40 | padding: 0 40rpx; 41 | font-size: 32rpx; 42 | line-height: 100rpx; 43 | } 44 | 45 | .cell:first-child::before { 46 | display: none; 47 | } 48 | 49 | .cell::before { 50 | content: ''; 51 | display: block; 52 | position: absolute; 53 | z-index: 99; 54 | top: 0; 55 | left: 40rpx; 56 | width: 100%; 57 | height: 1px; 58 | transform-origin: 0 0; 59 | transform: scaleY(0.5); 60 | background-color: #e5e5e5; 61 | } 62 | 63 | .cell:active { 64 | background-color: #fafafa; 65 | } 66 | 67 | .cell-ft{ 68 | color: #bbb; 69 | } 70 | 71 | .cell-access .cell-ft { 72 | padding-right: 13px; 73 | position: relative; 74 | } 75 | 76 | .cell-access .cell-ft::after { 77 | content: ''; 78 | display: inline-block; 79 | height: 6px; 80 | width: 6px; 81 | border-width: 2px 2px 0 0; 82 | border-color: #C8C8CD; 83 | border-style: solid; 84 | transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0); 85 | position: absolute; 86 | top: 50%; 87 | margin-top: -4px; 88 | right: 2px; 89 | } -------------------------------------------------------------------------------- /component/message/message.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | show: function(cfg) { 3 | var that = this 4 | that.setData({ 5 | message: { 6 | content: cfg.content, 7 | icon: cfg.icon, 8 | visiable: true 9 | } 10 | }) 11 | if (typeof cfg.duration !== 'undefined') { 12 | setTimeout(function(){ 13 | that.setData({ 14 | message: { 15 | visiable: false 16 | } 17 | }) 18 | }, cfg.duration) 19 | } 20 | }, 21 | hide: function() { 22 | var that = this 23 | that.setData({ 24 | message: { 25 | visiable: false 26 | } 27 | }) 28 | } 29 | } -------------------------------------------------------------------------------- /component/message/message.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /component/message/message.wxss: -------------------------------------------------------------------------------- 1 | @import "../../comm/style/animation.wxss"; 2 | .message-area { 3 | position: fixed; 4 | width: 100%; 5 | height: 100%; 6 | z-index: 99; 7 | } 8 | 9 | .message { 10 | box-sizing: border-box; 11 | position: fixed; 12 | z-index: 999; 13 | left: 50%; 14 | top: 50%; 15 | width: 250rpx; 16 | height: 250rpx; 17 | padding: 20rpx; 18 | margin-top: -125rpx; 19 | margin-left: -125rpx; 20 | display: flex; 21 | justify-content: center; 22 | flex-direction: column; 23 | align-items: center; 24 | border-radius: 16rpx; 25 | background-color: rgba(0, 0, 0, .75); 26 | color: #fff; 27 | animation: fadeIn .6s; 28 | } 29 | 30 | .message-icon { 31 | height: 100rpx; 32 | width: 100rpx; 33 | background-position: center; 34 | background-repeat: no-repeat; 35 | background-size: 100rpx; 36 | } 37 | 38 | .message-icon-offline { 39 | background-image: url(data:image/png;base64,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); 40 | } 41 | 42 | .message-icon-null { 43 | background-image: url(data:image/png;base64,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); 44 | } 45 | 46 | .message-content { 47 | margin-top: 15rpx; 48 | text-align: center; 49 | } -------------------------------------------------------------------------------- /component/nullTip/nullTip.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /component/nullTip/nullTip.wxss: -------------------------------------------------------------------------------- 1 | .null-tip { 2 | height: 400rpx; 3 | margin: 120rpx 0; 4 | background-image: url(data:image/png;base64,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); 5 | background-repeat: no-repeat; 6 | background-position: center; 7 | background-size: 140rpx 112rpx; 8 | line-height: 800rpx; 9 | text-align: center; 10 | color: #999; 11 | } 12 | 13 | .null-action { 14 | margin: 0 auto; 15 | width: 200rpx; 16 | height: 80rpx; 17 | line-height: 80rpx; 18 | text-align: center; 19 | border-radius: 8rpx; 20 | border: 1px solid #47a86c; 21 | color: #47a86c; 22 | } 23 | 24 | .null-action:active { 25 | background-color: #47a86c; 26 | color: #fff; 27 | } -------------------------------------------------------------------------------- /dist/images/coming_active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/coming_active_icon.png -------------------------------------------------------------------------------- /dist/images/coming_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/coming_icon.png -------------------------------------------------------------------------------- /dist/images/green_tri.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/green_tri.png -------------------------------------------------------------------------------- /dist/images/my_active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/my_active_icon.png -------------------------------------------------------------------------------- /dist/images/my_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/my_icon.png -------------------------------------------------------------------------------- /dist/images/popular_active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/popular_active_icon.png -------------------------------------------------------------------------------- /dist/images/popular_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/popular_icon.png -------------------------------------------------------------------------------- /dist/images/search_active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/search_active_icon.png -------------------------------------------------------------------------------- /dist/images/search_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/search_icon.png -------------------------------------------------------------------------------- /dist/images/top_active_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/top_active_icon.png -------------------------------------------------------------------------------- /dist/images/top_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/top_icon.png -------------------------------------------------------------------------------- /pages/about/about.js: -------------------------------------------------------------------------------- 1 | Page({ 2 | data:{ 3 | 4 | }, 5 | onLoad:function(options){ 6 | // 页面初始化 options为页面跳转所带来的参数 7 | } 8 | }) -------------------------------------------------------------------------------- /pages/about/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "关于", 3 | "enablePullDownRefresh": false 4 | } -------------------------------------------------------------------------------- /pages/about/about.wxml: -------------------------------------------------------------------------------- 1 | 2 | 电影推荐 3 | 4 | 5 | 后端支持 6 | 豆瓣API:https://developers.douban.com/ 7 | 百度地图API:http://lbsyun.baidu.com/ 8 | 9 | 10 | 作者 11 | sesine:https://github.com/yesifeng 12 | 13 | 14 | 此项目所使用到的API 15 | 16 | wx.request、wx.chooseImage、wx.previewImage、wx.playVoice、wx.saveFile、wx.setStorage、wx.getStorage、wx.clearStorage、wx.getStorageInfo、wx.getLocation、wx.getSystemInfo、wx.onAccelerometerChange、wx.showToast、wx.showModal、wx.showActionSheet、wx.setNavigationBarTitle、wx.navigateTo、wx.redirectTo、wx.login 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /pages/about/about.wxss: -------------------------------------------------------------------------------- 1 | page { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | 6 | view { 7 | width: 100%; 8 | } 9 | 10 | .weapp-about { 11 | width: 100%; 12 | height: 100%; 13 | display: flex; 14 | flex-wrap: wrap; 15 | justify-content: center; 16 | align-content: space-around; 17 | align-items: center; 18 | } 19 | 20 | .weapp-name { 21 | font-size: 60rpx; 22 | text-align: center; 23 | color: #555; 24 | } 25 | 26 | .webapp-intro { 27 | box-sizing: border-box; 28 | padding: 60rpx; 29 | height: 900rpx; 30 | } 31 | 32 | .webapp-intro-item { 33 | margin-bottom: 40rpx; 34 | } 35 | 36 | .webapp-intro-title { 37 | margin-bottom: 10rpx; 38 | font-size: 32rpx; 39 | color: #666; 40 | } 41 | 42 | .webapp-intro-content { 43 | color: #ccc; 44 | } -------------------------------------------------------------------------------- /pages/coming/coming.js: -------------------------------------------------------------------------------- 1 | var douban = require('../../comm/script/fetch') 2 | var config = require('../../comm/script/config') 3 | Page({ 4 | data: { 5 | films: [], 6 | hasMore: true, 7 | showLoading: true, 8 | start: 0 9 | }, 10 | onLoad: function() { 11 | var that = this 12 | douban.fetchFilms.call(that, config.apiList.coming, that.data.start) 13 | }, 14 | onPullDownRefresh: function() { 15 | var that = this 16 | that.setData({ 17 | films: [], 18 | hasMore: true, 19 | showLoading: true, 20 | start: 0 21 | }) 22 | douban.fetchFilms.call(that, config.apiList.coming, that.data.start) 23 | }, 24 | onReachBottom: function() { 25 | var that = this 26 | if (!that.data.showLoading) { 27 | douban.fetchFilms.call(that, config.apiList.coming, that.data.start) 28 | } 29 | }, 30 | viewFilmDetail: function(e) { 31 | var data = e.currentTarget.dataset; 32 | wx.navigateTo({ 33 | url: "../filmDetail/filmDetail?id=" + data.id 34 | }) 35 | }, 36 | viewFilmByTag: function(e) { 37 | var data = e.currentTarget.dataset 38 | var keyword = data.tag 39 | wx.navigateTo({ 40 | url: '../searchResult/searchResult?url=' + encodeURIComponent(config.apiList.search.byTag) + '&keyword=' + keyword 41 | }) 42 | } 43 | }) -------------------------------------------------------------------------------- /pages/coming/coming.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "即将上映" 3 | } -------------------------------------------------------------------------------- /pages/coming/coming.wxml: -------------------------------------------------------------------------------- 1 | 2 |