微信小程序实例--仿豆瓣电影

最近不想写论文,就想捣鼓点新东西吧,就边看官方文档,花了3天时间写了一个简单的仿豆瓣电影的微信小程序,给大家分享一下教程吧。
源码&效果图
源码点击这里,欢迎star
运行方法:
- 下载微信web开发者工具
 - 新建项目,项目目录为代码存放目录
 - 点击开发者工具中的编译即可在模拟器里看到
 
效果图如下



开发环境与项目简介
微信提供了一个微信开发者工具,可以完成小程序的 API 和页面的开发调试、代码查看和编辑、小程序预览和发布等功能。下载地址下载后,打开该工具,选择代码目录和申请的AppID,勾选quickStart选项,这样会创建几个基础页面。

正好在写代码的第二天,微信开发者工具就全新改版,比原来好多了,原来的console调试界面与编辑代码不在同一个页面,十分麻烦,现在就像平时前端调试一样,调试界面与代码编辑页面在同一个界面,方便多了。

项目代码结构

这里说一下,在新建目录后,可以选择添加page,js,wxml,wxss,json文件,如果直接添加page文件的话,会直接在该目录下生成与目录相同名字的四个不同后缀文件的组成,如:index.js、index.wxml、index.wxss、index.json。.js后缀的文件是脚本文件,.json后缀的文件是配置文件,.wxss后缀的是样式表文件,.wxml后缀的文件是页面结构文件。
豆瓣电影API
- 【获取正在上映电影】https://api.douban.com/v2/movie/in_theaters
 - 【获取豆瓣TOP250电影】https://api.douban.com/v2/movie/top250
 - 【 获取即将上映电影】https://api.douban.com/v2/movie/coming_soon
 - 【获取具体某一电影信息】https://api.douban.com/v2/movie/subject/:id
 
详细数据情况可看https://developers.douban.com/wiki/?title=movie_v2
其实前三个API返回的数据都是一致的,只是返回的电影类型数据不一样而已,所以在list页面,我们只要传入不同的类型即可。在电影列表页和首页,都有展示电影的基础信息(海报,名字,评分),所以可以把这个部分拿出来做一个模板公用。大体的思路就是这样,比较简单。
配置小程序窗口和导航栏
在根目录下的app.json文件中配置小程序的窗口样式和导航栏

属性信息如图,来自官网


点击上方的“编译”,就可以看到效果

我们在调试具体某一个页面的时候,可以添加面板上方中间的”添加编译模式”,填写相关参数,这样就不用从首页进去调试了。

具体代码编写
这里只讲一下首页代码的情况,其他页面用到的属性基本雷同。这里不介绍小程序的使用语法,请先在官网上浏览个大概
wx.showLoading()
在最开始进入页面时,还没加载完数据时,我们想要有一个loading效果,可直接使用小程序的apiwx.showLoading(OBJECT)显示 loading 提示框, 需主动调用 wx.hideLoading 才能关闭提示框
onLoad: function () {
    wx.showLoading({
      title: '全力加载中...',
    })
}
加载完,需要关闭时,就只需要调用即可wx.hideLoading();
onLoad 表示监听页面加载
wx.request()
请求数据调用wx.request();详细属性介绍点击这里
因为请求电影列表在list和index页面都需要用到,所以我在app.js作为一个全局的方法来写
getFilminfo:function(pageType,start,count,cb) {//电影列表类型,开始数据下标,请求总数,callback函数
    var that = this;
    wx.request({
      url: that.globalData.basicUrl +"/" + pageType + '?start=' + start + '&count=' + count,
      // url:url,
      header: {
        "Content-Type": "json",
      },
      success: function (res) {
        cb(res);
      }
    })
  },
  globalData: {
    userInfo: null,
    basicUrl:"https://api.douban.com/v2/movie",
    pageTypelist: {"coming_soon":"即将上映","in_theaters":"正在热映","top250":"TOP250电影"}
  }
然而,在调用接口的时候发现了这样的错误

原因是我在开发配置里,没有豆瓣api的域名添加到request合法域名里,所以只要在配置里加上需要的即可


所以在index.js中,调用这个全局方法如下:
//获取应用实例
var app = getApp()
Page({
data: {
motto: 'Hello World',
userInfo: {},
films:[{},{},{}]
},
onLoad: function () {
wx.showLoading({
title: '全力加载中...',
})
console.log('onLoad')
var that = this;
var typelist = ["in_theaters","coming_soon","top250"];
var titlelist = ["正在热映","即将上映", "TOP250电影"];
for(let i = 0;i<typelist.length;i++){
var type = typelist[i];
app.getFilminfo(type, 0, 8, function (res) {
wx.hideLoading();
var data = res.data;
data.subjects.map(function (item) {
if (item.title.length > 8) {
item.title = item.title.slice(0, 7) + "...";
}
if (item.rating.average>=9.5){
item.rating.star = "star10";
}else{
item.rating.star = "star" + Math.round(item.rating.average);
}
console.log(item.rating.star);
})
that.data.films[i] = {title:titlelist[i],data:data.subjects,type:typelist[i]};
that.setData({
films: that.data.films
});
console.log(that.data.films);
})
}
}
})
我们通过“更多”按钮跳转到对应的电影列表list页面,所以需要绑定事件
在index.wxml中,
<button bindtap="toView" data-type="{{filminfo.type}}" class="more-btn" plain="false">更多></button>
bindtap就是对应是事件名字,同时我们需要设置data-type属性,属性值即是电影列表类型在index.js中
toView: function(e) {
    var temp = e.currentTarget.dataset;//获取当前组件上由data-开头的自定义属性组成的集合
    wx.navigateTo({
      url: '../list/list?type=' + temp.type//temp.type即是当时data-type属性值
    })
  },
wx.navigateTo()就是路由跳转的api
模板
因为电影的基础信息展示在多个页面中都有用到,我们单独提出来写个电影预览模板
toView: function(e) {
    var temp = e.currentTarget.dataset;//获取当前组件上由data-开头的自定义属性组成的集合
    wx.navigateTo({
      url: '../list/list?type=' + temp.type//temp.type即是当时data-type属性值
    })
  },
模板名字设置为“movieThumb”
例如在首页中有用到该模块,那在index.wxml中如下调用即可
<import src="../template/movieThumb.wxml" />
 <scroll-view scroll-x="true" class="filmlist">
        <template is="movieThumb" wx:for-items="{{filminfo.data}}"  wx:for-item="film" wx:key="id" data="{{...film}}">
        </template>
</scroll-view>
先写到这里吧,其他代码看github上的即可,具体还是要多看文档,写个项目练练,就很容易上手啦!
原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=2971
微信小程序实例--仿豆瓣电影的更多相关文章
- 边做边学入门微信小程序之仿豆瓣评分
		
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
 - 微信小程序实例源码大全
		
微信小程序实例源码大全下载 微信小应用示例代码(phodal/weapp-quick)源码链接:https://github.com/phodal/weapp-quick 微信小应用地图定位demo( ...
 - 微信小程序实例源码大全下载
		
小程序QQ交流群:131894955 小程序开发直播腾讯课堂: https://edu.csdn.net/course/detail/6743 微信小程序实例源码大全下载 微信小应用示例代码(p ...
 - 微信小程序实例源码大全2
		
wx-gesture-lock 微信小程序的手势密码 WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小说搜索 sh ...
 - 微信小程序实例代码
		
http://blog.csdn.net/zuoliangzhu/article/details/53862576#t1 项目结构 └─ empty-folder/ ················· ...
 - 微信小程序实例-获取当前的地理位置、速度
		
微信小程序官方文档 https://mp.weixin.qq.com/debug/wxadoc/dev/api/location.html JS代码 //index.js //获取应用实例 var a ...
 - 微信小程序实例教程(一)
		
序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序 ...
 - 微信小程序实例-摇一摇抽奖
		
概述 前面我们讲了如何开始微信小程序搭建和一些组件的介绍.微信小组件和微信小程序入门 微信小程序目录 为了更好的理解小程序和小程序开发,我们首先来看一下项目的目录. 首先看下根目录下的app.json ...
 - 微信小程序开发(3) 热门电影
		
在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发热门电影及预览功能. 本文主要分为两个部分,小程序主体部分及电影主页和详情页页面部分 一.小程序主体部分 一个小程序主体部分由三个文件组成, ...
 
随机推荐
- 【D3】D3词汇表
			
按字母顺序 axis:数轴或坐标轴表示两个维度上数据尺度的直线 bar chart:条形图 (参见Excel)以矩形宽度反映数值大小的图表形式 bar:条形以宽度反映数值大小的矩形(rect) bin ...
 - dubbo&hsf&spring-cloud简单介绍
			
Dubbo: 简介:Dubbo是一个分布式服务框架,以及SOA治理方案.其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等. 底部NIO基于netty ...
 - 白话ASP.NET MVC之一:Url 路由
			
好久没有写关于ASP.NET MVC的东西了,虽然<ASP.NET MVC4框架揭秘>已经完完整整的看完一遍,但是感觉和一锅粥差不多,没什么可写的,因为我自己不理解,也就写不出来.现在开始 ...
 - C——Network Saboteur (POJ2531)
			
题目: A university network is composed of N computers. System administrators gathered information on t ...
 - 安装完jdk配置环境变量
			
(1)新建->变量名"JAVA_HOME",变量值"C:\Java\jdk1.8.0_05"(即JDK的安装路径) (2)编辑->变量名" ...
 - Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()"
			
思路:采用递归的思想,当左括号数大于右括号数时可以加左或者右括号,否则只能加左括号,当左括号数达到n时,剩下全部.不过,每一个方法的调用都会产生一个栈帧,每执行一个方法就会出现压栈操作,所以采用递归的 ...
 - Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
			
写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
 - 【新发现】不用苹果开发账号就能申请ios证书真机调试
			
虽然xcode现在可以免证书进行测试了,但众多跨平台开发者,如果还没注册苹果开发者账号. 想安装到自己非越狱手机测试是无能为力了. 不过新技术来了,只需要普通免费的苹果账号无需付费成为开发者就可以申请 ...
 - kill 和killall----杀死进程
			
1.根据进程ip查看进程名 Liunx中 通过进程名查找进程PID可以通过 pidof [进程名] 来查找. 反过来 ,通过PID查找进程名则没有相关命令.但在linux根目录中,有一个/proc的 ...
 - MySQL xtrabackup之--databases 勿手贱
			
xtrabackup备份单库时,必须指定--databases,但是如果将databases写成了database,那么xtrabackup备份的就是整个数据库,以下是 uuid = 397ae42e ...