微信小程序云开发视频轮播图+封面+解决多个视频播放不暂停bug

因为项目比较小,所就一开始就选择了云开发这个开发模式。云开发这个东西我的理解还是比较浅,暂时只能做到读取写入视频图片这样的功能。

1.wxml 轮播图实现
swiper轮播图的属性这里就不赘述了,根据自己需求去修改就好。

微信小程序官方swiper文档
https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html

完整代码:

<swiper indicator-color="#a39f99" indicator-active-color="#f49641" indicator-dots interval="2000" duration="1000"
        previous-margin="30px" next-margin="30px" circular style='height: 420rpx'>
    <view wx:for='{{items}}' wx:key>
        <swiper-item>
            <view class='videoView'>
                <video src='{{item.video}}' class='video' id="myVideo{{index}}" bindtap='cover'>
                </video>
                <image class='cover' id="myVideo{{index}}" src='{{item.cover}}' wx:if='{{show!="myVideo"+index}}' bindtap='cover'
                       ></image>
                <view class='time' wx:if='{{show!=id}}'>{{item.time}}</view>
            </view>
        </swiper-item>
    </view>
</swiper>

小程序和vue还是有很多相同之处的,这里的wx:for循环在云开发后台获取的数据。wx:key不影响运行但会警告,不设key也没问题。

    <view wx:for='{{items}}' wx:key>

接下来就是video组件循环items中的video和items中的cover,也就是我们的视频地址和封面。

<video src='{{item.video}}' class='video' id="myVideo{{index}}" bindtap='cover'>
</video>
<image class='cover' id="myVideo{{index}}" src='{{item.cover}}' wx:if='{{show!="myVideo"+index}}' bindtap='cover'></image>

id用来记录当前视频的id,后面解决多个视频播放前一个视频不停止会用到。

2.js

    onLoad(options) {
        //分享功能
        wx.showShareMenu({
            withShareTicket: true,
            menus: ['shareAppMessage', 'shareTimeline']
        })
        var that = this
        db.collection('video').where({
            publish: _.eq(true)
        }).get({
            success(res) {
                that.setData({
                    items: res.data.reverse() 
                })
            }
        })
    },

首先初始化云开发数据库

const db = wx.cloud.database()
const _ = db.command

还需要全局配置一下,没有配置的朋友可以先去配置一下,这里就不赘述了。

在云存储数据库获取到数据。

db.collection('要查询的数据库').where({
		publish:_eq(true)  //这里设置查询条件,根据需求修改吧
})

成功后,将数据反转,使最新的数据在最上面,这个主要是我在做留言板的时候一个需求,视频轮播其实不一定有这个需求。

	.get({
            success(res) {
                that.setData({
                    items: res.data.reverse() 
                })
            }
        })
    },

至于上面的代码是为了当前页面可以被分享,有需求的朋友可以加上。

data里一个存储视频数据,一个记录正在播放的视频下标。

    data: {
        items: [],  // 视频数据的数组
        show: ''  // 正在播放的视频下标
    }

封面

    cover (e) {
        // 本视频id
        var id = e.currentTarget.id;
        // 上个一视频id
        var prev_id = this.data.show;
        // 停止山一个视频播放
        if (prev_id != id) {
            wx.createVideoContext(prev_id).pause();
            this.setData({
                show: id
            })
            // 延迟500ms,再播放本视频
            setTimeout(function () {
                wx.createVideoContext(id).play();
            }, 500)
        }
    }

点击封面播放视频,所以判断是否停止就放在封面点击事件上了。

wx.createVideoContext官方文档
https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.createVideoContext.html

整体来看其实也没有太复杂的逻辑,不过感觉小程序坑有点多…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

01_Carrortwhisker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值