fabricjs 为每个对象更改光标
fabricjs change cursor for every object
我用 fabric js 创建了一些对象,并在用户将鼠标悬停在对象上时为它们添加了不同的光标。我想添加一个函数来更改整个 canvas 及其所有对象的光标,然后将其更改回默认值(因此对象和 canvas 的光标设置)。
有没有办法做到这一点?还是我必须手动为每个对象设置光标?
我为此得到了一个小的 jsFiddle:https://jsfiddle.net/bxgox7cr/14/
如果您单击按钮 "change Cursor",光标会变为十字准线,但是当您将鼠标移到线条或圆上时,它会更改为它们的设置。我希望光标保持十字准线。按 "default Cursor" 后,所有设置都应恢复原状,因此光标应使用直线和圆的特殊设置。
主要功能在这 2 个函数中:
$('#button').click(function() {
canvas.defaultCursor = 'crosshair';
});
$('#button2').click(function() {
canvas.defaultCursor = 'default';
});
我可能会保存每个对象的默认值,然后在单击 button2 后将它们改回原来的值,但这似乎是一个困难的解决方案,所以我希望有更简单的方法。
只需将此事件添加到您的代码中:
canvas.on('mouse:over', function(event){
if (event.target != null)
event.target.hoverCursor = canvas.defaultCursor;
}
});
在每个对象上,您将重置 'hover' 光标您为整个 canvas 设置的内容。
更新:
如果您需要重置为默认值,您必须跟踪每个对象的原始光标。你需要这样的东西:
$('#button').click(function() {
changeCursor('crosshair');
});
$('#button2').click(function() {
resetCursor();
});
var cursors = {canvasDefault: canvas.defaultCursor,
canvasDefault: 'default',
object:[
{objectType: 'circle',
hoverCursor: 'move'},
{objectType: 'line',
hoverCursor: 'ns-resize'}
]
};
function changeCursor(cursor){
canvas.forEachObject(function(obj){
for (var i in cursors.object){
if (cursors.object[i].objectType == obj.type){
obj.hoverCursor = cursor;
}
}
canvas.defaultCursor = cursor;
});
}
function resetCursor(){
canvas.forEachObject(function(obj){
for (var i in cursors.object){
if (cursors.object[i].objectType == obj.type){
obj.hoverCursor = cursors.object[i].hoverCursor;
}
}
canvas.defaultCursor = cursors.canvasDefault;
});
}
我用 fabric js 创建了一些对象,并在用户将鼠标悬停在对象上时为它们添加了不同的光标。我想添加一个函数来更改整个 canvas 及其所有对象的光标,然后将其更改回默认值(因此对象和 canvas 的光标设置)。
有没有办法做到这一点?还是我必须手动为每个对象设置光标? 我为此得到了一个小的 jsFiddle:https://jsfiddle.net/bxgox7cr/14/
如果您单击按钮 "change Cursor",光标会变为十字准线,但是当您将鼠标移到线条或圆上时,它会更改为它们的设置。我希望光标保持十字准线。按 "default Cursor" 后,所有设置都应恢复原状,因此光标应使用直线和圆的特殊设置。
主要功能在这 2 个函数中:
$('#button').click(function() {
canvas.defaultCursor = 'crosshair';
});
$('#button2').click(function() {
canvas.defaultCursor = 'default';
});
我可能会保存每个对象的默认值,然后在单击 button2 后将它们改回原来的值,但这似乎是一个困难的解决方案,所以我希望有更简单的方法。
只需将此事件添加到您的代码中:
canvas.on('mouse:over', function(event){
if (event.target != null)
event.target.hoverCursor = canvas.defaultCursor;
}
});
在每个对象上,您将重置 'hover' 光标您为整个 canvas 设置的内容。
更新:
如果您需要重置为默认值,您必须跟踪每个对象的原始光标。你需要这样的东西:
$('#button').click(function() {
changeCursor('crosshair');
});
$('#button2').click(function() {
resetCursor();
});
var cursors = {canvasDefault: canvas.defaultCursor,
canvasDefault: 'default',
object:[
{objectType: 'circle',
hoverCursor: 'move'},
{objectType: 'line',
hoverCursor: 'ns-resize'}
]
};
function changeCursor(cursor){
canvas.forEachObject(function(obj){
for (var i in cursors.object){
if (cursors.object[i].objectType == obj.type){
obj.hoverCursor = cursor;
}
}
canvas.defaultCursor = cursor;
});
}
function resetCursor(){
canvas.forEachObject(function(obj){
for (var i in cursors.object){
if (cursors.object[i].objectType == obj.type){
obj.hoverCursor = cursors.object[i].hoverCursor;
}
}
canvas.defaultCursor = cursors.canvasDefault;
});
}