老师问题如下
老师。进度条拖动不了,不知道什么原因,还有下图圈出来的几处代码不太明白,传入的e是什么意思和下面var ev有关系吗?还有其他几处代码 谢谢
<!DOCTYPE html>
<html>
<head>
<title>视频播放</title>
<link rel="stylesheet" type="text/css" href="style.css">
<style type="text/css">
*{margin: 0;padding: 0;}
.wrapNode{width: 530px;height: 320px;margin: 200px auto;background-color: #000;}
.videoing{width: 530px;height: 300px;}
.controlsNode{width: 530px;height: 20px;position: relative;background: url(images/ctrs_bg.gif) repeat-x;}
.PlayNode{width: 13px;height: 15px;background: url(images/playNode.png);position: absolute;top: 50%;left: 13px;margin-top: -7.5px;}
.pauseNode{width: 13px;height: 15px;background: url(images/pause.png);position: absolute;top: 50%;left: 13px;margin-top: -7.5px;}
.Progressbar{width: 226px;height: 7px;position: absolute;top: 50%;left: 40px;margin-top: -3.5px;background: url(images/load_bg.png);border-radius: 3px;}
.probg{width: 50%;height: 100%;border-radius: 3px;background: url(images/line_bg.png);}
.raduis{width: 16px;height: 15px;background: url(images/crl_bg.png);position: absolute;top: 50%;left: 40px;margin-top: -7.5px;z-index: 2;}
.time{width: 152px;height: 12px;position: absolute;top: 50%;left: 282px;margin-top: -6px;line-height: 12px;color: #fff;}
.volumeing{width: 18px;height: 16px;position: absolute;top: 50%;left: 398px;margin-top: -8px;background: url(images/volume_bg.png);}
.volumeing_pro{width: 61px;height: 7px;position: absolute;top: 50%;left:420px;margin-top: -3.5px;background: url(images/volumeLine_bg.png);border-radius: 3px;}
.raduisvolume{left: 420px;}
.big{width:15px;height:17px;position: absolute;top: 50%;left: 500px;margin-top: -8.5px;background: url(images/full_bg.png);}
</style>
</head>
<body>
<div>
<!-- 最外层的盒子 -->
<div class="wrapNode">
<!-- 视频的链接地址 -->
<video src="data/imooc.mp4" poster="data/poster.jpg" class="videoing"></video>
<!-- 控制器元素 -->
<div class="controlsNode">
<!-- 播放暂停按钮 -->
<div class="PlayNode"></div>
<!-- 进度条 -->
<div class="Progressbar">
<!-- 进度条上面的原卷 -->
<div class="raduis"></div>
<!-- 动起来的进度条 -->
<div class="probg">
</div>
</div>
<!-- 播放时间 -->
<div class="time">
<span class="now">00.00</span>
<span>-</span>
<span class="all">4:40</span>
</div>
<!-- 喇叭音量 -->
<div class="volumeing"></div>
<div class="volumeing_pro">
</div>
<div class="raduisvolume raduis"></div>
<div class="big"></div>
</div>
<!-- 放大缩小 -->
</div>
</div>
<script type="text/javascript">
// 不知道错在什么地方播放不了
var PlayNode = document.querySelector('.PlayNode'),// 获取播放按钮
videoing = document.querySelector('.videoing'),//获取视频元素
btnplay=true,//PlayBln 控制暂停播放的布尔值
big =document.querySelector('.big');//获取全屏按钮
var all=document.querySelector('.all'),//获取总得时间
probg=document.querySelector('.probg'),//获取该动起来的滚动条外层
raduis=document.querySelector('.raduis'),//获取进度条上的按钮
now=document.querySelector('.now'),//获取当前时间
probgload=document.querySelector('.probgload');
//播放暂停事件
PlayNode.onclick = function(){
btnplay=!btnplay;//通过布尔值去改变classname的方法,默认是true不播放状态 取反值为播放
if (btnplay==false) {//false为播放状态
this.className = 'pauseNode';
videoing.play();
}else{ //否则暂停
this.className = 'PlayNode';
videoing.pause();
}
}
//放大视频浏览器兼容事件
big.onclick=function(){
if (videoing.webkitRequestFullscreen) {
videoing.webkitRequestFullscreen();
}else if (videoing.mozRequestFullScreen) {
videoing.mozRequestFullScreen();
}else{
videoing.requestFullscreen();
}
}
//视频总时长的计算
// setTimeout(function(){
// console.log(parseInt(videoing.duration);
// },100);
//解决了 上来时间的NAN的问题
videoing.addEventListener('canplay',function(){
var needTime=parseInt(videoing.duration),
s=needTime%60,//这里取余数是取得秒数
m=parseInt(needTime/60), //这里是取得分钟数
TimeNum=todo(m)+':'+todo(s);
all.innerHTML=TimeNum;
},false)
//解决事件不足10的问题
function todo(time){
return time<10?'0'+time:time;//老师 这里返回的作用是什么 这里的time是接收的m和s的值吗
}
//当播放视频时,需要当前的视频时间动起来
videoing.addEventListener('timeupdate',function(){
// 目前的 百分比进度
probg.style.width=videoing.currentTime/videoing.duration*100+'%';
raduis.style.left=probg.offsetWidth- 8.5 + 'px';
var needTime=parseInt(videoing.currentTime);//得到当前播放时间
var s=needTime%60;//这里取余数是取得秒数
var m=parseInt(needTime/60); //这里是取得分钟数
var TimeNum=todo(m)+':'+todo(s);
now.innerHTML=TimeNum;
},false)
//进度条拖拽按钮
raduis.onmousedown = function(e){
var ev=e ||event;
var l=ev.clientX-this.offsetleft;
document.onmousemove=function(e){
var ev=e || event;
var minX=ev.clientX-l;
var maxX=probg.offsetWidth-7.5;
minX=minX<-7.5?-7.5:minX;
minX=minX>maxX?maxX:minX;
raduis.style.left=minX+'px';
probg.style.width=(raduis.offsetleft+8)/probg.offsetWidth*100+'%';
}
document.onmouseup = function(e){
document.onmousemove=document.onmouseup=null;
videoing.currentTime=videoing.duration*(raduis.offsetleft+8)/probg.offsetWidth;
if (btnplay==false) {//false为播放状态
this.className = 'pauseNode';
videoing.play();
}else{ //否则暂停
this.className = 'PlayNode';
videoing.pause();
}
}
return false;
}
</script>
</body>
</html>
正在回答 回答被采纳积分+1
同学你好,问题解答如下:
1.前面理解的可以,如下公式可以这样理解:
先看(raduis.offsetLeft + 7) / Progressbar.offsetWidth 这个就是用按钮距离左侧的宽度除以进度条总的宽度,就是进度条占的百分比了。
例如按钮距离左侧20 px,进度条总长为100px , 20/100就是20% 。
然后用当前的进度条百分比,乘以视频的总时间,就是当前播放的时间了。例如视频100分钟,100乘以20% ,就是20分钟。
currentTime就是返回视频播放的当前位置,也就是当我们拖动按钮到20px的位置时,视频就跳到20分钟的位置播放。
2 . return false是阻止元素默认的行为的,如果元素本身有默认行为(例如form有默认的提交行为),就需要设置。这里可以不设置。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
同学你好,不能进行拖拽,是因为单词拼错,如下:
改了之后可以拖拽, 但是实现的效果还是与视频中的有一些差距。在另一个问题中有老师进行了建议,可以参考一下:
https://class.imooc.com/course/qadetail/178799
另外,同学圈出的问题解答如下:
1.e就是event对象,这个就是设置兼容的。有一些低版本的浏览器不能使用e ,那就使用event。
所以使用一个变量ev接收逻辑或表达式,如果浏览器能够识别e,表达式就返回e,使用ev就是使用了e。反之,返回event。
2.这个就是当我拖拽完毕之后就清除事件,这样拖拽完毕之后,鼠标在移动,按钮就不跟随拖拽了。
3.duration 属性返回当前/视频的长度 ,offsetLeft 获取按钮距离父级左侧的距离。
同学这里写错了,后面除以的应该是进度条的总长度。按钮距离左侧的长度/总长度就是按钮所在进度的百分比。例如总长度是100 , 按钮距离左侧的距离是20 ,那么已经播放的进度条百分比就是20/100即为五分之一。
所以以下可以理解为(按钮所在位置/总长度) *视频总时长 就是当前视频播放的时间了。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
- 参与学习 人
- 提交作业 622 份
- 解答问题 6815 个
微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星