JS实现简单控制视频播放倍速的实例代码


Posted in Javascript onApril 18, 2021

引言

之前就发现一个问题:有时候看一些学习视频,总是嫌它动作太慢,老师黑板上写板书很浪费时间,要是控制合适倍速播放,这样既能提升学习效率,也能让自己看着舒服点。所以我就学着写了下面这个网页,通过Html+CSS+JavaScript实现。

提示:以下是本篇文章正文内容,下面案例可供参考

一、成品效果

JS实现简单控制视频播放倍速的实例代码

二、具体实现

1.HTML+CSS实现简单布局

代码如下(示例):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css" rel="external nofollow" >
    <title>视频播放</title>
    
</head>
<body>
    <div id="wrapper">
        <video width="765" height="430" src="http://clips.vorwaerts-gmbh.de/VfE_html5.mp4" controls class="flex"></video>
        
        <div class="speed">
            <div class="speed-bar">1x</div>
        </div>
        
    </div>
    

    <script src="./index.js"></script>
</body>
</html>
*{
    margin: 0;
    padding: 0;
}
body{
    min-height: 100vh;/*   vh相对单位,相对于浏览器的尺寸改变*/
    background: #4c4c4c url('https://unsplash.it/1500/900?image=1021');
    background-size: cover;/*以容器为基准,将容器覆盖满,哪怕图片失真、模糊*/
    /*margin: auto;/* margin:auto和margin:0 auto    但不知道父容器宽高,不合适*/
    display: flex;/*将容器设置为弹性容器*/
    justify-content: center;    /*在X方向居中*/
    align-items: center;        /*在Y方向居中*/         /*课外拓展:将盒子在垂直方向居中的所有方式*/
}
#wrapper{
    width: 850px;
    display: flex;
}
.speed{
    flex: 1;/*等比继承,本来应该是1:1继承,但是vedio有固定宽度,所以speed拿剩下宽度*/
    margin: 10px;
    background-color: #fff;
    border-radius: 50px;
    display: flex;
    overflow: hidden;/*起到:规定子容器不能超出,能保持父类圆角效果*/
    align-items: flex-start;/* */

}
.speed-bar{
    width: 100%;
    height: 16.3%;
    background:linear-gradient(-170deg,#2376ae 0%,#c16ecf 100%);    /*设置渐变色样式*/
    display: flex;              /*使得容器可以设置接下来两个样式*/
    justify-content: center;
    align-items: center;
    color: #fff;
    cursor: pointer;
}

HTML处的排版其实中规中矩,只是设置了一个用于包装的id选择器,然后通过video标签使用H5自带的视频播放功能,可以通过更改src来更改播放的视频。
css处的话大家只要注意弹性盒子的使用,通过弹性容器设置了视频的水平垂直居中

2.JS实现功能

代码如下(示例):

//1.拿到要操作的dom结构
//2.取到鼠标在该dom上滑动的距离
//3.改变该dom的高度
//4.改变视频的播放速度

//获取对应的dom结构
var speed=document.querySelector('.speed')//补充:getElementsByClassName   都是获取class选择器
var bar=document.querySelector('.speed-bar')
var video=document.querySelector('.flex')

speed.addEventListener('mousemove',function(e){     //简单来说就是指向了当前发生的事件(click、mouseover等等),保存了当前事件的信息。如鼠标点击事件,有鼠标的坐标信息。
    //console.log(e);
    var y=e.pageY-speed.offsetTop           //鼠标在右侧容器中的距离        offsetTop是获取某个dom结构到浏览器顶部的距离
    var percent = y / speed.offsetHeight    //offsetHeight是获取某个dom结构自身的高度
    var min = 0.4           //设置倍速极限
    var max = 4
    var playbackRate = percent * (max-min)+min      //倍速计算
    var height = Math.round(percent * 100)+'%'//Math.abs()   也是取绝对值
    bar.textContent = playbackRate.toFixed(2)+'×'           //改变dom里面的文本内容    toFixed(x)  保留x位小数

    video.playbackRate = playbackRate       //调整video的播放倍速

    bar.style.height = height       //调整倍数文本的显示高度

})
//注:函数的俩参数作用分别为:监听鼠标点击事件       函数里面定义函数,成为回调函数

重点在于s处实现控制功能,在编写Js版块时,我们应该明确自己要Js帮我们干什么

1.拿到要操作的dom结构
2.取到鼠标在该dom上滑动的距离
3.改变该dom的高度
4.改变视频的播放速度

有了目标,我们就一个一个去实现它
具体实现可以直接看原码,这里重点提一下回调函数和鼠标控制倍速原理。可以看到
speed.addEventListener( " mousemove " ,function(e){)
这是个回调函数,当mousemove发生的时候就会执行函数function (e) tmousemove则是起到监听鼠标位置的作用

到此这篇关于通过JS来实现简单控制视频播放倍速的文章就介绍到这了,更多相关js视频播放倍速内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
完整显示当前日期和时间的JS代码
Sep 17 Javascript
关于jQuery的inArray 方法介绍
Oct 08 Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 Javascript
jQuery循环遍历子节点并获取值的方法
Apr 14 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
Nov 16 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
Jan 22 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
Jun 13 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
Jan 24 Javascript
vue.js的computed,filter,get,set的用法及区别详解
Mar 08 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 #Javascript
详解如何在Canvas中添加事件的方法
Apr 17 #Javascript
Canvas三种动态画圆实现方法说明(小结)
如何在CocosCreator里画个炫酷的雷达图
jquery插件实现图片悬浮
详解CocosCreator消息分发机制
Apr 16 #Javascript
You might like
坏狼php学习 计数器实例代码
2008/06/15 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
python之Character string(实例讲解)
2017/09/25 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
Python基于execjs运行js过程解析
2020/11/27 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
暑假打工感想
2015/08/07 职场文书