如何从fabricjs canvas中删除事件侦听器

我正在使用fabricjs在html5中构建交互式地图。

当DOM加载时,我通过调用:* my_event_setter( true )*将我的鼠标hover监听器添加到我的fabricjscanvas实例。

然后为了测试,我想通过调用:* my_event_setter( false )*来删除第一次鼠标hover时的监听器。 因此,应该删除鼠标hover监听器,但事实并非如此。

my_event_setter = function( toggle ) { var lvo = { 'object:over' : function(e){ mouseover_handler( e ) } } ; toggle ? my_fabric_canvas.on( lvo ) : my_fabric_canvas.off( lvo ) ; } mouseover_handler = function( e ) { my_event_setter( false ) ; } 

我用以下方法解决了这个

 var canvas = fabric.Canvas.activeInstance; canvas.__eventListeners["mouse:down"] = []; 

事件在一个数组中,因此可以轻松处理这些事件。

此示例显示了在触发mouseup时如何删除mousemove:

 canvas.on('mouse:up', function () { canvas.off('mouse:move', eventHandler); }); 

使用角度js绑定事件

 $scope.closeCurve = function(){ canvas.isDrawingMode = true; canvas.on('mouse:up', function() { canvas.getObjects().forEach(o => { o.fill = 'blue' }); canvas.renderAll(); }); }; 

删除事件,如

 $scope.selectTool = function(){ canvas.isDrawingMode = false; canvas.off('mouse:up'); }; 

用on方法绑定并从off方法中删除… 🙂