一、video属性介绍

先看下video的属性,与audio基本类似

video组件常用于视频的播放,默认宽度为300px,高度为225px。

二、要实现的效果

先看看功能

1、发送弹幕

在输入框中输入弹幕内容,点击“发送弹幕”,屏幕上就会出现你输入的弹幕内容。

2、获取视频

点击获取视频按钮,弹框选择视频,

3、播放与暂停

点击播放就会开始播放,点击暂停就会暂停。

三、代码

启动nginx来访问本地视频,比如我们在D:\upload文件夹下面放1.mp4视频,nginx启动后,浏览器访问http://localhost:8888/1.mp4,效果如下:

工具类util.js

const getRandomColor = () => {
  let rgb = []
  for (let i = 0; i < 3; ++i) {
    let color = Math.floor(Math.random() * 256).toString(16)
    color = color.length == 1 ? '0' + color : color
    rgb.push(color)
  }
  return '#' + rgb.join('')
}

module.exports = {
   getRandomColor
}

wxml文件

<!--controls:是否显示默认播放控件(播放/暂停按钮、播放进度、时间)-->
    <video id="myVideo" 
        src='{{src}}' 
        danmu-list="{{danmuList}}" 
        enable-danmu  
        danmu-btn 
        controls >
        </video>
    
<input bindblur="bindInputBlur" value="{{inputValue}}"  placeholder='请输入弹幕内容'/>
<button bindtap="bindSendDanmu">发送弹幕</button>
<button bindtap="bindButtonTap">获取视频</button>
<button bindtap="bindVideoPlay">播放</button>
<button bindtap="videoPause">暂停</button>

js文件

const util = require('../../utils/util.js');
Page({

    /**
     * 页面的初始数据
     */
    data: {
        src:"http://localhost:8888/1.mp4",
        // danmuList中text为弹幕中文字,color为弹幕的字体颜色,time为弹幕出现的时间(s)
        danmuList:[
          {text:'first',color:'#ff0000',time:1},
          {text:'second',color:'#008080',time:2},
          {text:'three',color:'#ff00ff',time:3}
        ],
        
    },
    videoContext:null,
    inputValue:'',
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    
    onReady: function () {
        this.videoContext=wx.createVideoContext('myVideo')
    },
    bindInputBlur:function(e){
        console.log(e)
      this.inputValue=e.detail.value
    },
    bindSendDanmu: function () {
        console.log("1")
        this.videoContext.sendDanmu({
          text: this.inputValue,
          color: util.getRandomColor()
        })
        // 发送完弹幕就清空输入框
        this.setData({
          inputValue:""
        })
      },
    
    bindButtonTap: function () {
        var that = this
        wx.chooseVideo({
          sourceType: ['album', 'camera'],
          maxDuration: 60,
          camera: ['front', 'back'],
          success: function (res) {
            that.setData({
              src: res.tempFilePath
            })
          }
        })
      },
    //播放
    bindVideoPlay: function () {
        this.videoContext.play();
    },
    //暂停
    videoPause: function(){
        this.videoContext.pause();
    },  
})

wxss文件

video{
    width: 100vw;
  }
  input{
    border: 1rpx  solid #ccc;
    margin: 20rpx;
  }
  button{
    background-color: rgb(76, 250, 114);
  }
  button{
    margin-bottom: 10rpx;
  }

如果报错:Component does not have a method to handle event "tap".

解决办法如下:点击详情,在本地设置中,不勾选将JS编译成ES5

 

posted on 2023-01-31 16:58  周文豪  阅读(5726)  评论(0编辑  收藏  举报