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)效果图
请发表评论