Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何从fabricjs画布中删除事件侦听器_Jquery_Fabricjs - Fatal编程技术网

Jquery 如何从fabricjs画布中删除事件侦听器

Jquery 如何从fabricjs画布中删除事件侦听器,jquery,fabricjs,Jquery,Fabricjs,我正在使用fabricjs构建html5中的交互式地图 加载DOM时,我通过调用:*my_event_setter(true)*,将mouseover侦听器添加到fabricjs画布实例中 然后为了进行测试,我想在第一次鼠标悬停时通过调用:*我的事件设置器(false)*,删除侦听器。因此,应该删除鼠标悬停侦听器,但它不会 my_event_setter = function( toggle ) { var lvo = { 'object:over' : function(e){ mous

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

加载DOM时,我通过调用:*my_event_setter(true)*,将mouseover侦听器添加到fabricjs画布实例中

然后为了进行测试,我想在第一次鼠标悬停时通过调用:*我的事件设置器(false)*,删除侦听器。因此,应该删除鼠标悬停侦听器,但它不会

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方法中删除…:)

销毁所有事件的最简单解决方案:

canvas.__eventListeners = {}
如果只想删除某些事件,请遍历_eventListeners对象的属性:

for (var prop in canvas.__eventListeners) {
    if (canvas.__eventListeners.hasOwnProperty(prop) && prop === 'mouse:up') {
        delete canvas.__eventListeners[prop]
    }
}
或使用新的
对象。键

Object.keys(canvas.__eventListeners).forEach((prop) => {
    if (prop === 'mouse:up' || prop === 'object:moving')) {
        delete canvas.__eventListeners[prop]
    }
})

接得好
.off
目前不支持对象表示法(就像
on
一样),但可能应该支持。请同时问,什么是让听众清楚的合适方式。。。jQuery(“我的画布元素”).off('object:over')。。。jQuery(my_fabric_canvas).off('object:over'…)??
my_fabric_canvas.off('object:over',eventHandler)
(确保eventHandler是原始引用)kangax。。。这似乎奏效了。。。所以,就stackoverflow而言,这就是答案。。。提示,提示:)我已将问题提交给github。要重置fabric js中的所有画布元素,我们需要使用画布。u eventListeners={};画布。\未定义eventListeners。@SteveOwens您使用的是什么版本的FabricJS?canvas元素需要是一个Fabric类。var canvas=new fabrics.canvas()