【问题标题】:Binding a Range Slider to Image Sequence将范围滑块绑定到图像序列
【发布时间】:2019-02-02 18:02:40
【问题描述】:

我想显示一个延时视频,但它带有一个范围滑块,以便用户可以来回拖动它。我试过视频,但我不喜欢滚动时的加载效果。我还将视频导出为图像并将其绑定到范围滑块。第一个问题是,是否有任何插件或应用程序可以做到这一点?也许我正在搜索错误的术语。其次是图像序列最好的方法吗?在下面的代码中,我可以让它部分工作,但我不知道如何调整图像的大小,而且它对于画布来说太大了。

<style>
  canvas {
    height: 650px;
    width: 1000px;
    border: 1px solid black;
  }
</style>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
</script>
<canvas id="canvas" height="650px" width="1000px"></canvas>
<br>
<input id="my-input" type="range" min="1" max="50" value="1">
<script type="text/javascript">
    var canvas = document.getElementById("canvas");
    canvas.height = window.innerHeight;
    canvas.width = window.innerWidth;

    var totalImages = 50;
    var videoFrames = [];
    for (var i = 1; i <= totalImages; i++) {
      var videoFrame = new Image;
      var videoFrameUrl = 'http://dacwebdesign.com/testing/images/timelapse-' + i + '.jpg';

      videoFrame.src = videoFrameUrl;
      videoFrames.push(videoFrame);
    }

  $("#my-input").on("input", function(event) {
    var currentImage = videoFrames[event.target.value - 1];
    var context = canvas.getContext("2d");
    context.drawImage(currentImage, 0, 0);
      });
</script>

【问题讨论】:

  • 如果你知道图片的大小,例如1000/650,你可以在JS中设置画布的宽度和高度:canvas.height = 650; canvas.width = 1000;,然后在CSS中设置:canvas{width:100%;}。另一种方式:在 JS 中设置canvas.width = window.innerWidth,然后设置canvas.height = canvas.width*.65
  • 非常感谢,我会试一试

标签: javascript html html5-canvas drawimage rangeslider


【解决方案1】:

您可以调整图像大小以适合您的画布:

var currentImage = videoFrames[event.target.value - 1];
var context = canvas.getContext("2d");
var dstWidth = canvas.width;
var dstHeight = canvas.height;
var srcWidth = currentImage.naturalWidth;
var srcHeight = currentImage.naturalHeight;
context.drawImage(currentImage, 0, 0, srcWidth, srcHeight, 0, 0, dstWidth, dstHeight);

这没有考虑纵横比,因此如果您的画布与图像的纵横比不同,它会显得失真。

【讨论】:

  • 我会试一试。谢谢!
  • 我刚刚编辑它以修正一个错字。它试图从上下文而不是画布中获取大小。
  • 老兄这工作得很好。非常感谢!最近几天我一直在敲我的头
  • 如果您有一个高清显示器(每英寸像素高于平均显示器),它可能看起来很模糊,因为画布分辨率固定为 1000x650 分辨率。您可以通过增加 html 标记中画布的大小来解决此问题,同时保持 css 中的大小相同,这样它只会增加像素数,而不是实际大小。您可以将 html 标记中的分辨率设置为现在测试此解决方案的两倍。
  • 我想建议使用画布的替代方法。如果您将所有图像堆叠为普通的 img 元素,则可以使用 css z index 属性将要查看的图像移到顶部。这可能会更简单,具体取决于您想用它做什么。
猜你喜欢
  • 2015-12-25
  • 2015-02-20
  • 2019-11-20
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多