You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将FabricJS Canvas置于视频上方?设置absolute无效问题

解决FabricJS Canvas置于视频上方的问题

核心问题是父容器未设置相对定位,导致canvas的绝对定位基准不是视频容器,再加上FabricJS自动生成的canvas-container样式干扰,才出现canvas被视频压在下面的情况。按以下修改即可解决:

具体实现步骤

  • 给#videoKit添加position: relative,让内部绝对定位元素以它为参照
  • 调整FabricJS生成的容器和canvas的z-index,确保层级高于视频
  • 同步视频与canvas的尺寸,避免交互区域错位

修改后的完整代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.5.0/fabric.min.js"></script>
<style>
  #videoKit {
    position: relative; /* 关键:设置相对定位 */
    display: inline-block; /* 容器适配视频尺寸 */
  }
  #video {
    display: block;
    width: 500px;
    height: 500px;
  }
  /* 覆盖FabricJS默认容器样式 */
  #canvas-container {
    position: absolute !important;
    left: 0;
    top: 0;
    z-index: 10; /* 确保层级高于视频 */
  }
  #canvas-container canvas {
    z-index: inherit;
  }
</style>
<div id="videoKit">
  <video id="video" controls preload="metadata">
    <source
      src="https://media.istockphoto.com/id/1760658147/fr/vid%C3%A9o/prise-de-vue-par-drone-de-dauphins-nageant.mp4?s=mp4-640x640-is&k=20&c=y9709pLK1KmLp1FZRzkKd8Pmx4xurbRqAK6RWKLSapc="
      type="video/mp4"/>
  </video>
  <canvas id="canvas"></canvas>
</div>

<script>
  var canvas = new fabric.Canvas('canvas', {
    width: 500,
    height: 500
  });

  // 添加测试图形验证效果
  var rect = new fabric.Rect({
    left: 50,
    top: 50,
    width: 100,
    height: 100,
    fill: 'rgba(255,0,0,0.5)'
  });
  canvas.add(rect);
</script>

关键细节说明

  • #videoKit的position: relative是基础,没有这个canvas的绝对定位会相对于整个页面,而非视频容器
  • !important用来强制覆盖FabricJS默认给canvas-container设置的样式,确保它能绝对定位在容器内
  • z-index:10保证canvas容器层级高于视频(视频默认z-index为0)
  • 统一视频和canvas的宽高,避免后续在canvas上的操作区域和视频画面错位

内容的提问来源于stack exchange,提问作者legeba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:22:44