微信小程序实现抖音切换视频效果

微信小程序实现抖音切换视频效果

思路:

  1. 使用微信小程序的swiper组件,使其竖向滑动

  2. 分页加载,每次加载3个视频,当滑动到只剩1个视频时加载下一页

问题:

  • 加载多个视频时,多个视频会同时播放

效果图:
在这里插入图片描述在这里插入图片描述代码:

  • index.json文件:
{
  "usingComponents": {},
  "navigationStyle":"custom",
  "navigationBarTextStyle":"white"
}

**

**-

  • index.wxml文件:

**
wx:if="{{index==q_videoIndex}}" 用于控制只播放当前视频,否则多个视频会同时播放没刷到的也会播放

<!--index.wxml-->
<swiper class="q_swiper" circular="{{true}}" vertical="{{true}}" bindchange="q_swiperBindchange">
    <block wx:for="{{q_videos}}" wx:key="q_videos">
        <swiper-item>
            <view class="q_videoView">
                <!-- wx:if="{{index==q_videoIndex}}" 用于控制只播放当前视频,否则多个视频会同时播放没刷到的也会播放 -->
                <video wx:if="{{index==q_videoIndex}}" src="{{item.url}}" autoplay="{{true}}" loop="{{true}}" show-fullscreen-btn="{{false}}" play-btn-position="center" enable-play-gesture="{{true}}"></video>
            </view>
        </swiper-item>
    </block>
</swiper>

  • index.wxss文件:
/**index.wxss**/
page{
  width: 100%;
  height: 100%;
}

.q_swiper{
  width: 100%;
  height: 100%;
  background-color: #000;
}

.q_videoView{
  width: 100%;
  height: 100%;
  position: relative;
}

.q_videoView video{
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
}

  • index.js文件:

    videoList内的视频地址为临时地址,届时视频链接可能失效,如果视频链接失效,您只需自己随意找几个视频替换掉地址即可

//index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    q_videos: [], //视频
    q_videoIndex: 0, //视频index
    q_yjz: false, //是否允许预加载
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // videoList内的视频地址为临时地址,届时视频链接可能失效,如果视频链接失效,您只需自己随意找几个视频替换掉地址即可
    var videoList = [{
      id: '1',
      url: "http://sns-1255549670.cos.ap-guangzhou.myqcloud.com/tmp_29f5566f128e9a4ee470f30c310b63678b7e786e2ab03ac2.mp4?0.42363964325301695",
    }, {
      id: '2',
      url: "http://sns-1255549670.cos.ap-guangzhou.myqcloud.com/tmp_4eeae5bfcad7f75ec481b5ad87f4a9102ea7c735df672d18.mp4?0.9295834871549054",
    }, {
      id: '3',
      url: "http://sns-1255549670.cos.ap-guangzhou.myqcloud.com/tmp_7a9caafe0a37a460686fcf2a4a6dc492e0e44119c10cc47b.mp4?0.401603295588834",
    }]
    this.setData({
      q_videos: videoList, //视频
      // 每次加载3个视频,当获取的视频数量小于3时,证明没有后续视频了,也就不需要在进行预加载了
      q_yjz: videoList.length < 3 ? false : true, //是否允许预加载
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  //动态更新当前视频下标
  q_swiperBindchange: function (e) {
    console.log('当前视频下标:', e.detail.current)
    this.setData({
      q_videoIndex: e.detail.current
    })
    // 当加载的视频还剩1个未被滑到时加载下一页
    if (this.data.q_videos.length - (e.detail.current + 1) == 1 && this.data.q_yjz) {
      this.q_yjzVideos() //预加载视频
    }
  },

  //预加载视频
  q_yjzVideos: function () {
    console.log('预加载视频')
    var videoList = [{
      id: '4',
      url: "http://sns-1255549670.cos.ap-guangzhou.myqcloud.com/tmp_b0855d9c92f6ce4cd91796e8b1ca39a78bca4d48f524bb06.mp4?0.27723747875520743",
    }, {
      id: '5',
      url: "http://sns-1255549670.cos.ap-guangzhou.myqcloud.com/wx982ed8d3473ced2c.o6zAJs8Oghy9CSGBPJEdSoJABPEU.SZVa80OoOknW8750107432d93943f9ce930651ad5ffa.mp4?0.27723747875520743",
    }]
    var array = this.data.q_videos.concat(videoList) //concat() 方法:用于连接两个或多个数组,并返回一个新数组
    this.setData({
      q_videos: array, //视频
      q_yjz: videoList.length < 3 ? false : true, //是否允许预加载
    })
  },
})

转载:https://www.jianshu.com/p/e75054c1adef

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值