Fabric.js 示例:与画布外的对象交互

2026-03-07 67 浏览 0 评论

现在的网页,很少再使用传统的模式开发了,一般都是使用 Vue 等前端框架开发,提高了开发速度,但是如何与 Fabric.js​ 如何交互和操作是个问题,下面是一个简单的示例:

<template>
  <div class="groups">
    <canvas id="canvas"></canvas>
    <button ref="btn">button</button>
  </div>
</template>
<script>
import { fabric } from "fabric";
export default {
  data() {
    return {
      canvas: "",
    };
  },
  mounted() {
    var canvas = this.canvas = new fabric.Canvas("canvas", {
      width: 400,
      height: 400,
      backgroundColor: "#ddd",
    });
    fabric.Object.prototype.originX = "center";
    fabric.Object.prototype.originY= "center";
    fabric.Canvas.prototype.getAbsoluteCoords = function(object){
      console.log(this);
      console.log(object);
        return {
            left:object.left+this._offset.left,
            top:object.top+this._offset.top
        };
    }
    var btn = this.$refs.btn,
    btnWidth = 85,
    btnHeight = 18;
    function positionBtn(obj){
        var absCoords = canvas.getAbsoluteCoords(obj);
        btn.style.left = (absCoords.left - btnWidth/2)+'px';
        btn.style.top = (absCoords.top - btnHeight/2)+'px';
    }
    fabric.Image.fromURL("8972bd40735fa8d2f0c739e510fb30e240818.jpeg",function(img){
        canvas.add(img.set({left:250,top:250,angle:30}).scale(0.25));
        img.on("moving",()=>positionBtn(img));
        img.on("scaling",()=>positionBtn(img));
        positionBtn(img);
    })
  },
};
</script>
<style>
button{
  position: absolute;
}
</style>


发布评论

发布评论前请先 登录
取消
0 评论
点赞
收藏

评论列表 0

暂无评论