zoukankan      html  css  js  c++  java
  • 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()

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

        //reurn false 禁止函数内部执行其他的事件或者方法
        var vol = 0.1;  //1代表100%音量,每次增减0.1
        var time = 10; //单位秒,每次增减10秒
        var videoElement = document.getElementById("videoPlay");
        videoElement = document.getElementsByTagName("video")[0];
    
        console.log(videoElement.paused);
    
        document.onkeyup = function (event) {//键盘事件
    
            console.log("keyCode:" + event.keyCode);
            var e = event || window.event || arguments.callee.caller.arguments[0];
    
            if (e && e.keyCode === 38) {
                // 按 向上键,增加音量
                videoElement.volume !== 1 ? videoElement.volume += vol : 1;
                return false;
    
            } else if (e && e.keyCode === 40) {
                // 按 向下键,减少音量
                videoElement.volume !== 0 ? videoElement.volume -= vol : 1;
                return false;
    
            } else if (e && e.keyCode === 37) {
                // 按 向左键,播放时间增加
                videoElement.currentTime !== 0 ? videoElement.currentTime -= time : 1;
                return false;
    
            } else if (e && e.keyCode === 39) {
                // 按 向右键,播放时间减少
                videoElement.volume !== videoElement.duration ? videoElement.currentTime += time : 1;
                return false;
    
            } else if (e && e.keyCode === 32) {
                // 按空格键 判断当前是否暂停
                videoElement.paused === true ? videoElement.play() : videoElement.pause();
                return false;
                
            } else if (e && e.keyCode === 33) {
                // 按PageUp键,播放速度增加
                videoElement.playbackRate+=vol;
                return false;
                
            } else if (e && e.keyCode === 34) {
                // 按PageDown键,播放速度减少
                videoElement.playbackRate-=vol;
                return false;
            }
    
        };

    四.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"); //音量改变

    出处:https://www.cnblogs.com/IT-study/p/11169501.html

    您的资助是我最大的动力!
    金额随意,欢迎来赏!
    款后有任何问题请给我留言。

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我。(●'◡'●)

    如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,求打             付款后有任何问题请给我留言!!!

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【Jack_孟】!

  • 相关阅读:
    my first blog
    iFrame 父子窗口通讯
    关于手机端横屏竖屏问题
    IE环境规定div高度必须大于字体高度的问题
    adMob的旋转方法
    影响一个UIView是否能正常显示的几个因素
    iphone编译时的注意事项
    Cocos2d的字体生成软件Hiero v2.0 Bitmap Font Tool的一些问题
    编写Web前端代码的注意事项
    Cocos2d的SpriteSheet在多层图片时出现的问题
  • 原文地址:https://www.cnblogs.com/mq0036/p/14514727.html
Copyright © 2011-2022 走看看