【前端】【萌狼原创】萌狼播放器--代码(三)

简介: 【前端】【萌狼原创】萌狼播放器--代码

一页汇总(css,js,都在这个html文件里面)

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Document</title><!-- 字体图标库 --><linkrel="stylesheet"href="https://at.alicdn.com/t/font_3159328_il2viqh3j9p.css"><linkrel="stylesheet"href="./source/css/font-awesome-4.7.0/css/font-awesome.min.css"/><scriptsrc="./source/js/jquery.min.js"></script><linkhref="./source/css/normalize.css"><style>.player {
/* 边距问题 */margin: 0auto;
padding: 0;
box-sizing: border-box;
/* 大小问题 */width: 100%;
height: auto;
/* 字体问题 *//* 颜色问题 */background-color: #FD70A1;
/* 边框问题 *//* border: 1px solid snow; */border-radius: 5px;
/* 其他美化 */box-shadow: 1px1px1px1pxrgb(19, 141, 255, 0.2);
        }
.player.title {
margin: 0.25em;
color: snow;
        }
.player.titlespan {
padding-left: 0.5em;
font-size: 0.8em;
        }
.playera {
text-decoration: none;
color: snow;
        }
.playervideo {
/* 边距问题 */margin: 0auto;
padding: 0;
box-sizing: border-box;
/* 大小问题 */width: 100%;
height: auto;
        }
/* 控制条样式 */.controller {
/* 边距问题 */margin: 0auto;
padding: 0;
box-sizing: border-box;
/* 大小问题 */width: 100%;
/* 边框问题 */border-radius: 5px;
/* 其他美化 */box-shadow: 1px1px1px1pxrgb(19, 141, 255, 0.2);
        }
.controller.bar {
/* 大小 */width: 100%;
height: 0.5em;
/* 背景 *//* background-color: rgb(34, 200, 255, 0.5); */background-color: rgba(255, 255, 255, 0.8);
/* 边框问题 */border-radius: 5px;
/* 其他美化 */box-shadow: 0px1px1px0pxrgb(19, 141, 255, 0.2);
        }
.controller.bar.line {
/* width: 45%; *//*测试用*/height: 100%;
background-color: rgb(34, 200, 255, 1);
border-radius: 5px;
box-shadow: 1px0px1px0pxrgb(19, 141, 255, 0.2);
        }
.power {
display: -webkit-inline-flex;
/* Safari */display: inline-flex;
justify-content: space-between;
width: 100%;
        }
/* 控制栏 */.controller.basep,
.controller.morep,
.controller.timer {
padding: 01em;
box-sizing: border-box;
height: 1.5em;
color: snow;
line-height: 1.5em;
/* display: table-cell; *//*尽可能的让元素垂直居中*//* display: inline-block; */        }
.controller.basepspan,
.controller.morepspan,
.controller.timerspan {
display: inline-block;
font-size: 1.25em;
        }
</style></head><body><!-- 播放器 --><figure><divclass="player"><divclass="title"><spanclass="iconfont icon-shipin"></span><span>萌狼播放器</span><ahref="https://cnblogs.com/mllt"><small>&nbsp;&nbsp;version:0.1</small></a></div><!-- <video src="http://akc4.top/video/videoBg1.mp4"></video> --><divclass="svedio"><!-- 下面元素默认隐藏 --><spanid="tipStop"class="iconfont icon-icon_video noshow"style="font-size:2em"></span><videosrc="./source/video/旋转复制_x264.mp4"></video></div><!-- 控制栏 --><divclass="controller"><!-- 进度条 --><divclass="bar"><divclass="line"></div></div><!-- 功能区 --><divclass="power"><!-- 播放按钮 --><divclass="basep"><spanid="state"class="iconfont icon-bofang1"></span><spanid="restate"class="iconfont icon-zanting1"></span></div><!-- 时间 --><divclass="timer"><spanclass="current">00:00:00</span> —— <spanclass="total">00:00:00</span></div><!-- 功能按钮 --><divclass="morep"><spanid="expand"class="iconfont icon-24gf-fullScreenEnter"></span></div></div></div></div></figure><script>// 获取元素varvideo=$("video").get(0); // 把jQuery 对象转换为 dom对象vartimer=false;
// 当浏览器可以播放视频的时候,就让video显示出来,同时显示出视频的总时长video.oncanplay=function () {
$("video").show();
vartotalTime=formatTime(video.duration);
$(".total").html(totalTime); // 把计算出来的总时长放入页面中的元素中        };
//监听到暂停video.addEventListener('pause', function () {
console.log('[萌狼工作室]视频被暂停啦~')
$('#state').addClass("icon-bofang1").removeClass("icon-weibiaoti--"); // 切换图标$('#tipStop').addClass('fly-center').removeClass('noshow'); //这个是暂停时在视频中央显示的暂停图标,功能未实现,主要是一个定位问题        });
video.addEventListener('playing', function () {
console.log('[萌狼工作室]视频开始啦~')
console.log('监听到了播放'+$('#state').hasClass('icon-weibiaoti--'))
$('#state').addClass("icon-weibiaoti--").removeClass("icon-bofang1"); // 切换图标$('#tipStop').addClass('noshow');
        });
//播放按钮$("#state").on("click", function () {
if (video.paused) {
video.play(); // 播放            } else {
video.pause(); // 暂停            }
        });
//手动重置$("#restate").on("click", function () {
video.pause(); //暂停视频$(".line").css("width", 0); //播放进度条归零video.currentTime=0; //将视频播放时间归零$(".current").html(formatTime(video.currentTime)); //动态显示的播放时间归零$('#state').addClass("icon-bofang1").removeClass("icon-weibiaoti--"); // 切换图标        });
// 计算时分秒函数formatTimefunctionformatTime(time) {
varh=Math.floor(time/3600);
varm=Math.floor(time%3600/60);
vars=Math.floor(time%60);
// 00:00:00return (h<10?"0"+h : h) +":"+ (m<10?"0"+m : m) +":"+ (s<10?"0"+s : s);
        };
//显示进度条video.ontimeupdate=function () {
varw=video.currentTime/video.duration*100+"%";
$(".line").css("width", w);
$(".current").html(formatTime(video.currentTime));
        };
//全屏和取消全屏$("#expand").on("click", function () {
//确定参与全屏的内容vardiv=document.querySelector('.player');
// 判断是要全屏还是要退出全屏if (!document.webkitIsFullScreen) {
if (div.requestFullscreen) {
div.requestFullscreen(); // 正常浏览器                 } elseif (div.webkitRequestFullScreen) {
div.webkitRequestFullScreen(); // webkit                 } elseif (div.mozRequestFullScreen) {
div.mozRequestFullScreen(); //早期火狐浏览器                } elseif (div.oRequestFullScreen) {
div.oRequestFullScreen(); //早期Opera浏览器                } elseif (div.msRequestFullscreen) {
div.msRequestFullscreen(); //早期IE浏览器                } else {
alert('暂不支持在您的浏览器中全屏');
                }
//H5 API END            } else {
if (document.exitFullscreen) {
document.exitFullscreen(); // 正常浏览器                 } elseif (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen(); // webkit                 } elseif (document.mozCancelFullScreen) {
document.mozCancelFullScreen(); //早期火狐浏览器                } elseif (document.oCancelFullScreen) {
document.oCancelFullScreen(); //早期Opera浏览器                } elseif (document.msCancelFullscreen) {
document.msCancelFullscreen(); //早期IE浏览器                } else {
alert('暂不支持在您的浏览器中全屏');
                }
//H5 API END            }
        });
//监听全屏状态避免Bug//当遇没有通过到特殊操作自动退出全屏时,控制栏因为没有触发,会导致样式异常document.addEventListener('fullscreenchange', function () {
if (document.webkitIsFullScreen) {
console.log('[萌狼工作室]进入全屏,沉浸体验');
//进入全屏后的样式$('.title').addClass("noshow");
$(".controller").addClass("fly");
$("#expand").addClass("icon-24gl-fullScreenEnter").removeClass("icon-24gf-fullScreenEnter");
//创建定时器//定时器,检测是否长时间未操作页面timer=setInterval(function () {
currentTime=newDate().getTime(); //更新当前时间if (currentTime-lastTime>3000) { //判断是否超时if (!$('.controller').hasClass('noshow')) {
$('.controller').addClass("noshow");
console.log('切换型监听触发控制栏隐藏');
                        }
console.log(timer)
                    }
                }, 1000);
            } else {
console.log('[萌狼工作室]退出全屏,偷偷看~')
//清除定时器if (timer!=0) {
clearInterval(timer)
console.log('理论上清除了时钟。'+timer)
                }
//退出全屏后的样式if ($('.title').hasClass("noshow")) {
// console.log("[萌狼播放器]FE1:退出全屏,恢复样式");$('.title').removeClass("noshow");
                }
if ($('.controller').hasClass("fly")) {
// console.log("[萌狼播放器]FE2:退出全屏,恢复样式");$(".controller").removeClass("fly");
                }
if ($('.controller').hasClass("noshow")) {
// console.log("[萌狼播放器]FE2:退出全屏,恢复样式");$(".controller").removeClass("noshow");
                }
if ($("#expand").hasClass("icon-24gl-fullScreenEnter")) {
// console.log("[萌狼播放器]FE3:退出全屏,清除样式");$("#expand").addClass("icon-24gf-fullScreenEnter").removeClass("icon-24gl-fullScreenEnter");
                }
            }
        })
//监听鼠标状态varlastTime=newDate().getTime(); //鼠标最后一次移动时间varcurrentTime=newDate().getTime(); //当前时间document.addEventListener('mousemove', function () {
// console.log('[萌狼播放器]鼠标移动,全屏状态为:'+document.webkitIsFullScreen)//要处于全屏状态才会触发事件if (document.webkitIsFullScreen) {
//此时鼠标移动,显示控件// console.log('[萌狼播放器]鼠标移动且处于全屏状态,显示控件')$('.controller').removeClass("noshow");
//更新操作时间lastTime=newDate().getTime(); //更新操作时间              }
        });
//重置播放状态video.onended=function () {
// 当前的视频时长清零 video.currentTime=0;
$("#state").addClass("icon-bofang1").removeClass("icon-weibiaoti--");
        };
//单击进度条视频跳转$(".bar").on("click", function (event) {
if (!video.paused) {
video.pause();
            }
// 1. 获取单击的位置varoffset=event.offsetX;
// 2. 根据单击视频的播放位置计算要切换的时间varcurrent=offset/$('.bar').width() *video.duration; //duration 持续时间// 3. 把计算后的时间赋值给currentTimevideo.currentTime=current;
console.log('[萌狼播放器]跳转到:'+Math.round(video.currentTime) +"秒")
//更新进度条varw=video.currentTime/video.duration*100+"%";
$(".line").css("width", w);
$(".current").html(formatTime(video.currentTime));
console.log('[萌狼播放器]进度条更新完毕,准备播放');
letplayPromise=video.play()
if (playPromise!==undefined) {
playPromise.then(() => {
video.play()
$('#state').addClass("icon-weibiaoti--").removeClass("icon-bofang1"); // 切换图标console.log('[萌狼播放器]已启动播放,开始观看吧!');
                }).catch((e) => {
console.log("[萌狼播放器]#出现错误#:"+e);
console.log("[萌狼播放器]#错误分析#也许视频格式不太支持噢,请尝试转码(可以使用小丸工具箱)");
//重置video.currentTime=0;
$("#state").addClass("icon-bofang1").removeClass("icon-weibiaoti--");
                })
            }
        });
//视频被点击$("video").on("click", function () {
// console.log("视频被点击")if (video.paused) {
//播放视频video.play()
$('#tipStop').addClass('noshow');
            } else {
//暂停视频video.pause()
            }
        });
$("#tipStop").on("click", function () {
// console.log("视频被点击")if (video.paused) {
//播放视频video.play()
$('#tipStop').addClass('noshow');
            } else {
//暂停视频video.pause()
            }
        })
</script><style>/*隐藏元素*/.noshow {
display: none;
        }
/* 去掉全屏时显示的自带控制条 */video::-webkit-media-controls {
display: none!important;
        }
/* 控制条浮动(全屏时使用) */.fly {
background-color: rgb(34, 200, 255, 0.5);
position: absolute;
left: 50%;
bottom: 0;
height: 2.5em;
transform: translateX(-50%);
        }
.svedio {
position: relative;
font-size: 2em;
/* color:rgb(19, 141, 255); */color: #FD70A1;
        }
.fly-center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 2em;
box-shadow: 1px0px1px0pxrgb(19, 141, 255, 0.5);
        }
</style></body></html>
相关文章
|
3月前
|
缓存 前端开发 JavaScript
利用代码分割优化前端性能:策略与实践
在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
|
2月前
|
缓存 监控 前端开发
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
|
3月前
|
Web App开发 缓存 监控
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
55 1
|
3月前
|
Web App开发 前端开发 JavaScript
前端性能优化实战:从代码到部署的全面指南
前端性能优化实战:从代码到部署的全面指南
62 1
|
3月前
|
前端开发 JavaScript
前端界的革命:掌握这些新技术,让你的代码简洁到让人惊叹!
前端技术的快速发展带来了许多令人惊叹的新特性。ES6及其后续版本引入了箭头函数、模板字符串等简洁语法,极大减少了代码冗余。React通过虚拟DOM和组件化思想,提高了代码的可维护性和效率。Webpack等构建工具通过模块化和代码分割,优化了应用性能和加载速度。这些新技术正引领前端开发的革命,使代码更加简洁、高效、可维护。
52 2
|
3月前
|
前端开发 JavaScript 测试技术
前端工程师的必修课:如何写出优雅、可维护的代码?
前端工程作为数字世界的门面,编写优雅、可维护的代码至关重要。本文从命名规范、模块化设计、注释与文档、遵循最佳实践四个方面,提供了提升代码质量的方法。通过清晰的命名、合理的模块划分、详细的注释和持续的学习,前端工程师可以写出高效且易于维护的代码,为项目的成功打下坚实基础。
54 2
|
3月前
|
监控 前端开发 JavaScript
前端开发的终极奥义:如何让你的代码既快又美,还不易出错?
【10月更文挑战第31天】前端开发是一个充满挑战与机遇的领域,本文从性能优化、代码美化和错误处理三个方面,探讨了如何提升代码的效率、可读性和健壮性。通过减少DOM操作、懒加载、使用Web Workers等方法提升性能;遵循命名规范、保持一致的缩进与空行、添加注释与文档,让代码更易读;通过输入验证、try-catch捕获异常、日志与监控,增强代码的健壮性。追求代码的“快、美、稳”,是每个前端开发者的目标。
57 3
|
3月前
|
前端开发 JavaScript 开发者
前端开发的终极技巧:如何让你的代码既简洁又高效,还能减少bug?
【10月更文挑战第30天】前端开发充满挑战与创新,如何编写简洁高效且少bug的代码是开发者关注的重点。本文介绍五大技巧:1. 模块化,提高代码复用性;2. 组件化,降低代码耦合度;3. 使用现代框架,提高开发效率;4. 统一代码规范,降低沟通成本;5. 利用工具,优化代码质量。掌握这些技巧,让前端开发更高效。
170 1
|
3月前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
62 1
|
3月前
|
缓存 监控 前端开发
前端性能优化:从代码到部署的全面策略
前端性能优化:从代码到部署的全面策略

热门文章

最新文章

  • 1
    【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 4
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 5
    详解智能编码在前端研发的创新应用
  • 6
    巧用通义灵码,提升前端研发效率
  • 7
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 8
    智能编码在前端研发的创新应用
  • 9
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 10
    抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目