利用html5自定义实现播放器代码分享

本篇文章主要介绍了从零实现一个自定义html5播放器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本次的分享是一个基于HTML5标签实现的一个自定义视频播放器。其中实现了播放暂停、进度拖拽、音量控制及全屏等功能。

效果预览

利用html5自定义实现播放器代码分享

点我查看 源码仓库 。

核心思路

立即学习“前端免费学习笔记(深入)”;

我相信一定会有些没有接触过制作自定义播放器的童鞋对于 标签的认识会停留在此。

登录后复制

其中controls属性经过设定,会在界面中显示一个浏览器自带的控制条。如果对于UI没有要求的需求,其内置控制器已经可以满足大部分的需求。当然了如果是这样你们也不会看到这篇分享了=。=

隐藏控制条并模拟

那么实现一个自定义功能的播放器关键就在于,我们不使用原生的控制器,将其隐藏掉之后,在下方同样的位置通过html、css来模拟所需样式,同时通过js来调用vedio标签所暴露给我们的接口函数及属性,以及检测用户的操作行为来同步的模拟UI与视频播放数据的相应变化。

几个核心函数及属性的用法

myVid=document.getElementById("video1");//控制视频开关myVid.play() //播放myVid.pause() //暂停//模拟视频进度条myVid.currentTime=5; //返回或设定当前视频播放位置myVid.duration // 返回视频总长度//模拟视频音量myVid.volume //音量//获取视频当前状态后判断何时从loading切换为播放myVid.readyState//0 = HAVE_NOTHING - 没有关于音频/视频是否就绪的信息//1 = HAVE_METADATA - 关于音频/视频就绪的元数据//2 = HAVE_CURRENT_DATA - 关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒//3 = HAVE_FUTURE_DATA - 当前及至少下一帧的数据是可用的//4 = HAVE_ENOUGH_DATA - 可用数据足以开始播放

登录后复制

在所有实现中的关键点,较为繁琐的是对于进度条的模拟。其中使用了video标签中的currentTime以及duration属性,通过当前播放时间与总播放时间的比值,就可以计算出进度条相对于总长的位置。同时用户通过拖拽进度条所最后设置的长度也可以用来反向推算出此时视频应该播放的位置。

拖拽代码思路

//核心代码示例var dragDis = 0var processWidth = xxx //拖拽条总长$('body').mousedown(function(e) {    startX = e.clientX    dragDis = startX - leftInit //leftInit为拖拽条起始点巨屏幕左侧的距离    dragTarget.css({ //拖拽按钮        left: dragDis    })    dragProcess.css({ //进度条(蓝色进度条)        width: dragDis    }) // 令进度条和拖拽按钮渲染在同一位置    videoSource.pause()}).mousemove(function(e) {    moveX = e.clientX    disX = moveX - startX    var left = dragDis + disX    if(left > processWidth) {        left = processWidth    } else if(left 

同理音量的控制与其上行为基本一致,故在源码中作者将音量与进度部分通过不同元素进行判断是进行进度还是音量的拖拽控制。

通过查询视频流状态控制播放前的加载动画

function ifState() {    var state = videoSource.readyState    if(state === 4) { //状态为4即可播放        videoPlayer()    } else {        $('.play-sym-wrapper').remove()        $('body').append('

利用html5自定义实现播放器代码分享

')        //添加loading动画        setTimeout(ifState, 10)    }}setTimeout(ifState, 10)

登录后复制

核心的控制部分已经说完了,有兴趣的同学可以去源码的html中点击播放,其中被迫有很多零碎的需求,比如点击暂停,保存音量等等。整个视频播放器的基础功能实现的还算完善。

以上就是利用html5自定义实现播放器代码分享的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2909944.html

(0)
上一篇 2025年3月11日 04:27:22
下一篇 2025年3月5日 12:54:47

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • HTML5实现眼睛移动效果的示例

    这篇文章主要介绍了基于html5陀螺仪实现ofo首页眼睛移动效果的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近用ofo小黄车App的时候,发现以前下方扫一扫变成了一个眼睛动的小黄人,觉得蛮有意思的,这里用HTML5仿一下效果…

    2025年3月11日 编程技术
    200
  • html5碎片式图片切换制作方法详解

    本篇文章主要介绍了html5教你做炫酷的碎片式图片切换 (canvas) ,具有一定参考价值,有兴趣的可以了解一下 前言 老规矩,先上源码。图片区域是可以点击的,动画会从点击的位置开始发生。 本来这个效果是我3年前做的,只是当是是用无数个 …

    2025年3月11日 编程技术
    200
  • HTML5制作贪吃蛇游戏

    本篇文章主要介绍了h5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 本文介绍了H5 canvas实现贪吃蛇小游戏,分享给大家,具体如下: 实现效果如下 实现思路: ps:这个只是…

    2025年3月11日
    200
  • HTML5加载时的等待动画效果制作

    这篇文章通过实例代码给大家介绍了html5等待加载动画效果的完美解决方案,感兴趣的朋友参考下吧 废话不多说了,直接给大家贴代码了,具体代码如下所示:      100 登录后复制   *{margin:0;padding:0;}    .l…

    2025年3月11日
    200
  • HTML5 IndexedDB本地储存

    indexeddb 是一种低级api,用于客户端存储大量结构化数据(包括, 文件/ blobs)。下面通过本文重点给大家介绍html5本地存储之indexeddb的相关知识,感兴趣的朋友一起看看吧 IndexedDB 是一种低级API,用于…

    编程技术 2025年3月11日
    200
  • HTML5通过api实现拖放排序的实例教程

    html5 中提供了直接拖放的 api,极大的方便我们实现拖放效果,不需要去写一大堆的 js,只需要通过监听元素的拖放事件就能实现各种拖放功能。 前言 html5 中提供了直接拖放的 api,极大的方便我们实现拖放效果,不需要去写一大堆的 …

    编程技术 2025年3月11日
    200
  • 解决在HTML5中的video标签无法播放视频的方法

    这篇文章主要给大家介绍了关于解决html5中video标签无法播放mp4问题的办法,文中介绍的非常详细,相信会对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 前言 最近发现了一个问题,在手机录制了一个1.mp4文…

    2025年3月11日
    200
  • Html5新增标签总结

    这篇文章给大家整理了html5新增的九个标签,非常不错,需要的朋友参考下 今天新学习了9个标签、 简单的说就是一个音频标签,他的主要常用属性有src=””音频的路径 controls=”controls&…

    编程技术 2025年3月11日
    200
  • HTML5讲解之拖拽事件dragstart、drag和dragend

    [导读] 拖拽事件  通过拖拽事件,咱们就可以控制拖拽很多东西了。其中什么元素或者是哪里发生了拖拽事件是最关键的。有些事件是在被拖动的元素上触发,有些事件是在放置目标上触发的。拖动某元素时候,触发的事件有: 拖拽事件     通过拖拽事件,…

    2025年3月11日
    200
  • HTML5实现移动端自适应的几种方法介绍

    这篇文章主要介绍了html5 移动页面自适应手机屏幕四类方法总结,非常具有实用价值,需要的朋友可以参考下 1、使用meta标签:viewport H5移动端页面自适应普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的,但是各设备…

    2025年3月11日
    200

发表回复

登录后才能评论