微信小程序 项目实战(三)list 列表页 及 item 详情页

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)效果图

原文地址:https://www.cnblogs.com/crazycode2/p/8274645.html

时间: 2024-08-03 10:51:47

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

【小程序源码案例】微信小程序项目开发案例分享

作者:web小二本文标签: 微信小程序 小程序源码案例 小程序项目小程序的开发,并不是适合所有公司,我今天跟大家分享小程序方面的教程,主要是供大家学习使用.学习这种东西,有时候则是单纯的喜欢,没有任何目的,很单纯的为了好玩,记得很早之前学flash,没有想法,就是觉得好玩,纯娱乐爱好而已.到后来玩视频剪辑也是出于同样的原因,不图钱财名利,只是图自己个人爱好娱乐. 但是,学习,有时候则是需要有明确目的,特别是关系到自己吃饭问题的时候,你就需要非常有目的去学习,并且还需要制定好学习的计划与目标,希望

微信小程序入门(三)

11.开发框架基本介绍 四个组成部分,其它三个前面介绍过了,主要WXS:WXS:对wxml增强的一种脚本语言,可以对请求的数据进行filter或者做计算处理,帮助wxml快速构建出页面结构. 12.WXML之语法 概念 WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合组件.WXS和时间系统,可以构建出页面的结构. 语法 <标签名 属性名=“属性名1” 属性名=“属性名2”...> ...</标签名> 简单例子 <view> Hell

微信小程序把玩(三十六)Storage API

原文:微信小程序把玩(三十六)Storage API 其实这个存储在新建Demo的时候就已经用到了就是存储就是那个logs日志,数据存储主要分为同步和异步 异步存储方法: 存数据 wx.setStorage(object) 相同key会覆盖,可写回调方法 获取方法: wx.getStorage(object) 清除方法: wx.clearStorage()里面可以写回调函数 成功,失败,完成 同步存储方法: 存数据 相同key会覆盖 wx.setStorageSync(key,data) 读数据

微信小程序把玩(三十四)Audio API

原文:微信小程序把玩(三十四)Audio API 没啥可值得太注意的地方 重要属性: 1. wx.getBackgroundAudioPlayerState(object) 获取播放状态 2.wx.playBackgroundAudio(object)播放音乐 3.wx.pauseBackgroundAudio()暂停音乐 4.wx.seekBackgroundAudio(object) 设置播放进度 5.wx.stopBackgroundAudio()停止播放音乐 三个监听器: wxml <b

微信小程序把玩(三十一)wx.uploadFile(object), wx.downloadFile(object) API

原文:微信小程序把玩(三十一)wx.uploadFile(object), wx.downloadFile(object) API 反正我是没有测通这两个API!!!!不知道用的方式不对还是其他的!!!先记录下回头再说... 主要方法: wx.uploadFile(OBJECT)上传 wx.downloadFile(OBJECT)下载 wxml <button type="primary" bindtap="listenerButtonDownLoadFile"

微信小程序开发实战视频教程

微信小程序开发实战视频教程发布 腾讯终于发布了没有APPid,无需申请也可以进行微信小程序开发的视频教程了,我在在第一时间尝试并发布了这7个小视频教程,入门足够了.... 各位免费拿去,慢慢享用: 链接: https://pan.baidu.com/s/1o7DX7q6 密码: ztzq 也可以添加 微信小程序开发者交流QQ群:434276993,只欢迎对微信小程序开发有兴趣的朋友,其他勿加,感谢.

微信小程序把玩(三十八)获取设备信息 API

原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx.onAccelerometerChange, 罗盘数据wx.onCompassChange wxml <button type="primary" bindtap="getNetWorkType">获取网络类型</button> <butt

微信小程序把玩(三十九)navigation API

原文:微信小程序把玩(三十九)navigation API 演示效果也看到了小程序也就提供这几个处理导航控制.值得注意的是只能同时导航五个页面 主要属性: 导航条一些方法 wx.setNavigationBarTitle(object) 设置导航条的Title 导航标题可以通过三种方式设置,第一种是通过全局配置名字统一,第二种就是在page中新建个json文件配置它会覆盖全局配置的title,第三种就是通过API设置. wx.showNavigationBarLoading()设置在导航条上显示

微信开发(2)---微信小程序开发实战part1

微信开发现在来说,简单可以概括为两部分,微信公众号和微信小程序. 微信公众号的技术已经非常成熟.分为服务号和订阅号.简单的.可以弄一个个人订阅号,在编辑模式下就可以实现推送图文.自动回复.自定义菜单的常用功能.切换至开发模式,可以搭服务器,使用php语言及各种成熟接口完成自己想要实现的功能,相对而言非常方便.大家对公众号感兴趣的可以自己去注册个个人订阅号探索一下,微信公众平台跳转: https://mp.weixin.qq.com/ 再来说微信小程序,16年初上线示例,到现在技术已经基本趋于成熟