使用html5视频播放器中的Handler和jQuery触发事件

时间:2019-05-09 21:30:41

标签: html video timeline

我正在使用此方法(在堆栈溢出中找到)在清理HMTL视频时执行事件: Triggering Events from html5 video player with JQuery

它完美地工作。但是,当我将视频时间轴倒退到先前(更早)的时间时,我不知道如何触发其他事件。我想关闭该事件,并在用户达到先前的原始时间时添加其他事件。

我正在使用这种方法来“清理”时间轴:

var windowwidth = $(window).width()-20;

var scrollpos = window.pageXOffset/200;
var targetscrollpos = scrollpos;
var accel = 0;

// ---- Values you can tweak: ----
var accelamount = 0.1; //How fast the video will try to catch up with the target position. 1 = instantaneous, 0 = do nothing.

// pause video on load
vid.pause();


window.onscroll = function(){
    //Set the video position that we want to end up at:
    targetscrollpos = window.pageXOffset/200;   
};

setInterval(function(){  
      //Accelerate towards the target:
      scrollpos += (targetscrollpos - scrollpos)*accelamount;
      //update video playback
      vid.currentTime = scrollpos;
     vid.pause();
}, 60);

以及上一个堆栈溢出问题中的此代码触发事件

    $(".boxB").animate({ marginLeft:'0px'},400);
    $(".boxA").animate({ width:'620px'}, 400);
}

var runAtTime = function(handler, time) {
     var wrapped = function() {
         if(this.currentTime >= time) {
             $(this).off('timeupdate', wrapped);
             return handler.apply(this, arguments);
        }
     }
    return wrapped;
};

$('#v0').on('timeupdate', runAtTime(myHandler, 3.5)); 

此处存在可用的版本: http://www.mediaflash.ca/swipe_video_timeline/index.html

仅当使用滚轮鼠标并在iOS设备上向左或向右滚动或向左/向右滑动时,此功能才起作用。

1 个答案:

答案 0 :(得分:0)

据我所知,没有单独的事件可用于向前/向后滚动。

您可以检查用户是否向后滚动是存储上次时间并将其与新的擦洗时间进行比较,如下所示:

var m_lastVideoTime = 0;//global scope

var runAtTime = function(handler, time) {

     var wrapped = function() {
         if (m_lastVideoTime < this.currentTime){
           //user scrolled back in time, do what you like here
         }
         m_lastVideoTime = this.currentTime;
         if(this.currentTime >= time) {
             //time exceeded specified value (3.5)
             $(this).off('timeupdate', wrapped);
             return handler.apply(this, arguments);
        }
     }
    return wrapped;
};

您当前的函数名称runAtTime有点误导,因为只要视频时间更新,它就会运行。但是,当超过时间3.5时,它本身已经关闭。

从那一刻开始,在重新加载页面之前,永远不会再次调用runAtTime函数,因为您仅使用.on jquery函数将其附加一次。