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移动和复制dom节点实用DOM操作案例
Dec 17 Javascript
百度地图api应用标注地理位置信息(js版)
Feb 01 Javascript
jquery根据name属性查找的小例子
Nov 21 Javascript
jQuery中clearQueue()方法用法实例
Dec 29 Javascript
node.js中格式化数字增加千位符的几种方法
Jul 03 Javascript
jQuery实现根据滚动条位置加载相应内容功能
Jul 18 Javascript
node.js中module.exports与exports用法上的区别
Sep 02 Javascript
获取select的value、text值的简单示例(jquery与javascript)
Dec 07 Javascript
web 屏蔽BackSpace键实例代码
Dec 24 Javascript
实例讲解JavaScript预编译流程
Jan 24 Javascript
一次让你了解全部JavaScript的作用域
Jun 24 Javascript
JavaScript组合模式---引入案例分析
May 23 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
十大“创意”战术!
2020/03/04 星际争霸
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
详解Python装饰器由浅入深
2016/12/09 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
python exit出错原因整理
2020/08/31 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
C有"按引用传递"吗
2016/09/06 面试题
2013年高中生自我评价
2013/10/23 职场文书
六查六看自查材料
2014/02/17 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
银行进社区活动总结
2014/07/07 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
我的中国心演讲稿
2014/09/04 职场文书
群众路线剖析材料
2014/09/30 职场文书
房屋转让协议书
2014/10/18 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python