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

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

controller.css

/* 播放器控制区域的css样式 *//* 注意:请不要随便修改样式名,会影响javascript的执行 *//* 微信公众号/哔哩哔哩:萌狼蓝天 *//* 博客:https://cnblogs.com/mllt */.controller {
/* 边距问题 */margin: 0auto;
padding: 0;
box-sizing: border-box;
/* 大小问题 */width: 100%;
/* 边框问题 */border-radius: 5px;
/* 其他美化 */box-shadow: 1px1px1px1pxrgb(19, 141, 255, 0.2);
}
/* bar:进度条底 */.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);
}
/* line:进度条动态进度 */.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:进度条下面的控制按钮集合 */.power {
display: -webkit-inline-flex;
/* Safari */display: inline-flex;
justify-content: space-between;
width: 100%;
}
/* 控制按钮 *//* basep:控制播放、暂停、重置 */.controller.power.basep,
.controller.power.morep,
.controller.power.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;
}

dynamic.css

/* 这里的css样式由JavaScript频繁控制 *//* 注意:请不要随便修改样式名,会影响javascript的执行 *//* 微信公众号/哔哩哔哩:萌狼蓝天 *//* 博客:https://cnblogs.com/mllt *//*隐藏元素*/.noshow {
display: none;
}
/* 控制条浮动(全屏时使用) */.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);
}

video.js

/* 播放器控制区域的css样式 *//* 注意:因为此JavaScript代码直接引用了css样式,故需要在HTML加载完成后才能加载 *//* 微信公众号/哔哩哔哩:萌狼蓝天 *//* 博客:https://cnblogs.com/mllt */window.οnlοad=function () {}
// 获取元素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'); //这个是暂停时在视频中央显示的暂停图标,功能未实现,主要是一个定位问题$('#tipStop').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()
     }
 })
相关文章
|
3天前
|
前端开发 小程序 JavaScript
信前端里的循环显示如何编写代码?
信前端里的循环显示如何编写代码?
12 5
|
2月前
|
缓存 前端开发 数据格式
构建前端防腐策略问题之保证组件层的代码不受到接口版本变化的问题如何解决
构建前端防腐策略问题之保证组件层的代码不受到接口版本变化的问题如何解决
|
2月前
|
JavaScript 前端开发 小程序
【技巧】JS代码这么写,前端小姐姐都会爱上你
本文介绍了JavaScript编程中的实用技巧,包括解构赋值的多种妙用、数组操作技巧及常用JS功能片段。解构赋值部分涵盖短路语法防错、深度解构及默认值赋值;数组技巧包括按条件添加数据、获取最后一个元素及使用`includes`优化`if`语句;常用功能片段则涉及URL参数解析、页面滚动回顶部及获取滚动距离等。通过这些技巧,提升代码质量和效率。
22 0
【技巧】JS代码这么写,前端小姐姐都会爱上你
|
2月前
|
前端开发 API 开发者
构建前端防腐策略问题之防腐层的核心代码实现以RxJS Observable为中心的的问题如何解决
构建前端防腐策略问题之防腐层的核心代码实现以RxJS Observable为中心的的问题如何解决
|
2月前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
58 0
|
2月前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
78 0
|
2月前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
76 0
|
2月前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
56 0
|
2月前
|
JavaScript 前端开发
揭秘Vue.js组件魔法:如何轻松驾驭前端代码,让维护变得轻而易举?
【8月更文挑战第30天】本文探讨了如何利用Vue.js的组件化开发提升前端代码的可维护性。组件化开发将复杂页面拆分为独立、可复用的组件,提高开发效率和代码可维护性。Vue.js支持全局及局部组件注册,并提供了多种组件间通信方式如props、事件等。通过示例展示了组件定义、数据传递及复用组合的方法,强调了组件化开发在实际项目中的重要性。
21 0
|
2月前
|
机器学习/深度学习 分布式计算 前端开发
构建前端防腐策略问题之前端代码会随着技术引擎的迭代而腐烂的问题如何解决
构建前端防腐策略问题之前端代码会随着技术引擎的迭代而腐烂的问题如何解决
下一篇
无影云桌面