Fabricjs - 如何在鼠标移动时检测画布?

时间:2016-11-28 06:36:50

标签: javascript html5 html5-canvas fabricjs

在我的fabricjs应用程序中,我创建了动态画布(变量也是动态的)。在这里,我需要在鼠标在画布上移动时检测特定的画布。 示例代码,

var i = 0, canvasArray = [];
$(this).find('canvas').each(function() {
    i++;
    var DynamicCanvas = 'canvas_'+i;
    canvasArray[DynamicCanvas] = new fabric.Canvas('canvas_'+i,{
      width : '200',
      height : '200'
    });
});
在此之后,我有4幅不同的画布。最后添加的画布已激活。但我需要在任何画布上添加对象。 所以我必须使用鼠标移动事件激活画布。我怎样才能实现它。请帮帮我。

1 个答案:

答案 0 :(得分:1)

Mullainathan,

这里有一些使用jQuery的快速解决方案:

 var canvasStr = '';
 var canvasArray = [];
 var fabricCanvasArray = [];
 var htmlStr = '';
 var canvas = null;

 //generate canavases 
 for (var i = 0; i < 4; i++){
            canvasArray.push('c' + i);
            htmlStr += '<canvas id="c' + i + '" width="200" height="200"></canvas>'
 }
 //append canvasses to the body
 $('body').append(htmlStr);

 //to the fabricjs parent div elements assign id's and generate string for jQuery with div id's
 for (var i in canvasArray){
        fabricCanvasArray[i] = new fabric.Canvas(canvasArray[i], {
    isDrawingMode: true
        });

        $('#' + canvasArray[i]).parent().attr('id', ('div' + canvasArray[i]));
    canvasStr += '#div' + canvasArray[i];
    if (i < canvasArray.length - 1){
            canvasStr += ',';
    }
 }

//jQuery event for mouse over each div element of the fabric canvas
 $(canvasStr).mouseover(function(){
     for (var i in fabricCanvasArray){
        if (fabricCanvasArray[i].lowerCanvasEl.id == $(this).children(':first').attr('id')){

        canvas = fabricCanvasArray[i];
        canvas.freeDrawingBrush.width = 10;
        var r = 255 - i*50;
        var g = i * 50;
        var b = 200 - i * 40;
        canvas.freeDrawingBrush.color = 'rgb(' + r + ',' + g + ',' + b + ')';
        canvas.on('mouse:up', function() {
            //do your stuff
         //  canvas.renderAll();
        });
       break;
     }
   }
});

此外,您可以运行fiddle