• JS控制Video播放器(快进、后退、播放、暂停、音量大小)


    思路:

    一.首先监听触发事件。

    比如:向上键对应的keyCode为38,向下键对应的keyCode为40,向左键对应的keyCode为37,向右键对应的keyCode为39,空格键对应的keyCode为32,

    其他的keyCode可以通过 console.log("keyCode:" + event.keyCode); 打印获取。

    二.调用video标签对应的属性以及方法

    获取视频元素:var videoElement = document.getElementById("videoPlay");

    获取设置音量大小:videoElement.volume

    获取设置当前播放的位置:videoElement.currentTime

    播放视频:videoElement.play()

    暂停视频:videoElement.pause()

    三.实际应用,直接上代码

     1  //reurn false 禁止函数内部执行其他的事件或者方法
     2     var vol = 0.1;  //1代表100%音量,每次增减0.1
     3     var time = 10; //单位秒,每次增减10秒
     4     var videoElement = document.getElementById("videoPlay");
     5     console.log(videoElement.paused);
     6 
     7     document.onkeyup = function (event) {//键盘事件
     8 
     9         console.log("keyCode:" + event.keyCode);
    10         var e = event || window.event || arguments.callee.caller.arguments[0];
    11 
    12         //鼠标上下键控制视频音量
    13         if (e && e.keyCode === 38) {
    14 
    15             // 按 向上键
    16             videoElement.volume !== 1 ? videoElement.volume += vol : 1;
    17             return false;
    18 
    19         } else if (e && e.keyCode === 40) {
    20 
    21             // 按 向下键
    22             videoElement.volume !== 0 ? videoElement.volume -= vol : 1;
    23             return false;
    24 
    25         } else if (e && e.keyCode === 37) {
    26 
    27             // 按 向左键
    28             videoElement.currentTime !== 0 ? videoElement.currentTime -= time : 1;
    29             return false;
    30 
    31         } else if (e && e.keyCode === 39) {
    32 
    33             // 按 向右键
    34             videoElement.volume !== videoElement.duration ? videoElement.currentTime += time : 1;
    35             return false;
    36 
    37         } else if (e && e.keyCode === 32) {
    38 
    39             // 按空格键 判断当前是否暂停
    40             videoElement.paused === true ? videoElement.play() : videoElement.pause();
    41             return false;
    42         }
    43 
    44     };

    四.Video标签的属性,方法和事件汇总

    转自:https://www.cnblogs.com/TF12138/p/4448108.html

    1.video标签的属性

    • src :视频的属性
    • poster:视频封面,没有播放时显示的图片
    • preload:预加载
    • autoplay:自动播放
    • loop:循环播放
    • controls:浏览器自带的控制条
    • width:视频宽度
    • height:视频高度

    html 代码

      <video id="media" src="http://www.sundxs.com/test.mp4" controls width="400px" heigt="400px"></video>  
      //audio和video都可以通过JS获取对象,JS通过id获取video和audio的对象

    2.获取video对象

      Media = document.getElementById("media"); 

    3.Media方法和属性

    HTMLVideoElement和HTMLAudioElement 均继承自HTMLMediaElement

    • Media.error; //null:正常
    • Media.error.code; //1.用户终止 2.网络错误 3.解码错误 4.URL无效

    3.1网络状态 

    - Media.currentSrc; //返回当前资源的URL
    - Media.src = value; //返回或设置当前资源的URL
    - Media.canPlayType(type); //是否能播放某种格式的资源
    - Media.networkState; //0.此元素未初始化 1.正常但没有使用网络 2.正在下载数据 3.没有找到资源
    - Media.load(); //重新加载src指定的资源
    - Media.buffered; //返回已缓冲区域,TimeRanges
    - Media.preload; //none:不预载 metadata:预载资源信息 auto:

     

    3.2准备状态 

    - Media.readyState;//1:HAVE_NOTHING 2:HAVE_METADATA 3.HAVE_CURRENT_DATA 4.HAVE_FUTURE_DATA 5.HAVE_ENOUGH_DATA
    - Media.seeking; //是否正在seeking

     

    3.3回放状态

    • Media.currentTime = value; //当前播放的位置,赋值可改变位置
    • Media.startTime; //一般为0,如果为流媒体或者不从0开始的资源,则不为0
    • Media.duration; //当前资源长度 流返回无限
    • Media.paused; //是否暂停
    • Media.defaultPlaybackRate = value;//默认的回放速度,可以设置
    • Media.playbackRate = value;//当前播放速度,设置后马上改变
    • Media.played; //返回已经播放的区域,TimeRanges,关于此对象见下文
    • Media.seekable; //返回可以seek的区域 TimeRanges
    • Media.ended; //是否结束
    • Media.autoPlay; //是否自动播放
    • Media.loop; //是否循环播放
    • Media.play(); //播放
    • Media.pause(); //暂停

     

    3.4视频控制

    • Media.controls;//是否有默认控制条
    • Media.volume = value; //音量
    • Media.muted = value; //静音
      TimeRanges(区域)对象
    • TimeRanges.length; //区域段数
    • TimeRanges.start(index) //第index段区域的开始位置
    • TimeRanges.end(index) //第index段区域的结束位置

     

    3.5相关事件

      var eventTester = function(e){
         Media.addEventListener(e,function(){
             console.log((new Date()).getTime(),e)
         },false);
     }
    • eventTester("loadstart"); //客户端开始请求数据
    • eventTester("progress"); //客户端正在请求数据
    • eventTester("suspend"); //延迟下载
    • eventTester("abort"); //客户端主动终止下载(不是因为错误引起)
    • eventTester("loadstart"); //客户端开始请求数据
    • eventTester("progress"); //客户端正在请求数据
    • eventTester("suspend"); //延迟下载
    • eventTester("abort"); //客户端主动终止下载(不是因为错误引起),
    • eventTester("error"); //请求数据时遇到错误
    • eventTester("stalled"); //网速失速
    • eventTester("play"); //play()和autoplay开始播放时触发
    • eventTester("pause"); //pause()触发
    • eventTester("loadedmetadata"); //成功获取资源长度
    • eventTester("loadeddata"); //
    • eventTester("waiting"); //等待数据,并非错误
    • eventTester("playing"); //开始回放
    • eventTester("canplay"); //可以播放,但中途可能因为加载而暂停
    • eventTester("canplaythrough"); //可以播放,歌曲全部加载完毕
    • eventTester("seeking"); //寻找中
    • eventTester("seeked"); //寻找完毕
    • eventTester("timeupdate"); //播放时间改变
    • eventTester("ended"); //播放结束
    • eventTester("ratechange"); //播放速率改变
    • eventTester("durationchange"); //资源长度改变
    • eventTester("volumechange"); //音量改变
  • 相关阅读:
    HDU 4539郑厂长系列故事――排兵布阵(状压DP)
    HDU 2196Computer(树形DP)
    HDU 4284Travel(状压DP)
    HDU 1520Anniversary party(树型DP)
    HDU 3920Clear All of Them I(状压DP)
    HDU 3853LOOPS(简单概率DP)
    UVA 11983 Weird Advertisement(线段树求矩形并的面积)
    POJ 2886Who Gets the Most Candies?(线段树)
    POJ 2828Buy Tickets
    HDU 1394Minimum Inversion Number(线段树)
  • 原文地址:https://www.cnblogs.com/IT-study/p/11169501.html
Copyright © 2020-2023  润新知