当前位置:
首页 > 网站开发 > JavaScript >
-
纯原生html编写的h5视频播放器
snail-player-native
- 一个纯原生代码编写的h5视频播放器, 功能完善,基本满足使用,仅供学习,禁止商用
演示
演示加速
Install
1. git clone https://github.com/snail-boy/snail-player-native.git
2. 拷贝lib目录下的文件到自己项目里
Usage
直接运行index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#snailPlayId {
width: 800px;
height: 500px;
margin: 0 auto;
}
h1 {
text-align: center;
}
</style>
</head>
<body>
<h1>snail-player</h1>
<div id='snailPlayId'></div>
</body>
<script type="module">
import SnailPlayer from "./lib/index.js";
new SnailPlayer({
el: '#snailPlayId',
src: 'https://webrabbit.oss-cn-beijing.aliyuncs.com/drawingbed/video.mp4',
autoplay: true, // 是否自动播放
loop: true // 是否循环播放
})
</script>
</html>
Some Code
main.js
// 计算进度条时间
progressTime(offsetY) {
return utils.formatSeconds((offsetY / this.progressw * this.playVideo.duration).toFixed(2))
}
// 进度条计算公式
progressCalculate() {
return (this.progressw / this.playVideo.duration * this.playVideo.currentTime).toFixed(2)
}
// 全屏
fullScreenFun() {
const docElm = document.documentElement
if (!this.isFullScreen) {
utils.addClass(this.el, 'fullscreen-active')
utils.addClass(this.playVideo, 'fullscreen-active')
utils.showClass('snail-player-full-screen-icon')
utils.hiddenClass('snail-player-fullscreen-btn')
utils.changeInnerText('fullscreen-icon', '退出全屏')
utils.addClass(this.playBottom, 'sn-player-fullscreen-bottom-active')
setTimeout(() => {
if (docElm.requestFullscreen) {
docElm.requestFullscreen();
} else if (docElm.mozRequestFullScreen) {
docElm.mozRequestFullScreen();
} else if (document.webkitRequestFullScreen) {
docElm.webkitRequestFullScreen();
}
}, 100)
this.isFullScreen = true
utils.hiddenClass('snail-player-web-fullscreen-box')
} else {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
utils.showClass('snail-player-web-fullscreen-box')
utils.removeClass(this.el, 'fullscreen-active')
utils.removeClass(this.playVideo, 'fullscreen-active')
utils.hiddenClass('snail-player-full-screen-icon')
utils.showClass('snail-player-fullscreen-btn')
utils.changeInnerText('fullscreen-icon', '进入全屏')
utils.removeClass(this.playBottom, 'sn-player-fullscreen-bottom-active')
this.isFullScreen = false
}
}
index.js
//加载css
renderCss(url) {
var head = document.getElementsByTagName('head')[0];
var link = document.createElement('link');
link.type='text/css';
link.rel = 'stylesheet';
link.href = url;
head.appendChild(link);
}
//加载favicon
renderIcon(url) {
var head = document.getElementsByTagName('head')[0];
var link = document.createElement('link');
link.type='type="image/x-icon"';
link.rel = 'shortcut icon';
link.href = url;
head.appendChild(link);
}
Utils
class Utils {
hasClass(ele, cls) {
return !!ele.className.match(new RegExp('(\s|^)' + cls + '(\s|$)'))
}
addClass(ele, cls) {
if (!this.hasClass(ele, cls)) ele.className += ' ' + cls
}
removeClass(ele, cls) {
if (this.hasClass(ele, cls)) {
const reg = new RegExp('(\s|^)' + cls + '(\s|$)')
ele.className = ele.className.replace(reg, '')
}
}
set(key, value) {
localStorage.setItem(key, value)
}
get(key) {
return localStorage.getItem(key)
}
showClass(cls) {
cls ? document.getElementsByClassName(cls)[0].style.display = 'block' : new Error('请输入类名')
}
hiddenClass(cls) {
cls ? document.getElementsByClassName(cls)[0].style.display = 'none' : new Error('请输入类名')
}
changeInnerText(cls, text) {
document.getElementsByClassName(cls)[0].innerHTML = text
}
clickfu(to, cls){
//回调函数,to为点击对象
to.setAttribute("class",cls);
const siblings = to.parentNode.childNodes;
for(let i=0; i<siblings.length; i++)
if(siblings[i].nodeType == 1 && siblings[i] != to)siblings[i].className = '';
}
formatSeconds(value) {
if(!value) return '00:00'
value = parseInt(value);
let time;
if (value > -1) {
let hour = Math.floor(value / 3600);
let min = Math.floor(value / 60) % 60;
let sec = value % 60;
let day = parseInt(hour / 24);
if (day > 0) {
hour = hour - 24 * day;
time = day + "day " + hour + ":";
} else if (hour > 0) {
time = hour + ":";
}else {
time = "";
}
if (min < 10) {
time += "0";
}
time += min + ":";
if (sec < 10) {
time += "0";
}
time += sec;
}
return time;
}
classEle(cls) {
return cls && document.getElementsByClassName(cls)[0]
}
}
export default Utils
Function
- 按空格键暂停播放
- 点击屏幕暂停播放
- 视频进度条拖拽,区分颜色
- 鼠标移动到进度条上方显示时间
- 视频快进慢放
- 视频声音控制
- 画中画
- 整屏播放
- 双击全屏播放
- 等
运行环境
支持es6的各种浏览器
最好用chrome
源码地址,欢迎star
github地址 https://github.com/snail-boy/snail-player-native
gitee地址 https://gitee.com/snailwebboy/snail-player-native
原文链接:https://www.cnblogs.com/snail-boy/p/16323502.html
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比