Jquery 如何从fabricjs画布中删除事件侦听器
我正在使用fabricjs构建html5中的交互式地图 加载DOM时,我通过调用:*my_event_setter(true)*,将mouseover侦听器添加到fabricjs画布实例中 然后为了进行测试,我想在第一次鼠标悬停时通过调用:*我的事件设置器(false)*,删除侦听器。因此,应该删除鼠标悬停侦听器,但它不会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
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()