FABRIC.JS 框架,初始化添加图形,只能拖动,无法控制旋转和大小

function can_init({id="canvas",init,target,resize,resizePass}){
	/**初始化画布大小
	   @*resize        【函数:监听窗口大小回调,停止时回调一次】
	   @*resizePass        【函数:监听窗口大小过程回调,重复回调直到停止】
	   @*id        【String:canvas画布id】【default:"canvas"】
	   @*target      【目标对象】
	   @*init      【初始化回调】
	**/
	const t = 0;//定时器
	const canvas = new fabric.Canvas(id,{
	    width:window.innerWidth,
	    height:window.innerHeight
	})
	// canvas.renderOnAddition = true;
	if(init)init({canvas:canvas,tis:target})

	// 监听窗口大小改变画布大小保持全屏
	if(resize){
		window.addEventListener('resize',resizefn,false);
	};

	function resizefn(){
		// 监听窗口大小重置画布
		if(resizePass)resizePass({tis:target})
		clearTimeout(t);
		setTimeout(()=>{
			const canvas =new fabric.Canvas('canvas',{
			    width:window.innerWidth,
			    height:window.innerHeight
			})
			if(resize)resize({canvas:canvas,tis:target})
		},200)
	};
}
<template>
  <div class="home">
    <!-- <img alt="Vue logo" src="../assets/logo.png"> -->
    <!-- <HelloWorld msg="Welcome to Your Vue.js App"/> -->
    <div v-if="resetCanvas"><canvas  id="canvas"></canvas></div>
    <controlpanel></controlpanel>
    <button @click="test" class="test">test button</button>
  </div>
</template>

<script>
// @ is an alias to /src
// import HelloWorld from '@/components/HelloWorld.vue'
import controlpanel from '@/components/canvas/controlpanel.vue'
import {can_init} from '@/utils/canvasInit'
import {mapState, mapGetters, mapMutations} from 'vuex'
export default {
  name: 'Home',
  data(){
    return {
      resetCanvas:true,
      t:0,
      canvas:null
    }
  },
  computed:{
    // 把 `this.name` 映射为 `this.$store.state.name`
    ...mapState({
      $canvas: state => state.canvas
    }),
    ...mapGetters('cans',[
      // 把 `this.getName` 映射为 `this.$store.getters.getName`
      "getTest"
    ])
  },
  components: {
    controlpanel
  },
  mounted(){
  	this.$nextTick(()=>{
      can_init({
        target:this,
        init({canvas,tis}){
          tis.initFabric({canvas:canvas})
          tis.canvas = canvas
          // var rect = new fabric.Rect({
          //   left:100,//距离画布左侧的距离,单位是像素
          //   top:100,//距离画布上边的距离
          //   fill:'red',//填充的颜色
          //   width:30,//方形的宽度
          //   height:30,//方形的高度
          //   selectable:true//方形的高度
          // });
          // var rect1 = new fabric.Rect({
          //   left:200,//距离画布左侧的距离,单位是像素
          //   top:200,//距离画布上边的距离
          //   fill:'red',//填充的颜色
          //   width:30,//方形的宽度
          //   height:30//方形的高度
          // });
          // console.log(rect)
          // canvas.add(rect);
        }
      })
  	})
  },
  methods:{
    ...mapMutations([
      // 将 `this.mutationSetName()` 映射为 `this.$store.commit('mutationSetName')`
      'initFabric'
    ]),
    addgemo(){
      console.log(this.$canvas)
    },
    test(){
      var rect = new fabric.Rect({
        left:0,//距离画布左侧的距离,单位是像素
        top:0,//距离画布上边的距离
        fill:'red',//填充的颜色
        width:30,//方形的宽度
        height:30,//方形的高度
        hasControls: true,
      });
      // var rect1 = new fabric.Rect({
      //   left:200,//距离画布左侧的距离,单位是像素
      //   top:200,//距离画布上边的距离
      //   fill:'red',//填充的颜色
      //   width:30,//方形的宽度
      //   height:30//方形的高度
      // });
      // console.log(rect)
      
      // rect.setAngle()
      // rect.setCoords()
      this.canvas.add(rect);
      this.canvas.renderAll()
    }
  }
}
</script>
<style lang="less">
.home {
  width: 100vw;height: 100vh;
}
.test {
  position:fixed;top:0px;left:0px;
}
</style>

 

vue中如果使用创建Ref类型的fabric.Canvas,在添加椭圆fabric.Circle时,该椭圆也需要使用Ref类型,否则会出现选中时只能移动不能缩放,即fabric.Canvas和fabric.Circle要么都是变量,要么都是Ref类型,具体原因未分析

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^