在FabricJS中绘图后无法选择对象
Unable to select objects after drawing in FabricJS
我正在尝试在画布上自由绘制矩形。
这是我的JSFiddle。
代码:
var canvas1 = new fabric.Canvas("canvas2");
var freeDrawing = true;
var divPos = {};
var offset = $("#canvas2").offset();
$(document).mousemove(function(e) {
divPos = {
left : e.pageX - offset.left,
top : e.pageY - offset.top
};
});
$('#2').click(function() {
console.log("Button 2 cilcked");
// Declaring the variables
var isMouseDown = false;
var refRect;
// Setting the mouse events
canvas1.on('mouse:down', function(event) {
// Defining the procedure
isMouseDown = true;
// Getting yhe mouse Co-ordinates
// Creating the rectangle object
if (freeDrawing) {
var rect = new fabric.Rect({
left : divPos.left,
top : divPos.top,
width : 0,
height : 0,
stroke : 'red',
strokeWidth : 3,
fill : ''
});
canvas1.add(rect);
refRect = rect; // **Reference of rectangle object
}
});
canvas1.on('mouse:move', function(event) {
// Defining the procedure
if (!isMouseDown) {
return;
}
// Getting yhe mouse Co-ordinates
if (freeDrawing) {
var posX = divPos.left;
var posY = divPos.top;
refRect.setWidth(Math.abs((posX - refRect.get('left'))));
refRect.setHeight(Math.abs((posY - refRect.get('top'))));
canvas1.renderAll();
}
});
canvas1.on('mouse:up', function() {
// alert("mouse up!");
isMouseDown = false;
// freeDrawing=false; // **Disables line drawing
});
});
我所面临的问题是绘制矩形后,我无法移动,调整大小或至少选择绘制的矩形。
错误是当鼠标向上时您没有添加对象。只需像这样更改mouse:up事件函数:
canvas1.on('mouse:up', function() {
// alert("mouse up!");
canvas1.add(refRect);
isMouseDown = false;
// freeDrawing=false; // **Disables line drawing
});
它会工作的很好。:)
我也面临同样的问题,感谢提供的解决方案。如果你注意到在这个小提琴,复制对象创建时移动的形状。
如何解决这个问题。
$(document).ready(function(){
//Getting the canvas
var canvas1 = new fabric.Canvas("canvas2");
var freeDrawing = true;
var divPos = {};
var offset = $("#canvas2").offset();
$(document).mousemove(function(e){
divPos = {
left: e.pageX - offset.left,
top: e.pageY - offset.top
};
});
$('#2').click(function(){
console.log("Button 2 cilcked");
//Declaring the variables
var isMouseDown=false;
var refRect;
//Setting the mouse events
canvas1.on('mouse:down',function(event){
//Defining the procedure
isMouseDown=true;
//Getting yhe mouse Co-ordinates
//Creating the rectangle object
if(freeDrawing) {
var rect=new fabric.Rect({
left:divPos.left,
top:divPos.top,
width:0,
height:0,
stroke:'red',
strokeWidth:3,
fill:''
});
canvas1.add(rect);
refRect=rect; //**Reference of rectangle object
}
});
canvas1.on('mouse:move', function(event){
// Defining the procedure
if(!isMouseDown)
{
return;
}
//Getting yhe mouse Co-ordinates
if(freeDrawing) {
var posX=divPos.left;
var posY=divPos.top;
refRect.setWidth(Math.abs((posX-refRect.get('left'))));
refRect.setHeight(Math.abs((posY-refRect.get('top'))));
canvas1.renderAll();
}
});
canvas1.on('mouse:up',function(){
//alert("mouse up!");
canvas1.add(refRect);
isMouseDown=false;
//freeDrawing=false; // **Disables line drawing
});
});
});
http://jsfiddle.net/PrakashS/8u1cqasa/75/其他答案的实现都不适合我。似乎都不兼容最新的fabric.js版本或有重要的问题。
所以我实现了我自己的(检查HTML源中的JS)
https://cancerberosgx.github.io/demos/misc/fabricRectangleFreeDrawing.html?d = 9
- 支持两种模式:一种模式将创建和更新矩形onmousedown,另一种模式不会,只创建矩形onmouseup
- 不依赖于fabric.js以外的任何库(没有jquery,没有react,没有其他)
- 不使用偏移量或事件。clientX等来跟踪坐标。它只是使用织物事件。指针API来计算它。这是安全和兼容的,因为它不依赖于DOM,只依赖于fabric.js的公共API
- 仔细管理事件侦听器待办事项:
- 我可能还会添加油门支持鼠标移动
谢谢
相关文章:
- jQuery-检测选择对象是否添加或删除了选项
- 如何通过Fabric.js只点击实际内容来选择对象
- j查询选择器不选择对象
- 在选择对象中使用多个 add() 命令
- 如何使用 jQuery 克隆选择对象
- 用Javascript创建一个动态选择对象
- IndexedBD从上到下选择对象
- 当您已经选择对象时,如何在jQuery中获取直属子项
- 如何打开窗口并在该窗口中选择对象
- Fabricjs-Can'不要在fabric.util.enlivenObjects之后选择对象
- 从管线中选择“对象”“角度参数”
- 在选择对象中输入文本
- 选择对象值
- 从 javascript 对象数组中选择对象的子集
- 如何将大量项目添加到 HTML 选择对象
- 根据选项值匹配选择对象变量
- 在更改函数后使用 jQuery 选择对象,修改了需要选择的元素的 html 结构
- 使用变量中的数字动态选择对象
- 随机选择对象
- 正交摄影机和使用光线投射选择对象