html5+js制作自己的视频控件(实现弹幕效果,拖动进度条,播放时间) 一

制作自己的视频控件

今天我们自己制作网页视频播放控件。效果图如下:
在这里插入图片描述

video标签

在h5中新添的视频标签video,设置了controls属性后,会出现默认的控件。而我们希望给这个控件添加更多的效果和样式,所以controls属性我们不设置,通过js来制作自己的播放器。

css样式我会在最后贴出,我们的目标是实现控件的功能

html结构

<div class="father">
        <!-- 视频 -->
        <video src="./1.mp4" class="video"></video>
        <!-- 控件 -->
        <div class="mycontrols">
            <!-- 开始按钮与暂停 -->
            <div class="play">播放</div>
            <!-- 时间 -->
            <div class="timer">00:00/00:00</div>
            <!-- 弹幕 -->
            <div class="danmufa">
                <input type="text" placeholder="发条友善的弹幕吧" class="danmu_inp">
                <button class="danmu_btn">发射</button>
            </div>
            <!-- 倍数播放 -->
            <div class="mu-normal">倍速</div>
            <div class="multi">  

                <div>2x</div>
                <div>1.5x</div>
                <div>1.25x</div>
                <div>1x</div>
                <div>0.5x</div>
            </div>
            <!-- 音量 -->
            <div class="sound-fa">音量</div>
            <!-- <div>
                
            </div> -->
            <!-- 全屏 -->
            <div class="screen">全屏</div>
            <!-- 进度条 -->
            <div class="loadfather">
                <div class="loading"></div>
                <div class="load_i"></div>
            </div>
        </div>
    </div>

播放和暂停

所用到的知识点:
play()方法让视频播放
pause()方法让视频暂停
paused属性 判断当前视频是否是暂停
给播放按钮添加点击事件,通过paused判断当前视频的状态。
代码如下

var video=document.getElementsByClassName("video")[0];
var play=document.getElementsByClassName("play")[0];
// 播放按钮
play.οnclick=function(){
    // 判断视频是否暂停
    if(video.paused){
        video.play();
        play.innerHTML="暂停";
    }else{
        video.pause();
        play.innerHTML="播放";
    }
}

视频当前播放时间和总时间

所用到的知识点:
currentTime属性 获取当前视频播放时间
duration属性 获取当前视频的总时长
然后我们在控制台使用计时器打印这两个属性看一下:
在这里插入图片描述
我们希望时间以00:00/00:00的格式显示出来,要怎么办呢?
我们先看当前时间00:00,一分60秒那么当前的分钟数应该是 (当前的时间/60)
如果当前分钟数小于10那么我就在他的前面拼一个0(就是为了让格式好看!)

//因为有小数所以使用parseInt取整,使用模板字符串拼接
var nowMinute=parseInt(nowTime/60)>10?`${parseInt(nowTime/60)}:`:`0${parseInt(nowTime/60)}:`

然后当前的秒数应该是 (当前的时间%60)

var nowSecond=parseInt(nowTime%60)>10?`${parseInt(nowTime%60)}`:`0${parseInt(nowTime%60)}`

那么总时长和当前时长一个模式就可以了
最后看看这个计时器内部所有的代码:

var vidtime=document.getElementsByClassName("timer")[0];
var timer=setInterval(function () {
    // 当前时长,以及总时长
    var nowTime=video.currentTime;
    var allTime=video.duration;
    // 当前准确的时间速
    var nowMinute=parseInt(nowTime/60)>10?`${parseInt(nowTime/60)}:`:`0${parseInt(nowTime/60)}:`
    var nowSecond=parseInt(nowTime%60)>10?`${parseInt(nowTime%60)}/`:`0${parseInt(nowTime%60)}/`
    //总时长解析后的时间
    var allMinute=parseInt(allTime/60)>10?`${parseInt(allTime/60)}:`:`0${parseInt(allTime/60)}:`
    var allSecond=parseInt(allTime%60)>10?`${parseInt(allTime%60)}`:`0${parseInt(allTime%60)}`
    console.log(nowMinute,nowSecond,allMinute,allSecond);
    vidtime.innerHTML=`${nowMinute}${nowSecond}${allMinute}${allSecond}`
}, 1000)

效果如图:

在这里插入图片描述

播放进度条

进度条并没有用到什么其他的属性
我们实现的进度条的思路是:
一个大的div来表示总的进度条,然后当前进度条在播放的时候改变进度条的宽度,让他慢慢铺满总的进度条。
当前进度条的宽度=当前时间/总时间*总宽度;

var loadfather=document.getElementsByClassName("loadfather")[0];
下面代码写在上面的计时器里
// 获取总进度条的长度
    var loadWidth=loadfather.offsetWidth;
    // 计算当前进度条的宽度
    var second_width=nowTime/allTime*loadWidth;
    // 改变进度条的位置
    loadfather.children[0].style.width = second_width + 'px';
    loadfather.children[1].style.left = second_width + 'px';

效果如下:在这里插入图片描述

点击进度条进行跳转

我们在点击到进度条上时,通过事件对象获取当前鼠标点击位置的x轴位置。

// 点击进度条进行修改视频当前时间
    loadfather.onclick = function(e){
        loadfather.children[0].style.width = e.offsetX + 'px';
        loadfather.children[1].style.left = e.offsetX + 'px';
        // 对应的播放时间
        // 当前点击位置 / 进度条的总宽度 * 总时长
        video.currentTime = e.offsetX/loadfather.clientWidth *video.duration;
    }

上面我们说了当前进度条的宽度=当前时间/总时间*总宽度;
那么鼠标点击进度条时的x轴宽度就是当前进度条的宽度
反过来推当前时间=当前点击位置 / 进度条的总宽度 * 总时长
然后我们改变当前播放的时间 (也就是.currentTime属性),在计时器又一次运行时,视频的进度就会被修改。
在这里插入图片描述

下一篇我们把后面得功能实现!

((如果这篇文章有什么问题请及时联系我!))

  • 17
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: UniApp提供了`uni-mp-video`组件用于实现视频播放功能。该组件基于小程序原生组件`video`进行封装,可以在多端(如H5、APP、小程序等)中使用。 使用方法如下: 1. 在`template`中引入组件 ```html <uni-mp-video src="{{videoUrl}}" controls></uni-mp-video> ``` 2. 在`script`中定义视频链接 ```javascript data() { return { videoUrl: 'http://xxx.mp4' } } ``` 其中,`src`属性为视频链接,`controls`属性为是否显示控制条。 更多详细用法请参考UniApp官方文档。 ### 回答2: Uniapp是一种跨平台的开发框架,可以用于创建各种类型的应用程序,包括视频播放应用。Uniapp中的视频播放可以通过使用uni-video组件进行实现。 首先,我们需要在页面中引入uni-video组件。在页面的`template`节点中添加如下代码: ``` <template> <view> <uni-video :src="videoUrl"></uni-video> </view> </template> ``` 在`script`节点中,我们定义了一个变量`videoUrl`来保存视频的URL。你可以根据需要修改这个URL,以便播放不同的视频。 ``` <script> export default { data() { return { videoUrl: 'http://example.com/video.mp4' }; } }; </script> ``` 这样,我们就完成了视频播放器的基本设置。当页面加载时,Uniapp会自动加载视频并开始播放。 除了基本的播放功能,Uniapp的uni-video组件还提供了一些其他的配置选项,例如设置视频的尺寸、自定义控制栏、监听视频播放事件等。你可以参考Uniapp的官方文档或者uni-video组件的文档来了解更多详细的使用方法。 需要注意的是,在使用uni-video组件之前,你需要先安装并引入uni-video组件库。你可以通过命令`npm install @dcloudio/uni-video`来安装该组件库,然后在页面中引入即可。 总的来说,使用Uniapp进行视频播放非常方便,只需要简单的配置和代码即可实现。希望以上的回答对你有所帮助。 ### 回答3: uniapp是一款基于Vue开发的跨平台应用框架,可以用于同时开发iOS、Android以及Webapp。在uniapp中实现视频播放可以通过使用uni-app的内置组件来实现。 uniapp提供了一个视频组件`<video>`来支持视频播放。通过在页面中引入`<video>`组件,并设置相关属性,即可实现视频播放功能。 首先,需要在页面的`<template>`标签中添加`<video>`组件的标签,并设置对应的属性,如`src`属性设置视频的URL地址,`controls`属性设置是否显示播放控制条等。 接下来,在`<script>`标签中,可以使用uniapp的生命周期函数或事件监听函数来对视频进行操作。比如可以使用`onPlay`事件监听函数来监听视频播放事件,并在函数中执行相关的操作。 除了使用`<video>`组件来实现视频播放,uniapp还提供了其他丰富的插件和组件来增强视频播放功能。用户可以根据需要选择使用合适的插件或组件,如`uni-ui`中的`uni-media-player`组件,可以提供更多样式和功能的视频播放器。 总结起来,uniapp可以通过使用内置的`<video>`组件以及其他插件和组件来实现跨平台的视频播放功能,为开发者提供了丰富的选择和灵活性。开发者可以根据项目需求来选择合适的方式来实现视频播放功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值