如何使用video.js进行小型视频网站的开发

  • 写在前面
  • 首页大致设计
    • 通过JavaScript与php与数据库交互
    • 通过JavaScript生成视频展示模块
  • 视频播放页面设计
    • 通过js和php与数据库交互
    • 通过js生成视频剧集列表
    • videojs播放器的初始化
    • 关于每个剧集选中状态的改变
    • 单击剧集后进行的切换
  • 写在最后

写在前面

本次项目为课堂作业,笔者对于前端的开发以及所用到的各种语言并不是非常的熟练,所用到的方法可能会有舍近求远的情况,如有发现欢迎探讨。这个项目花了不少时间,遇到了很多问题,也用这篇博客进行纪念。

首页大致设计

首页设计的非常简单,仅有简单的顶部横幅(可替换成轮播台,在这里不介绍)和下方的视频列表。展示视频的封面,和标题。一个视频可能不止一集,所以需要考虑到对产生的每一个展示视频的小块都需要有唯一的id进行控制跳转。

通过JavaScript与php与数据库交互

首先通过js代码用POST方法向php文件传送参数,此处为id,其实对于视频首页并不需要什么参数来帮助php在数据库中进行查找,因为在这里只需要查找全部的视频即可,但是在之后也会用到类似方法,于是现在这里写出,后面不再赘述。

var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象httpRequest.open('POST', 'xxx.php', true); //第二步:打开连接httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)httpRequest.send('id'+id);//发送请求

这里通过php进行数据库的连接,查找和json报文的发回。在这里曾遇到一个问题,视频有很多,但是在数组中却只有一个。可以通过代码中while中的方法进行解决。

 //$path=$_POST('path');$link = mysqli_connect('localhost','qunzhi','123456','qunzhi');if ($link->connect_error){echo '数据库连接失败!';exit(0);}$sql = "SELECT * FROM video";$result =  $link->query($sql);while($row = mysqli_fetch_array($result)){$ros[]=$row;  }$json = json_encode($ros,JSON_UNESCAPED_UNICODE);echo $json;

js文件接收,并将json中的数据存入list,在此交互完成。

httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功var json = httpRequest.responseText;//获取到服务端返回的数据console.log(json);list = JSON.parse(json);console.log(list);

通过JavaScript生成视频展示模块

         var str = "";var i =0;for(;i<list.length;i++){str = str+'<li class="video-list"><a href="video.html?id='+list[i].id+'"><img src="../qunzhi/image/video/'+list[i].imgpath+'" class="video-img" alt=""><p class="video-name">'+list[i].name+'</p></a></li>';}$('#xxx').html(str);

这里的list中,就是从数据库中得到的数据,通过<li>标签来进行展示。注意$(’#xxx’).html(str);中,需要找到对应的设定的id。针对每一个小模块,需要设定一个超链接:href=“video.html?id=’+list[i].id+’”,这里设定的id保证了后续的跳转(期中添加的id为字符串拼接)。同时这里的每一个部分都需要设定样式。
html代码如下:

<div><ul class="video-lists" id='xxx'></ul>
</div>

视频播放页面设计

每一个视频可能仅有一集,也可能有很多集,所以视频播放的页面有videojs的播放器,还有剧集的列表。列表的每一项都有一个小的视频封面图,视频的标题。

通过js和php与数据库交互

在跳转之后,读取url中传来的id,并传给php,通过这个id从数据库读取详细的视频剧集。

 var url = location.search; //获取url中"?"符后的字串var theRequest = new Object();if (url.indexOf("?") != -1) {var str = url.substr(1);strs = str.split("&");for(var i = 0; i < strs.length; i ++) {theRequest[strs[i].split("=")[0]]=decodeURI(strs[i].split("=")[1]);}}var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象httpRequest.open('POST', 'http://8.131.81.241/qunzhi/video.php', true); //第二步:打开连接httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)httpRequest.send('id='+theRequest['id']);//发送请求 将请求头体写在send中

此处为php头部需要的代码,其他与上文一致。需要确认数据库中的数据格式。

$id=$_POST['id'];

通过js生成视频剧集列表

与上文的方法一致,但是此处不需要进行连接,因为在网站中内嵌了vediojs,不需要通过链接来进行页面跳转刷新来改变视频。但在这里的设计是对于每一个<li>标签的id进行设置,以方便在之后的切换中进行选择。

         var j=0;var st = "";for(;j<list.length;j++){  //js循环产生<li>标签,id为视频序号st = st+ '<li class="video-list" id="'+j+'" ><img src="../qunzhi/image/video/'+list[j].imgpath+'" class="video-img" alt=""><p class="video-name">'+list[j].title+'</p></a></li>';  }$('#video-list1').html(st);//在video-list1生成列表

videojs播放器的初始化

这个部分可以参照文章:如何使用videojs播放器
在这里主要阐述如何初始化player的视频源,新建数组以储存视频源数据,在完成数据的更新之后,调用初始化函数。

var j=0;var st = "";for(;j<list.length;j++){  var item = {src : list[j].videopath,type : list[j].type,poster : list[j].imgpath,title : list[j].title}srclist[j] = item;//更新单个视频源console.log(srclist);//反馈更新完的视频源//初始化playerinitailPlayer();

initailPlayer()中的部分代码:
(注释的为原本的数据格式)

sources: srclist// sources:[ // 视频源//     {//         src: 'xxx.mp4',//         type: 'video/mp4',//         poster: 'xxx.png',//         title: 'xxx'//     }// ]

关于每个剧集选中状态的改变

首先我们需要归纳改变状态的情况:
1.单击列表中的某个剧集
2.视频结束后的自动切换
3.主动点击切换下一集
对于第一种情况,对<li>添加click事件。$("#"+j)这里代表的就是<li>的id,由于之前先进行了设置,所以可以通过循环进行方法的添加。针对单击的<li>进行样式的添加,对于其他的进行样式的消除,以达到改变的目的。

 for(j=0;j<list.length;j++){$("#"+j).click(function(){//设置选中状态$(this).siblings('li').removeClass('selected');// 删除其他兄弟元素的样式$(this).addClass('selected'); // 添加当前元素的样式})}

对于第二种和第三种情况,使用监听器与监听器函数来完成切换。
首先是监听器代码,写在初始化之后:

 player.on(player,'ended',ended);player.controlBar.PlayNext.on(player.controlBar.PlayNext,'click',playnext);player.controlBar.AutoPlayNext.on(player.controlBar.AutoPlayNext,'click',changeauto);

下面是监听器函数:

var isauto=true;//记录是否自动播放
var index = 0;//来确定当前播放的视频
/*
自动播放的监听器函数
视频播放结束,若处于自动播放状态则改变index为下一视频
*/
function ended(){if(isauto){//$("#"+index).trigger('click');$("#"+index).siblings().removeClass('selected');// 删除其他兄弟元素的样式$("#"+index).addClass('selected'); // 添加当前元素的样式
}console.log('ended: '+index);//反馈变更
}
/*
播放下一集的监听器函数
用户主动切换下一集则改变当前播放的index值,并且改变选择列表中的选择情况
*/
function playnext(){//$("#"+index).trigger('click');//模拟点击事件,启用后每一次使用播放下一集按钮都会切换播放源$("#"+index).siblings().removeClass('selected');// 删除其他兄弟元素的样式$("#"+index).addClass('selected'); // 添加当前元素的样式console.log('playnext: '+index);//反馈变更
}/*
切换自动播放按钮的监听器函数
每一次切换状态,isauto的值随之改变
*/
function changeauto(){isauto=!isauto;console.log('new isauto: '+isauto);//反馈改变
}

单击剧集后进行的切换

笔者在这里遇到了一点困难,因为难以取得<li>的id,试了很多方法都不行。后来采用设置onclick的方法来达成,在onclick中调用改变剧集的函数。

var li=document.getElementById("video-list1").getElementsByTagName("li");//获取video-list1中的全部<li>if(li!=null){console.log("li:"+li.length);}for(let i=0;i<li.length;i++){li[i].onclick=function(){//alert(li[i].id);changevideo(i);//通过i改变片源}}

此处为改变片源的函数:

 /*
此函数用来更改player的片源,在点击序列中某一集的时候触发,将该集置为播放列表头部,总循环顺序不变
传入参数a为选中的集数
*/
function changevideo(a){var sss=new Array;
var j;
for(j=0;j<list.length;j++){var item = {src : list[a].videopath,type : list[a].type,poster : list[a].imgpath,title : list[a].title}sss[j]=item;//更新新的片源队列a++;if(a==list.length){//如果到队列末尾,将a置零,从头继续a=0;}
}
console.log(sss);//显示更新后的序列
//更新
player.options_.sources=sss;
player.pause();
player.src(sss[0]);
player.TitleBar.updateTextContent(sss[0].title);
player.load();
player.play();
}

写在最后

感谢您的观看,欢迎在评论区进行探讨。css样式并未给出,可以根据自己的喜好进行设置。

如何使用videojs进行小型视频网站的开发相关推荐

  1. 小型教育网站的开发与建设-总体设计(三)

    博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...

  2. 小型教育网站的开发与建设-系统设计(四)

    一.本科计算机专业毕业设计论文写作指南系列文章 本科计算机专业毕业设计论文写作指南 小型教育网站的开发与建设-开篇(一) 小型教育网站的开发与建设-前言与需求分析(二) 小型教育网站的开发与建设-总体 ...

  3. 小型教育网站的开发与建设-开篇(一)

    一.本科计算机专业毕业设计论文写作指南系列文章 本科计算机专业毕业设计论文写作指南 小型教育网站的开发与建设-开篇(一) 小型教育网站的开发与建设-前言与需求分析(二) 小型教育网站的开发与建设-总体 ...

  4. 基于springboot的短视频网站的开发与设计

    通知:代本科论文"润色"<基于视频监控的智慧消防系统>,可私聊. [注]该项目<基于springboot的短视频网站的开发与设计>为本人毕业设计.使用的开发 ...

  5. 小型教育网站的开发与建设-尾篇(五)

    一.本科计算机专业毕业设计论文写作指南系列文章 本科计算机专业毕业设计论文写作指南 小型教育网站的开发与建设-开篇(一) 小型教育网站的开发与建设-前言与需求分析(二) 小型教育网站的开发与建设-总体 ...

  6. 影视网站设计报告代码MySQL_基于PHP的视频网站的设计与实现(MySQL)(含录像)

    基于PHP的视频网站的设计与实现(MySQL)(含录像)(毕业论文10000字,程序代码,MySQL数据库) 本研究的视频网站基于当前较为流行的B/S结构,采用PHP技术和MYSQL数据库进行开发设计 ...

  7. [附源码]JAVA+ssm视频网站(程序+Lw)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  8. jsp在线视频网站系统的设计与实现

    在线视频网站系统的设计与实现 摘 要 当前,国内视频行业的规模呈逐年上升,在线视频.评论都在逐渐增加,视频行业管理的压力日益提升.目前,仍然有较多视频行业采用传统的人工.单机方式进行管理,所产生的管理 ...

  9. 【网站】如何做一个自己的视频网站

    很喜欢一个小姐姐的影视作品,但是网上资源少的可怜,所以想去做一个视频网站,满足大家的观看需求.趁着天气凉快,开始行动! 1.前端 网上查到很多开源的视频插件,最后我用到videojs这一款开源的视频播 ...

最新文章

  1. 如何做到微信机器人不封号_微信如何做到一键群发所有群
  2. 使用RestTemplate访问restful服务时遇到的问题
  3. java学习(162):同步对象锁
  4. python 5的倍数_查找所有低于1000的数字的和,这是Python中3或5的倍数
  5. 理想汽车10月份新增12家直营交付中心 蔚来第1000座充电站上线
  6. F5紧急修复严重的 BIG-IP 预认证 RCE 漏洞
  7. react 引入轮播插件_如何在react中引入swiper滑动插件
  8. C/C++去除字符串首尾空白字符
  9. SQL注入漏洞解决心得
  10. java单例模式——双重检查
  11. html 超出shengl,逃不掉(GL)作者:乔禾若
  12. 页式存储系统的逻辑地址是由页号和页内地址两部分组成的
  13. supervise进程管理利器
  14. ios之Xcode6如何手动创建空工程模板
  15. 设计数据密集型应用(一),DDIA
  16. Qt FFmpeg视频播放器开发(二):FFmepg基本使用与视频播放
  17. baked lighting
  18. Qt+sqlite 《扫雷》游戏排名功能
  19. 2021年最后一件大事!
  20. 太卷了,年薪40W的软件测试大D佬工作经验分享,原来我存在这么多问题......

热门文章

  1. 算法-动态规划学习(含经典例子分析)
  2. SAP案例教程CO成本会计前台操作
  3. 程序员从互联网转行公务员:工资一万多变四千,但过得美滋滋
  4. POJ 2993【Emag eht htiw Em Pleh】
  5. 从‘0’开始完成一个阻抗分析仪(初篇——原理讲解)
  6. linux 5识别网卡,redhat Linux 5.0 如何识别网卡和安装驱动
  7. [渝粤教育] 中国地质大学 政府与事业单位会计 复习题
  8. 哪吒 D1 通过 TF 卡运行 Arch Linux RISC-V rootfs
  9. screen命令后台运行程序
  10. 通过自制js脚本屏蔽网页元素