利用jQuery实现h5播放器播放组件

Posted 我是真的不会前端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用jQuery实现h5播放器播放组件相关的知识,希望对你有一定的参考价值。

播放组件介绍

首先会H5播放组件其实自带video audio标签,只需要引入 添加属性 就可以自动在网页上播放,同样,vue和react也有相应的播放插件。比如vue-video-player 和react native的播放组件
这里提供一个npm地址

https://www.npmjs.com/package/vue-video-player

https://www.npmjs.com/package/react-native-video-controls

但是呢,作为前端工程师,多用原生js写逻辑在某种程度上是对基础夯实的最有效途径。那这里偷了个懒,说好的不用框架写 但还是用了jquery,毕竟可以稍微再某些节点操作上偷点懒
那废话不多说,上代码。

代码介绍

说实话,没啥介绍的 有jjquery和js基础的都看得懂 ,其实就是对各种dom对象和h5音视频api的操作。而且代码有各种注释,应该读懂不复杂,作为前端码农。这是入门必须有的基本功

引入的第三方库

jquery

最新版本即可 也可以通过npm下载 模块化导入

iconfont

用来做播放图标的 手搓css太丑了

音频

audio 标签中自己导入你需要导入的音频
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210710011218328.png

<audio src="./media/media.mp3"></audio>

注意是音频噢

html结构

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document</title>
<link rel="stylesheet" href="./font/iconfont.css">
<link rel="stylesheet" href="./css/media.css">
<script src="./js/jquery.js"></script>
</head>
<body>
<audio src="./media/media.mp3"></audio>
<div class="media">
    <div class="playOrPause">
        <i class="iconfont icon-bofang"></i>
    </div>
    <div class="time">
        <span class="currentMinute">00</span>
        :
        <span class="currentSecond">00</span>
        /
        <span class="durationMinute">00</span>
        :
        <span class="durationSecond">00</span>
    </div>
    <div class="playRange">
        <div class="currentRange"></div>
        <div class="playBtn"></div>
    </div>
    <div class="volume">
        <div class="volumeRange">
            <div class="currentVolume"></div>
            <div class="volumeBtn"></div>
        </div>
        <i class="iconfont icon-volume"></i>
    </div>
</div>
</body>
<script src="./js/media.js"></script>
<script>

</script>
</html>

css

.media{
    width: 800px;
    height: 50px;
    border:3px solid #bbb;
    margin:300px auto;
}
.media>div{
    float:left;
    line-height: 50px;
    margin:0 10px;
}
.media>div.playRange{
    width: 200px;
    height: 6px;
    background-color: #333;
    margin:22px 10px;
    border-radius:3px;
    position: relative;
}
.media>div.playRange .currentRange{
    width: 100px;
    height: 6px;
    background-color: rgb(9, 143, 153);
    position:absolute;
    left: 0;
    top: 0;
}
.media>div.playRange .playBtn{
    width: 20px;
    height: 20px;
    background-color:rgb(9, 143, 153);
    border-radius:50%;
    position: absolute;
    left: 90px;
    top: -7px;
}
.media .volume{
    position:relative;
}
.media .volumeRange{
    width: 4px;
    height: 100px;
    background-color: #333;
    border-radius:2px;
    position:absolute;
    top:-100px;
    left: 10px;
    display:none;
}
.media .volumeRange .currentVolume{
    width: 4px;
    height: 50px;
    background-color: blue;
    border-radius:2px;
    position:absolute;
    left: 0;
    bottom:0;
}
.media .volumeRange .volumeBtn{
    width: 15px;
    height: 15px;
    border-radius:50%;
    background-color: blue;
    position:absolute;
    left: -5px;
    bottom:40px;
}
.media i{
    font-size: 24px;
}

js

// 控制音量的面板显示隐藏
$('.media .volume').hover(function(){
    $(this).find('.volumeRange').show()
},function(){
    $(this).find('.volumeRange').hide()
})

// 点击切换小图标
$('.media .playOrPause i').click(function(){
    if($(this).hasClass('icon-bofang')){
        $(this).removeClass('icon-bofang').addClass('icon-zanting')
        // 多媒体播放
        $('audio')[0].play()
    }else{
        $(this).removeClass('icon-zanting').addClass('icon-bofang')
        // 多媒体暂停
        $('audio')[0].pause()
    }
})
$('.media .volume i').click(function(){
    if($(this).hasClass('icon-volume')){
        $(this).removeClass('icon-volume').addClass('icon-jingyin')
        // 让多媒体静音
        $('audio')[0].muted = true
        // 让音量小球下来
        $('.currentVolume').height(0)
        console.log(-$('.volumeBtn').height()/2)
        $('.volumeBtn').css('top',$('.volumeRange').height()-$('.volumeBtn').height()/2 + "px")
    }else{
        $(this).removeClass('icon-jingyin').addClass('icon-volume')
        // 取消静音
        $('audio')[0].muted = false
    }
})
// 拖拽播放进度
$('.playRange').mousedown(function(e){
    // 让小球过来 - 获取光标按下的位置,计算小球的left
    var x = e.pageX;
    var left = x - $('.playBtn').width()/2;
    $('.playBtn').offset({left})
    var width = $('.playBtn').position().left + $('.playBtn').width()/2
    $('.currentRange').width( width )
    // // 根据当前拖拽好的位置设置多媒体
    // // 比例 = 当前播放过的进度条长度 / 进度条总长度
    var percent = width / $('.playRange').width()
    // 当前播放时长 = 总时长*比例
    var duration = $('audio')[0].duration;
    var currentTime = percent * duration;

    $('audio')[0].currentTime = currentTime;
    // $('audio')[0].pause()
    // 移动
    $(this).mousemove(function(e){
        // 让小球过来 - 获取光标按下的位置,计算小球的left
        var x = e.pageX;
        var left = x - $('.playBtn').width()/2;
        $('.playBtn').offset({left})
        var width = $('.playBtn').position().left + $('.playBtn').width()/2
        $('.currentRange').width( width )
        $('audio')[0].pause()
        $('.media .playOrPause i').removeClass('icon-zanting').addClass('icon-bofang')
    })
})
$('.playRange').mouseup(function(e){
    $('.playRange').off('mousemove')
    var width = $('.currentRange').width()
    // 根据当前拖拽好的位置设置多媒体
    // 比例 = 当前播放过的进度条长度 / 进度条总长度
    var percent = width / $('.playRange').width()
    // 当前播放时长 = 总时长*比例
    var duration = $('audio')[0].duration;
    var currentTime = percent * duration;
    $('audio')[0].currentTime = currentTime;
    $('audio')[0].play()
    $('.media .playOrPause i').removeClass('icon-bofang').addClass('icon-zanting')
})

// 拖拽音量
$('.volumeRange').mousedown(function(e){
    // 让小球过来 - 获取光标按下的位置,计算小球的left
    var y = e.pageY;
    var top = y - $('.volumeBtn').width()/2
    $('.volumeBtn').offset({top})
    $('.currentVolume').height( $('.volumeRange').height() - $('.volumeBtn').position().top - $('.volumeBtn').height()/2 )
    // 计算音量的比例
    var volume = ($('.currentVolume').height() / $('.volumeRange').height()).toFixed(1)-0
    $('audio')[0].volume = volume

    $(this).mousemove(function(e){
        var y = e.pageY;
        var top = y - $('.volumeBtn').width()/2
        $('.volumeBtn').offset({top})
        $('.currentVolume').height( $('.volumeRange').height() - $('.volumeBtn').position().top - $('.volumeBtn').height()/2 )
        // 计算音量的比例
        var volume = ($('.currentVolume').height() / $('.volumeRange').height()).toFixed(1)-0
        $('audio')[0].volume = volume
    })
})
$(document).mouseup(function(e){
    $('.volumeRange').off('mousemove')
})

// 当多媒体加载完成的时候获取多媒体的播放时长
$('audio')[0].addEventListener('canplay',canplay)
function canplay(){
    var duration = this.duration; // 秒
    // 换算成分钟和秒
    var minute = parseInt(duration/60)
    var second = parseInt(duration%60);
    minute = minute<10?'0'+minute:minute;
    second = second<10?'0'+second:second;
    $('.durationMinute').text(minute)
    $('.durationSecond').text(second)
    // 将播放进度小球放到0的位置
    $('.playBtn').css('left',-$('.playBtn').width()/2 + "px")
    $('.currentRange'如何利用阿里视频云开源组件,快速自定义你的H5播放器?

教你怎么用jquery制作音乐播放器

IH5手机上如何实现自动播放

H5 video JS/Jquery如何设置视频选择性循环播放

SkeyeWebPlayer.js H5播放器开发之webpack编译flv.js实现基础播放器功能

网页中加入视频播放组件,并使用ffmpeg对视频转编码