相关API:wx.createVideoContext(string id, Object this)
controls:是否显示默认播放控件(播放/暂停按钮、播放进度、时间)
muted:是否静音
show-play-btn:是否显示视频底部控氏隐制栏的播放按钮
show-center-play-btn:是否显示视频中间的播放按钮祥枝
show-mute-btn:是否显示静音按钮
事歼宴厅件:
bindended:当播放到末尾时触发 ended 事件
接口:
wx.createVideoContext(string id, Object this)
https://gitee.com/susuhhhhhh/wxmini_demo
1.默认显示封面;
2.一个视频播放的时候,其他视频停止播放,并显示封面。
1.通过wx:if判断当前视频是否是播放的状态,如果是就显示视频,如果不是就隐藏视频;
2.点击封面的时候,获取到该视频的id,进行判断,如果当前没有视频播放,就把该视频设置为播放的状态;如果当前有视频播放,则停止当前播放的视频,再播放你点击的这个视频。
<view class="video_body">
<view wx:for="{{courseList}}" wx:for-item="course" class='course-pannle-item' wx:for-index="idx" wx:key="index">
<view class='video-item'>
<video class="video" wx:if='{{idx==playIndex}}' id='video{{idx}}' autoplay='{{true}}' show-center-play-btn="{{false}}" src='{{course.videoUrl}}' controls="羡孙庆true" objectFit="cover"></video>
<image class='video-cover video' wx:if='{{idx!=playIndex}}' mode='widthFix' src='{{course.coverUrl}}'></image>
<image class='video-play-btn' wx:if='{{idx!=playIndex}}' mode='widthFix' data-index='{{idx}}' bindtap='videoPlay' src='/images/home/btn.png'></image>
<!-- <text wx:if='{{idx!=playIndex}}' class='video-duration fs-28'>
{{course.duration}}
凯尺 </text>-->
</view>
</view>
</view>
data: {
playIndex: null, //用于记录当前播放的视频的索引值
courseList: [
{
videoUrl: 'https://fxmv3-asset.oss-cn-zhangjiakou.aliyuncs.com/132a004191990de6d1dde6379a56987b.mp4'兄握, //视频路径
coverUrl: '/images/home/1.png', //视频封面图
duration: '03:00' //视频时长
},
{
videoUrl: 'https://fxmv3-asset.oss-cn-zhangjiakou.aliyuncs.com/bddfba680554409e47aeb653ec5d58af.mp4',
coverUrl: '/images/home/2.png',
duration: '04:45'
}
]
},
videoPlay: function (e) {
var curIdx = e.currentTarget.dataset.index
// 没有播放时播放视频
if (!this.data.playIndex) {
this.setData({
playIndex: curIdx
})
var videoContext = wx.createVideoContext('video' + curIdx)//这里对应的视频id
videoContext.play()
} else {
// 有播放时先将prev暂停,再播放当前点击的current
var videoContextPrev = wx.createVideoContext('video' + this.data.playIndex)
if (this.data.playIndex != curIdx) {
videoContextPrev.pause()
}
this.setData({
playIndex: curIdx
})
var videoContextCurrent = wx.createVideoContext('video' + curIdx)
videoContextCurrent.play()
}
},
首先说一下我的应用场景, 在小程序中会有多个页面存在视频组件的情况, 为了防止视频播放时多个视频组件同时播放的情况,现记录一下方案:
一. 可以在需要视频播放的地方弄一个视频播放的按钮, 当视频播放的时候再孝搜初始化视频组件, 保证整个应用内只有一个视频组件(视频组件的位置需要计算), 整个方法只是理论下的情况
二. 在app.js中 设置两个对象, currentVideoId(播放视频组件的id)和videoContext(当前播放视频的对象, 通过wx.createVideoContext方法获得), 在页面的js中控制, 保证video组件绑定play方法:
<video src="url" bindplay="play"></video>
在play方法中实现即可:
var id = e.currentTarget.id
if (id != null) {
if (app.currentVideoId != id) {
if (app.videoContext != null) {
app.videoContext.stop()
console.warn("暂停")
}
app.currentVideoId = id
app.videoContext = wx.createVideoContext(id)
}
瞎燃 }
因为currentVideoId 和videoContext是唯一的对象, 方法中播放监听事件会暂停之前的播放, 然后再赋值, 等下次video播放监听进来的时候, 会进行判断
三. 包含富文本组件的视频组件同时播放的情况
依据上面的例子, 当自定义富文本组件中包含多个video组件时也用上面的方法会产生错误磨慎虚, 虽然log会显示将执行视频暂停或者停止播放, 但是没有效果, 查看 视频api , 提示
根据api显示, id为video组件的id, 还有一个"Object this", 但是依据上面的api使用, 直接用id确实可以获取video对象, 但是api解释中提示, "在自定义组件下,当前组件实例的this,以 *** 作组件内 video组件", 在自定义组件中, 要加this, 所以总结: 在上面api使用中, 如果video在pages页面中, wx.createVideoContext参数只写id没有问题, 但是当video在自定义组件中, 要必须加this, 才能正确返回VideoContext对象
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)