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 相关文章推荐
jquery ajax 局部刷新小案例
Feb 08 Javascript
javascript 处理null及null值示例
Jun 09 Javascript
浅谈Javascript线程及定时机制
Jul 02 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
js实现内容显示并使用json传输数据
Mar 16 Javascript
html5+javascript实现简单上传的注意细节
Apr 18 Javascript
js原型链与继承解析(初体验)
May 09 Javascript
JavaScript 拖拽实例代码
Sep 21 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 Javascript
Angular 4环境准备与Angular cli创建项目详解
May 27 Javascript
select自定义小三角样式代码(实用总结)
Aug 18 Javascript
Element中Slider滑块的具体使用
Jul 29 Javascript
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原生DOM对象操作XML的方法
2016/10/17 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
python getopt 参数处理小示例
2009/06/09 Python
Python编写百度贴吧的简单爬虫
2015/04/02 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
关于Python的一些学习总结
2018/05/25 Python
python清除函数占用的内存方法
2018/06/25 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
Python中的取模运算方法
2018/11/10 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
11月红领巾广播稿
2014/01/17 职场文书
平面设计求职信
2014/03/10 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL