使用 'this.currentTime' 获取视频时间并将其重置为 'hover out' 的起点

Using 'this.currentTime' to get the time of a video and reset it to the starting point on 'hover out'

我有一个视频库,我想在其中动态使用 URL 中的媒体片段时间作为海报。 悬停时,我正在尝试将视频重置为初始开始 - 以确保海报处于 2 秒(在此特定示例中)而不是 0。

this.load 有效,但会在再次加载整个视频时造成糟糕的用户体验。

我的想法是将当前时间定义为一个变量(在视频开始播放之前)并在暂停视频时使用它。

但是我只是得到“未捕获的引用错误:未定义 posterTime”。

<video id="video">
  <source src="videourl.mp4#t=2" type="video/mp4">
</video>
const videos = document.querySelectorAll("video")

  videos.forEach(video => {

    video.addEventListener("mouseover", function () {
        var posterTime = this.currentTime;
        this.currentTime = 0;
        this.play()
    })
    
    video.addEventListener("mouseout", function () {
      this.currentTime = posterTime;
      this.pause();
    })
  })

注意我用的是Webflow,跟jQuery/Javascript不是很强。

As I hover out I need it to show that initial frame again (not the first frame, but the one set in the URL)

鉴于此要求,您可以从 source 元素的 src 属性中的 URL 检索片段,并将其应用于视频的 currentTime mouseleave 事件发生:

const videos = document.querySelectorAll("video")

videos.forEach(video => {
  video.addEventListener("mouseenter", function() {
    this.currentTime = 0;
    this.play()
  })

  video.addEventListener("mouseleave", function() {
    let src = this.querySelector('source').src;
    let time = (src.split('#')[1] || 't=0').split('=')[1];
    this.currentTime = time;
    this.pause();
  })
})
<video id="video">
  <source src="http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4#t=5" type="video/mp4">
</video>

My idea is to define the current time as a variable (before the video starts playing) and use it when pausing the video. However I just get "Uncaught ReferenceError: posterTime is not defined".

你的想法和代码都很好,但你犯了一个基本错误。 记住:在函数内部定义的变量将仅在创建它的那个函数中存在。

对内部变量使用 let(如果可能),对全局变量使用 var

解决方案:将变量定义为全局(在任何函数之外)...

const videos = document.querySelectorAll("video");
var posterTime = -1; //# global var, with starting value...
 
videos.forEach(video => {

    video.addEventListener("mouseover", function () 
    {
        posterTime = this.currentTime; //# set time
        this.currentTime = 0;
        this.play()
    })

    video.addEventListener("mouseout", function () 
    {
        this.currentTime = posterTime; //# get time
        this.pause();
    })
})