批改状态:合格
老师批语:学得挺快, 加油
报班的目的, 一是想系统的学习PHP互联网开发, 第二个就是想学习网络中的视频播放和如何保护资源安全. 西门老师只介绍了视频播放, 视频安全方面, 提供了视频地址加密和阿里云oss服务的思路, 感觉好像还是不懂怎么做, 先自己看手册吧.
web项目中引入第三方插件的一般套路是: 文件包放到/public目录; 页面文件引入插件js, css等文件; 布局中增加一个容器; 使用js创建插件对象, 传入字面量对象设置插件参数.
使用冒泡的方式, 在视频列表容器绑定监听点击事件的处理脚本, 点击视频项, 事件冒泡到视频列表容器, 触发事件处理脚本.
使用定位的方式把标题栏固定在顶部时, 记得加上z-index: 大大的数样式属性, 否则标题栏还是会被滚动的内容遮盖.
目前主流浏览器已禁用视频自动播放功能, 并不是系统bug, 也不是插件bug, 不必纠结.
到ckplayer官网下载播放器文件包,解压到/public文件夹中,建议放到/public/static/plugin/中.
在前端页面布局中加入渲染播放器的容器<div id="video" style="widows: 100vw;height:100vh;"></div>
使用js创建播放器对象.
<script type="text/javascript">var videoObject = {container: '#video',//“#”代表容器的ID,“.”或“”代表容器的classvariable: 'player',//该属性必需设置,值等于下面的new chplayer()的对象flashplayer:false,//如果强制使用flashplayer则设置成truevideo:'/storage/douyin/1.mp4'//视频地址,mobileCkControls: true // 中间的大播放按钮, click: true};var player=new ckplayer(videoObject);</script>
// 点击事件绑定到视频容器上,点击视频项,使用冒泡的方式向上传递点击事件,在视频容器上触发处理脚本document.querySelector('.video-list').addEventListener('click', function(e) {// 触发事件的元素var item = e.target;// 绑定事件的元素var list = e.currentTarget;// 因为绑定事件的元素是视频列表的容器,点击容器不需要触发任何逻辑。if(item == list) {return;}window.location.href="/douyin/playVideo";}, false);
视图文件
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>视频广场</title><link rel="stylesheet" href="/static/plugin/layui/css/layui.css" media="all"><script src="/static/plugin/layui/layui.js"></script><style>body {background-color: #000;padding: 0;margin: 0;width: 100vw;height: 100vh;}.title-area {background-color: #000;height: 50px;line-height: 50px;text-align: center;color: #999;position: fixed;width: 100vw;top: 0px;z-index: 100;}.title-area>.return-back {float: left;margin-left: 5px;font-size: 1.3rem;}.title-area>.title {font-size: 1.2rem;}#carousel {margin-top: 50px;}.video-list {margin-top: 3px;display: grid;grid-template-columns: 1fr 1fr;gap: 3px;}.video-list>.video-item {background-color: #000;position: relative;text-align: center;color: #fff;}.video-list>.video-item>img {/* max-width: 100%;max-height: 100%; *//* max-width: 50vw;max-height: 50vw; */width: 100%;height: 50vw;}.video-list>.video-item>span:first-of-type {position: absolute;bottom: 40px;left: 10px;}.video-list>.video-item>span:last-of-type {position: absolute;bottom: 20px;left: 10px;}</style></head><body onload="resizeItem()"><!-- 标题区 --><section class="title-area"><i class="layui-icon layui-icon-left return-back"></i><span class="title">视频广场</span></section><section class="layui-carousel" id="carousel"><div carousel-item><!-- 条目中可以是任意内容,如:<img src=""> --><div>条目1</div><div>条目2</div><div>条目3</div><div>条目4</div><div>条目5</div></div></section><section class="video-list"><div class="video-item"><img src="/storage/douyin/1.jpg" alt=""><span class="place">北京</span><span class="desc">来吧, 不后悔</span></div><div class="video-item"><img src="/storage/douyin/2.jpg" alt=""><span class="place">北京</span><span class="desc">来吧, 不后悔</span></div><div class="video-item"><img src="/storage/douyin/3.jpg" alt=""><span class="place">北京</span><span class="desc">来吧, 不后悔</span></div><div class="video-item"><img src="/storage/douyin/4.jpg" alt=""><span class="place">北京</span><span class="desc">来吧, 不后悔</span></div><div class="video-item"><img src="/storage/douyin/5.jpg" alt=""><span class="place">北京</span><span class="desc">来吧, 不后悔</span></div><div class="video-item"><img src="/storage/douyin/6.jpg" alt=""><span class="place">北京</span><span class="desc">来吧, 不后悔</span></div><div class="video-item"><img src="/storage/douyin/7.jpg" alt=""><span class="place">北京</span><span class="desc">来吧, 不后悔</span></div><div class="video-item"><img src="/storage/douyin/8.jpg" alt=""><span class="place">北京</span><span class="desc">来吧, 不后悔</span></div></section></body><script>layui.use(['layer', 'carousel'], function () {layer = layui.layer;// 轮播carousel = layui.carousel;//建造实例carousel.render({elem: '#carousel', width: '100%' //设置容器宽度, height: '120px'// , arrow: 'always' //始终显示箭头//,anim: 'updown' //切换动画方式});// 点击事件绑定到视频容器上,点击视频项,使用冒泡的方式向上传递点击事件,在视频容器上触发处理脚本document.querySelector('.video-list').addEventListener('click', function(e) {// 触发事件的元素var item = e.target;// 绑定事件的元素var list = e.currentTarget;// 因为绑定事件的元素是视频列表的容器,点击容器不需要触发任何逻辑。if(item == list) {return;}window.location.href="/douyin/playVideo";}, false);});</script></html>
2-播放视频界面
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>播放视频</title><link rel="stylesheet" href="/static/plugin/layui/css/layui.css" media="all"><script src="/static/plugin/layui/layui.js"></script><script type="text/javascript" src="/static/plugin/ckplayer/ckplayer/ckplayer.js"></script><style>body {background-color: #000;padding: 0;margin: 0;width: 100vw;height: 100vh;}</style></head><body><div id="video" style="widows: 100vw;height:100vh;"></div></body><script type="text/javascript">var videoObject = {container: '#video',//“#”代表容器的ID,“.”或“”代表容器的classvariable: 'player',//该属性必需设置,值等于下面的new chplayer()的对象flashplayer:false,//如果强制使用flashplayer则设置成truevideo:'/storage/douyin/1.mp4'//视频地址,mobileCkControls: true // 中间的大播放按钮, click: true};var player=new ckplayer(videoObject);</script></html>
<?phpnamespace App\Http\Controllers\douyin;use App\Http\Controllers\Controller;class Douyin extends Controller {public function index() {return view('/douyin/square');}public function playVideo() {return view('/douyin/playVideo');}}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号