美文网首页小程序
[微信小程序]列表视频播放,使用Video组件,点击播放自动停止

[微信小程序]列表视频播放,使用Video组件,点击播放自动停止

作者: Liuzz25 | 来源:发表于2018-11-15 22:04 被阅读289次
前言

最近公司有了微信小程序需求,由于没有前端,被抓来做壮丁,原本是做java后端的,所以有何不妥知错敬请谅解,闲来无事,来记录下自己写的前端代码.

实现功能

本次小程序的需求主要如下:
1.视频的列表展示,列表中可播放,也可全屏播放
2.播放第二个视频时,自动停止第一个视频

效果图
效果图.png
主要代码
项目结构.png

Wxml代码如下:

<!--index.wxml-->
<view class="container">
  <!--首页-->
  <scroll-view class='nav-page'>
    <view class="item-box " wx:for="{{dataList}}" wx:key="item">
      <!-- 标题层 -->
      <view class="video-title-box">
        <view class='video-title'>{{item.title}}</view>
      </view>

      <!-- 视频图片层 -->
      <view data-id="{{index}}" class="video-image-box" style="display: {{ _index == index ? 'none' : 'block' }};" bindtap="videoPlay">
        <view class="video-cover-box">
          <image class="video-image" src="{{item.cover}}" mode="aspectFit">
          </image>
        </view>
        <!-- 视频按钮 -->
        <image class="video-image-play" src="/image/icon_short.png" mode="scaleToFill"></image>
      </view>

      <!-- 视频播放层 -->
      <video src="{{item.content}}" data-id="{{index}}" class='video' wx:if="{{_index == index}}" objectFit='contain' autoplay='true' controls></video>

    </view>
  </scroll-view>

</view>

Js代码如下:

//index.js
//获取应用实例
const app = getApp()

Page({
  data: {
    videoPlay: null,
    dataList: [],
  },
  onLoad: function () {
    this.getData();
    wx.hideShareMenu();
  },
  // 点击cover播放,其它视频结束
  videoPlay: function (e) {
    var _index = e.currentTarget.dataset.id
    this.setData({
      _index: _index
    })
    //停止正在播放的视频
    var videoContextPrev = wx.createVideoContext(_index+"")
    videoContextPrev.stop();
    setTimeout(function () {
      //将点击视频进行播放
      var videoContext = wx.createVideoContext(_index + "")
      videoContext.play();
    }, 500)
  },

  // 模拟数据加载
  getData: function () {
    this.setData({
      //  此数据过于长,为了美观再次用省略号代替 ,后面源码会提供.
      dataList: [...]
    });

  }
})

Wcss代码在此就不展示了,设计到逻辑处的代码也都添加了注释,在此就不再解释了.

源码

https://gitee.com/OrgXxxx/WechartMiniProgramVideoPlayList/tree/master

遇到的第一个坑

在最开始的时候,用的是微信提供的Scroll-view嵌套video组件,结果在测试的时候,IOS点击全屏播放时,出现如下左侧所示的分屏,返回列表后第二次点击全屏又正常了。但是在Android上测试有没有这种问题。


image.png

经过千辛万苦查找翻看文档,终于在微信scroll-view文档的底部发现了如下提示,于是把scroll-view 改成了上面代码中的view,就解决了。果然看文档不能囫囵吞枣啊!

Bug & Tip
tip: 请勿在 scroll-view 中使用 textarea、map、canvas、video 组件
tip: scroll-into-view 的优先级高于 scroll-top
tip: 在滚动 scroll-view 时会阻止页面回弹,所以在 scroll-view 中滚动,是无法触发 onPullDownRefresh
tip: 若要使用下拉刷新,请使用页面的滚动,而不是 scroll-view ,这样也能通过点击顶部状态栏回到页面顶部
遇到的第二个坑

一些图片在IOS真机上显示不出,调试模式上图片的尺寸、地址全都正常,电脑直接访问图片地址都没问题,Android也是没出现这个问题。简直天坑啊!

百度、谷歌了一番后,发现了,出现问题的图片格式为WebP(WebP格式,谷歌开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器宽带资源和数据空间。)IOS不兼容。

解决方案倒是挺简单,直接把图片格式转换为jpg就行了。(本人懒,于是正则替换地址处理的)

相关文章

网友评论

    本文标题:[微信小程序]列表视频播放,使用Video组件,点击播放自动停止

    本文链接:https://www.haomeiwen.com/subject/lxeufqtx.html