1.项目结构

2.list 列表页

(1)数据(逻辑)

list.js

// pages/list/list.js
Page({ /**
* 页面的初始数据
*/
data: {
title: '加载中...', // 状态
list: [], // 数据列表
type: '', // 数据类型
loading: true // 显示等待框
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) { // options 为 board页传来的参数
const _this = this;
// 拼接请求url
const url = 'https://api.douban.com/v2/movie/' + options.type;
// 请求数据
wx.request({
url: url,
data: {},
header: {
'content-type': 'json' // 默认值
},
success: function(res) {
console.log(res.data);
// 赋值
_this.setData({
title: res.data.title,
list: res.data.subjects,
type: options.type,
loading: false // 关闭等待框
})
}
})
}
})

(2)页面布局

list.wxml

<!--pages/list/list.wxml-->
<!--列表页-->
<view class='container'>
<!--等待框-->
<loading hidden="{{!loading}}">加载中...</loading>
<!--顶部标题栏-->
<view class='page-header'>
<text class='page-title'>{{title}}</text>
</view>
<!--列表-->
<view class='page-body' wx:for="{{list}}" wx:key="id">
<!--类型判断,显示不同的数据-->
<block wx:if="{{type === 'us_box'}}">
<navigator url='../item/item?id={{item.subject.id}}'>
<view class='item'>
<image class='poster' src='{{item.subject.images.small}}'></image>
<view class='meta'>
<text class='title'>{{item.subject.title}}</text>
<text class='sub-title'>{{item.subject.original_title}}({{item.subject.year}})</text>
<view class='artists'>
<text>导演:</text>
<text wx:for="{{item.subject.directors}}" wx:key="id">{{item.name}}</text>
</view>
<view class='rating'>
<text>{{item.subject.rating.average}}</text>
</view>
</view>
</view>
</navigator>
</block>
<!--另一种情况-->
<block wx:else>
<navigator url='../item/item?id={{ item.id }}'>
<view class='item'>
<image class='poster' src='{{item.images.small}}'></image>
<view class='meta'>
<text class='title'>{{item.title}}</text>
<text class='sub-title'>{{item.original_title}}({{item.year}})</text>
<view class='artists'>
<text>导演:</text>
<text wx:for="{{item.directors}}" wx:key="id">{{item.name}}</text>
</view>
<view class='rating'>
<text>{{item.rating.average}}</text>
</view>
</view>
</view>
</navigator>
</block>
</view>
</view>

(3)样式

list.wxss

/* pages/list/list.wxss */
.page-header {
display: flex;
justify-content: center;
border-bottom: 1rpx solid #ccc;
}
.page-title {
padding: 20rpx 40rpx;
color: #999;
font-size: 38rpx;
text-align: center;
}
.page-body {
display: flex;
flex: 1;
flex-direction: column;
}
.item {
display: flex;
padding: 20rpx 40rpx;
border-bottom: 1rpx solid #eee;
cursor: pointer;
}
.item .poster {
width: 128rpx;
height: 128rpx;
margin-right: 20rpx;
}
.item .meta {
flex: 1;
}
.item .meta .title,.item .meta .sub-title {
display: block;
margin-bottom: 15rpx;
}
.item .meta .title {
font-size: 32rpx;
}
.item .meta .sub-title {
font-size: 22rpx;
color: #c0c0c0;
}
.item .meta .artists {
font-size: 26rpx;
color: #999;
}
.item .rating {
font-size: 28rpx;
font-weight: bold;
color: #f74c31;
}
.tips {
font-size: 28rpx;
text-align: center;
padding: 50rpx;
color: #ccc;
}
.tips image {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
}
.tips image,.tips text {
vertical-align: middle;
}

(4)效果图

3.item 详情页

(1)数据(逻辑)

item.js

// pages/item/item.js
Page({ /**
* 页面的初始数据
*/
data: {
title: '',
loading: true,
movie: {}
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
const _this = this;
// 拼接请求url
const url = 'https://api.douban.com/v2/movie/subject/' + options.id;
// 请求数据
wx.request({
url: url,
data: {},
header: {
'content-type': 'json' // 默认值
},
success:function(res) {
// 赋值
_this.setData({
movie: res.data,
loading: false // 隐藏等待框
})
}
})
}, /**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
// 修改导航栏标题
wx.setNavigationBarTitle({
title: this.data.title + '<<电影<<豆瓣'
})
}
})

(2)页面布局

item.wxml

<!--pages/item/item.wxml-->
<!--详情页-->
<!--等待框-->
<loading hidden="{{!loading}}">加载中...</loading>
<!--滚动列表-->
<scroll-view scroll-y="true" wx:if="{{movie.title}}">
<view class='meta'>
<image class='poster' src='{{movie.images.large}}' background-size="cover"></image>
<text class='title'>{{movie.title}}({{movie.year}})</text>
<text class='info'>评分:{{movie.rating.average}}</text>
<text class='info'>导演:<block wx:for="{{movie.directors}}" wx:key="id">{{item.name}}</block></text>
<text class='info'>主演:<block wx:for="{{movie.casts}}" wx:key="id">{{item.name}}</block></text>
</view>
<view class='summary'>
<text class='label'>摘要:</text>
<text class='content'>{{movie.summary}}</text>
</view>
</scroll-view>

(3)样式

item.wxss

/* pages/item/item.wxss */
.meta {
display: flex;
flex-direction: column;
align-items: center;
height: 1000rpx;
padding: 50rpx 40rpx;
}
.poster {
width: 80%;
height: 80%;
margin: 20rpx;
}
.title {
font-size: 42rpx;
color: #444;
}
.info {
font-size: 18rpx;
color: #888;
margin-top: 20rpx;
width: 80%;
}
.summary {
width: 80%;
margin: 30rpx auto;
}
.label {
display: block;
}
.content {
color: #666;
font-size: 20rpx;
padding: 10rpx;
}

(4)效果图

微信小程序 项目实战(三)list 列表页 及 item 详情页的更多相关文章

  1. 微信小程序项目实战之天气预报

    概述 微信小程序项目实战之天气预报 详细 代码下载:http://www.demodashi.com/demo/10634.html 一.准备工作 1.注册微信小程序 2.注册和风天气账号 3.注册百 ...

  2. 微信小程序项目实战之豆瓣天气

    概述 微信小程序项目实战之豆瓣天气 详细 代码下载:http://www.demodashi.com/demo/10943.html 一.准备工作 1.注册微信小程序 2.在小程序设置中设置reque ...

  3. 微信小程序项目实战 - 菜谱大全

    1. 项目简介 最近研究小程序云开发,上线了一个有关菜品查询的小程序.包括搜索.分享转发.收藏.查看历史记录等功能.菜谱 API 来自聚合数据.云开发为开发者提供完整的云端支持,弱化后端和运维概念,无 ...

  4. 微信小程序 项目实战(一)生命周期 配置服务器信息 splash启动页

    步骤一:小程序 生命周期 //app.js App({ onLaunch: function () { //当小程序初始化完成时,会触发onLaunch(全局只触发一次) }, onShow: fun ...

  5. 微信小程序 项目实战(二)board 首页

    1.项目结构 2.页面 (1)数据(逻辑) board.js // pages/board/board.js Page({ /** * 页面的初始数据 */ data: { imgWrap: [] } ...

  6. 《微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记1)WePY开发环境的安装

    WePY的安装或更新都通过npm进行,全局安装或更新WePY命令行工具,使用以下命令: npm install wepy-cli -g 稍等片刻,成功安装后,即可创建WePY项目. 注意:如果npm安 ...

  7. 微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记4)支持React.js语法的Taro框架

    Taro本身实现的情况类似于mpvue,mpvue的未来展望中也包含了支付宝小程序,现在的版本中,也可以使用不同的构建命令来构建出百度小程序的支持,如第10章所示,但是现在Taro先于mpvue实现了 ...

  8. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  9. 微信小程序开发01 --- 微信小程序项目结构介绍

    一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...

随机推荐

  1. 在CNN网络中roi从原图映射到feature map中的计算方法

    在使用fast rcnn以及faster rcnn做检测任务的时候,涉及到从图像的roi区域到feature map中roi的映射,然后再进行roi_pooling之类的操作.比如图像的大小是(600 ...

  2. 0xc000007b——应用程序无法正常启动

    0xc000007b——应用程序无法正常启动 原因:缺少exe程序启动所需要的DLL.

  3. pc端移动端兼容的大图轮播

    body, html { width: 100%; } * { margin:; padding:; list-style: none; } .haha { list-style-type: none ...

  4. CentOS6.8下安装Docker

    原文章链接https://www.cnblogs.com/baolong/p/5743420.html. 由于在自己安装的虚拟机上打开linux终端命令行输入uname -a 以及cat /etc/r ...

  5. SSM调用数据库存储过程

    ServiceImpl中: Map<String,Object> map=new HashMap<String,Object>(); map.put("bid&quo ...

  6. iptables之FORWARD转发链

    注意:本机路由转发的时候,才配置FORWARD转发链! #iptables –A FORWARD –s 192.168.0.0/24 –j ACCEPT #iptables –A FORWARD –d ...

  7. ExtJS前端框架EXT弹出窗口事件

    https://blog.csdn.net/alsyuan/article/details/73240841 Ext.MessageBox.alert()Ext.MessageBox.alert()提 ...

  8. Laya 类列表加载优化

    Laya 类列表加载优化 @author ixenos 类列表:在一个页面展示的大量的零散单元的集合(聊天面板.背包) 一.按展示优化1.展示内容少,即使大量数据,但用户只看到少量信息的时候,考虑按需 ...

  9. [luoguP2447] [SDOI2010]外星千足虫(高斯消元 + bitset)

    传送门 用bitset优化,要不然n^3肯定超时 消元过程中有几点需要注意,找到最大元后break,保证题目中所说的K最小 如果有自由元说明解很多,直接返回 #include <bitset&g ...

  10. POJ 2391 Ombrophobic Bovines【二分 网络流】

    题目大意:F个草场,P条道路(无向),每个草场初始有几头牛,还有庇护所,庇护所有个容量,每条道路走完都有时间,问所有奶牛都到庇护所最大时间最小是多少? 思路:和POJ2112一样的思路,二分以后构建网 ...