Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将多个缩略图精灵与Video.js缩略图一起使用_Javascript_Html_Css_Thumbnails_Video.js - Fatal编程技术网

Javascript 将多个缩略图精灵与Video.js缩略图一起使用

Javascript 将多个缩略图精灵与Video.js缩略图一起使用,javascript,html,css,thumbnails,video.js,Javascript,Html,Css,Thumbnails,Video.js,当我将鼠标悬停在我的Video.js播放器轨迹栏上时,我试图使用它来显示seek预览缩略图。我已经使用ffmpeg将视频中的缩略图提取到精灵表中。每个精灵工作表都包含一组缩略图,当其中一个缩略图在缩略图提取过程中被填满时,将创建一个新的精灵文件 在我的视频播放器页面上,我正在使用javascript创建一个要加载到thumbnails()函数中的对象。如果我希望每五秒钟绘制一次缩略图,我的对象可能看起来像: th_object = { 0: { src: 'source001.jp

当我将鼠标悬停在我的Video.js播放器轨迹栏上时,我试图使用它来显示seek预览缩略图。我已经使用ffmpeg将视频中的缩略图提取到精灵表中。每个精灵工作表都包含一组缩略图,当其中一个缩略图在缩略图提取过程中被填满时,将创建一个新的精灵文件

在我的视频播放器页面上,我正在使用javascript创建一个要加载到thumbnails()函数中的对象。如果我希望每五秒钟绘制一次缩略图,我的对象可能看起来像:

th_object = {
  0: {
     src: 'source001.jpg',
     style: {
       left: '-40px',
       width: '4800px',
       height: '45px',
       clip: 'rect(0, 80px, 45px, 0)'
     }
  },
  5: {
     style: {
       left: '-120px',
       clip: 'rect(0, 160px, 45px, 80px)'
     }
  },
  ... 
}
当需要更改精灵源时(比如60秒左右的视频),我使用的是同一个对象:

  ...
  60: {
    src: 'source002.jpg',
    style: {
      left: '-40px',
      width: '4800px',
      height: '45px',
      clip: 'rect(0, 80px, 45px, 0)'
    }
  },
  ...
然后我调用视频播放器的缩略图()函数(此处称为“视频”):

因此,这就是在我的页面中为缩略图创建一个占位符,加载源图像并对其进行偏移,裁剪精灵中不需要显示的部分。但是页面中只创建了一个占位符。例如,我的HTML的摘录可能如下所示:

<div class="vjs-thumbnail-holder" style="left: 157px;">
  <img src="/storage/source001.jpg" class="vjs-thumbnail" style="left: -680px; width: 4800px; height: 45px; clip: rect(0px 720px 45px 640px); visibility: visible;">
</div>

当我在进度条上移动鼠标时,这些值会被更新,我的源代码最终也会改变。我不能完全确定这两个图像是否都加载到页面上,因为当我检查页面元素时,在任何给定的时间都只有一个可见图像

当我将鼠标悬停到非第一张精灵表应该作为缩略图源加载时,源似乎被卡住了。因此,如果我将鼠标移回应该加载第一个精灵表的点,它不会加载,并且在视频中为该点显示错误的精灵


我的第一个想法是,我需要不同的HTML元素作为我的sprite表单源代码,但我对web开发还不熟悉,因此以这种方式修改Video.js缩略图代码对我来说可能不可行。任何与此相关的帮助都将不胜感激。如果您对其他玩家有任何建议,包括搜索预览缩略图显示或更好的方式来实现这一点,这些也将不胜感激

在使用缩略图代码一段时间后,我发现了一种获得所需结果的方法。为缩略图更新img src的代码部分如下所示:

  // apply updated styles to the thumbnail if necessary
  mouseTime = Math.floor(event.offsetX / progressControl.width() * duration);
  for (time in settings) {
    if (mouseTime > time) {
      active = Math.max(active, time);
    }
  }
  setting = settings[active];
  if (setting.src && img.src != setting.src) {
    img.src = setting.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }
  var x = Math.floor(mouseTime / 300);
  x = x * 300;

  var sourceNeeded = settings[x];

  if (setting.src && (img.src != setting.src)) {

    img.src = setting.src;               
  }
  if (sourceNeeded.src && (img.src != sourceNeeded.src)) {               

    img.src = sourceNeeded.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }
本质上,我需要对照当前mouseTime所需的源代码检查当前imgsrc。因此,我添加了一个额外的检查,如下所示:

  // apply updated styles to the thumbnail if necessary
  mouseTime = Math.floor(event.offsetX / progressControl.width() * duration);
  for (time in settings) {
    if (mouseTime > time) {
      active = Math.max(active, time);
    }
  }
  setting = settings[active];
  if (setting.src && img.src != setting.src) {
    img.src = setting.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }
  var x = Math.floor(mouseTime / 300);
  x = x * 300;

  var sourceNeeded = settings[x];

  if (setting.src && (img.src != setting.src)) {

    img.src = setting.src;               
  }
  if (sourceNeeded.src && (img.src != sourceNeeded.src)) {               

    img.src = sourceNeeded.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }
上面硬编码的300来自于我的精灵表包含了300秒的缩略图。(请注意,在我的原始帖子中的示例中,我使用了60来代替。)x变量确定THU对象中正确源位置的索引,如果该索引与当前img src不匹配,我将更新它。这将允许根据需要从一个img src正确过渡到另一个img src


希望这将有助于未来处于类似情况的人

在使用缩略图代码一段时间后,我发现了一种获得所需结果的方法。为缩略图更新img src的代码部分如下所示:

  // apply updated styles to the thumbnail if necessary
  mouseTime = Math.floor(event.offsetX / progressControl.width() * duration);
  for (time in settings) {
    if (mouseTime > time) {
      active = Math.max(active, time);
    }
  }
  setting = settings[active];
  if (setting.src && img.src != setting.src) {
    img.src = setting.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }
  var x = Math.floor(mouseTime / 300);
  x = x * 300;

  var sourceNeeded = settings[x];

  if (setting.src && (img.src != setting.src)) {

    img.src = setting.src;               
  }
  if (sourceNeeded.src && (img.src != sourceNeeded.src)) {               

    img.src = sourceNeeded.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }
本质上,我需要对照当前mouseTime所需的源代码检查当前imgsrc。因此,我添加了一个额外的检查,如下所示:

  // apply updated styles to the thumbnail if necessary
  mouseTime = Math.floor(event.offsetX / progressControl.width() * duration);
  for (time in settings) {
    if (mouseTime > time) {
      active = Math.max(active, time);
    }
  }
  setting = settings[active];
  if (setting.src && img.src != setting.src) {
    img.src = setting.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }
  var x = Math.floor(mouseTime / 300);
  x = x * 300;

  var sourceNeeded = settings[x];

  if (setting.src && (img.src != setting.src)) {

    img.src = setting.src;               
  }
  if (sourceNeeded.src && (img.src != sourceNeeded.src)) {               

    img.src = sourceNeeded.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }
上面硬编码的300来自于我的精灵表包含了300秒的缩略图。(请注意,在我的原始帖子中的示例中,我使用了60来代替。)x变量确定THU对象中正确源位置的索引,如果该索引与当前img src不匹配,我将更新它。这将允许根据需要从一个img src正确过渡到另一个img src

希望这将有助于未来处于类似情况的人