微信小程序> 微信小程序电影详情功能实现

微信小程序电影详情功能实现

浏览量:2294 时间: 来源:ddddyla

实现电影详情页

主要实现的功能是:点击热映及top列表中的电影可以跳转到电影详情页面

一、主要需求:

  1. 基本的布局改变(多使用flex布局),图文混排
  2. 事件处理;网络请求
  3. 水平滚动scroll-view的实现

二、关键实现思路:

  1. 使用bindtap绑定点击事件,给电影列表中的每一条信息循环绑定一个点击事件,当点击时,将从网络获取的电影id传到处理函数中,再请求网络获取电影详情信息,返回并显示页面。
  2. 详情页上部分显示电影宣传海报,影片名及影片的基本信息,中间显示电影请节简介,下部分显示主演照片及姓名。对于过长的篇幅的处理是是页面可以进行上下滑动。

三、实际代码:

对热映及top电影列表页的改变:
修改index和movetop文件夹下的index.wxml文件。
index下的index.wxml:(更改布局及类型)

<!--index.wxml--><view class="box">  <!--轮播图-->  <swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">    <block wx:for="{{imgUrls}}" wx:key="{{item}}">      <swiper-item>        <image src="{{item}}" />      </swiper-item>    </block>  </swiper>  <!--热映列表展示-->     <view class="item" bindtap="showInfo" data-id="{{item.id}}" hover-class="tapClass"  wx:for="{{moves}}" wx:key="{{item}}">       <image class="img" mode="aspectFit" src="{{item.images.large}}"></image>       <view class="movie-info">      <view class="movie-row">        <span class="content">{{item.title}}</span>      </view>                <view class="movie-row">          <text class="label">主演:</text>          <span class="label" wx:key="{{item.id}}"  wx:for="{{item.casts}}"             wx:for-item="cast">             <text class="cast-name">{{cast.name}}</text>          </span>        </view>         <view class="movie-row">          <text class="label">导演:</text>          <span class="label" wx:key="{{item.id}}"  wx:for="{{item.directors}}"               wx:for-item="director">             <text class="cast-name">{{director.name}}</text>        </span>        </view>         <view class="movie-row">          <text class="label">类型:</text>          <span class="label" wx:key="{{item.id}}"  wx:for="{{item.genres}}"         wx:for-item="item">             <text class="cast-name">{{item}}</text>                     </span>        </view>       </view>    </view>  </view> 

movetop文件夹下的index.wxml:

<view class="box">  <view class="item" bindtap="showInfo" data-id="{{item.id}}" hover-class="tapClass"  wx:for="{{moves}}" wx:key="{{item}}">    <image class="img" mode="aspectFit" src="{{item.images.large}}"></image>    <view class="movie-info">      <view class="movie-row">        <span class="content">{{item.title}}</span>      </view>      <view class="movie-row">        <span  class="label">导演:  </span>        <span class="label" wx:key="{{item.id}}"  wx:for="{{item.directors}}"               wx:for-item="director">             <text class="cast-name">{{director.name}}</text>        </span>      </view>       <view class="movie-row">        <span  class="label">主演:  </span>        <span class="label" wx:key="{{item.id}}"  wx:for="{{item.casts}}"                wx:for-item="cast">             <text class="cast-name">{{cast.name}}</text>        </span>      </view>    </view>  </view></view>

添加index.wxss文件内容(添加新格式):

/* pages/moveTop/index.wxss *//**index.wxss**/swiper-item > image {  width: 100%;  height: 200px;  padding: 0px;}.box{  display: flex;  flex-direction:  column;  justify-content: flex-start}.item{  display: inline-flex;  margin-bottom: 3rpx;  background-color:  white;  justify-content: flex-start;  padding-top: 30rpx}.movie-info{  flex:2;  display: flex;  flex-direction: column}.img{  flex:1;  height:210rpx;  width: 140rpx;}.cast{  display: inline-flex;  flex-direction:  row}.tapClass{  background-color: blanchedalmond}.movie-row{  display: inline-flex;  flex-direction: row;  flex-wrap: wrap}.label{   font-size:28rpx;  color: slategrey}.content{   font-size: 36rpx}.cast-name{  font-size: 28rpx;  margin-right: 16rpx}

然后开发电影详情页:
在pages目录下新建一个detail目录,在detail目录中新建页面wxml文件,注意这里scroll-view水平滚动图文信息的实现。

使用bindtap绑定点击事件,给电影列表中的每一条信息循环绑定一个点击事件,当点击时,将从网络获取的电影id传到处理函数中,再请求网络获取电影详情信息,返回并显示页面。

<!--pages/detail/detail.wxml--><view class="detail-container">  <view class="img-container">    <image mode="aspectFit" src="{{detail.images.large}}"/>   </view>  <view class="info-container">      <view class="info-row">          <text>{{detail.title}}</text>          <br/>      </view>      <view class="info-row">          {{detail.genres}} | {{detail.durations[0]}}      </view>      <view class="info-row">          {{detail.mainland_pubdate}} 在中国大陆上映      </view>    </view></view><view class="movie-intr">    {{detail.summary}}</view><view class="person-container">  <view class="act-info">演员</view>  <scroll-view scroll-x class="scroll-header" >      <view class="act-img" wx:for="{{detail.casts}}"  wx:key="{{item.id}}">      <view>          <image mode="aspectFill" src="{{item.avatars.large}}">          </image>          <text class="actor-name">                {{item.name}}          </text>      </view>      </view></scroll-view></view><view>    <button class="btn-like" type="primary" bindtap="addToLikes"     data-id="{{detail.id}}">    </button></view>

样式wxss文件:

/* pages/detail/detail.wxss */.detail-container{  display: flex;  flex-direction: row;  flex-wrap: nowrap;  justify-content: center;  background-color: darkslategrey}.img-container{  flex: 1;}.img-container image{  width:320rpx;  height: 220rpx}.info-container{  flex: 2;  display: flex;  flex-direction: column;  justify-content: space-between;  margin: 20rpx 0 20rpx 0}.info-row{  font-size: 24rpx;  color: white}.movie-intr{  background-color:  ghostwhite;  font-size: 26rpx;  padding: 40rpx;  line-height: 40rpx}.scroll-header{display: flex;flex-direction: column;white-space: nowrap;   }.scroll-header view{border:none;display: inline-block;  }.scroll-header image{  width:200rpx;  height: 300rpx;  margin: 6rpx 6rpx 6rpx 6rpx}.act-info{  font-size: 28rpx;  margin-left: 10rpx}.act-img{  display: flex;  flex-direction: column;  justify-content: left;  margin-left: 5rpx}.actor-name{  font-size: 28rpx;  display: flex;  flex-direction: column;  justify-content: center;  margin-left: 5rpx}.btn-like{  margin: 30rpx 40rpx 20rpx 40rpx}

detail.js文件:接收其他页面传递过来的参数,加载影片信息并显示。

/** * 页面的初始数据 */Page({data: {  },  /** * 生命周期函数--监听页面加载 */onLoad: function (options) {  //接收其他页面传递过来的参数  let movieId = options.id, that = this;  wx.showLoading({    title: '加载影片信息中...',  })  wx.request({    url: "http://api.douban.com/v2/movie/subject/" + movieId,    data: {      apikey: '0b2bdeda43b5688921839c8ecb20399b'    },    //url: "https://douban.uieee.com/v2/movie/subject/" + movieId,    header: {      "Content-Type": "json"    },    success: function (res) {      that.setData({ detail: res.data });      wx.hideLoading()    }  })  }})

此时,程序的运行效果如下:
小程序
小程序
小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎